11/*
2- * Copyright (c) 2022, 2023 , Oracle and/or its affiliates. All rights reserved.
2+ * Copyright (c) 2022, 2025 , Oracle and/or its affiliates. All rights reserved.
33 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44 *
55 * This code is free software; you can redistribute it and/or modify it
@@ -77,7 +77,11 @@ public void testPackage(Path base) throws Exception {
7777 """
7878 Link to <a href="../p2/package-summary.html#package-p2-heading"><code>heading in package p2</code></a>""" ,
7979 """
80- Plain link to <a href="../p2/Class2.html#class2-sub-heading">sub heading above</a></div>""" ,
80+ Plain link to <a href="../p2/Class2.html#class2-sub-heading">heading in Class2</a></div>""" ,
81+ """
82+ <li><a href="#main">unqualified link to heading above</a></li>
83+ <li><a href="#main">qualified link to heading above</a></li>
84+ """ ,
8185 """
8286 <li><a href="../p2/Class2.html#class2main">See main heading in p2.Class2</a></li>
8387 <li><a href="../p2/package-summary.html#package-p2-heading">See heading in p2</a></li>
@@ -89,13 +93,19 @@ public void testPackage(Path base) throws Exception {
8993 Plain link <a href="../p1/Class1.html#main">to Class1</a>.""" );
9094 checkOrder ("p2/package-summary.html" ,
9195 """
92- <a href="Class2.html#class2-sub-heading">See sub heading in p2.Class2</a>""" );
96+ <li><a href="Class2.html#class2-sub-heading">See sub heading in p2.Class2</a></li>
97+ <li><a href="#package-p2-heading">local qualified link</a></li>
98+ <li><a href="#package-p2-heading">local unqualified link</a></li>
99+ """ );
93100
94101 checkOrder ("p2/doc-files/file.html" ,
95102 """
96103 Plain link to <a href="../../p1/Class1.html#main">heading in p1.ClassA</a>.""" ,
97104 """
98- <a href="../Class2.html#class2main">See main heading in p2.ClassB</a>""" );
105+ <li><a href="../Class2.html#class2main">See main heading in p2.ClassB</a></li>
106+ <li><a href="../package-summary.html#package-p2-heading">package link</a></li>
107+ <li><a href="#package-p2-html-file-heading">local anchor</a></li>
108+ """ );
99109 }
100110
101111 @ Test
@@ -112,12 +122,57 @@ public void testModule(Path base) throws Exception {
112122 checkOrder ("m1/module-summary.html" ,
113123 """
114124 <a href="../m2/com/m2/Class2.html#main-heading">See main heading in Class2</a>""" );
125+ checkOrder ("m1/com/m1/package-summary.html" ,
126+ """
127+ <div class="block"><a href="#package-anchor">Link to local anchor</a>.
128+ """ ,
129+ """
130+ <span id="package-anchor" class="search-tag-result">package-anchor</span></div>
131+ """ ,
132+ """
133+ <ul class="tag-list">
134+ <li><a href="#package-anchor">unqualified local anchor</a></li>
135+ <li><a href="#package-anchor">qualified local anchor</a></li>
136+ <li><a href="#package-anchor">fully qualified local anchor</a></li>
137+ </ul>
138+ """ );
115139 checkOrder ("m1/com/m1/Class1.html" ,
116140 """
117141 <a href="../../../m2/com/m2/Class2.html#sub"><code>sub heading in Class2</code></a>.""" ,
118142 """
119- <li><a href="../../../m2/com/m2/Class2.html#main-heading">See main heading in Class2</a></li>
120- <li><a href="../../module-summary.html#module-m1-heading">See heading in module m1</a></li>
143+ <p>More links:
144+ <ul>
145+ <li><a href="../../../m2/com/m2/Class2.html#sub">qualified remote link</a></li>
146+ <li><a href="../../../m2/com/m2/Class2.html#sub">unqualified remote link</a></li>
147+ <li><a href="../../module-summary.html#module-m1-heading">module anchor link</a></li>
148+ <li><a href="package-summary.html#package-anchor">package anchor link</a></li>
149+ <li><a href="#class1-anchor">qualified local anchor link</a></li>
150+ <li><a href="#class1-anchor">unqualified local anchor link</a></li>
151+ </ul>
152+ """ ,
153+ """
154+ <dt>See Also:</dt>
155+ <dd>
156+ <ul class="tag-list">
157+ <li><a href="../../../m2/com/m2/Class2.html#main-heading">qualified remote link</a></li>
158+ <li><a href="../../../m2/com/m2/Class2.html#main-heading">unqualified remote link</a></li>
159+ <li><a href="../../module-summary.html#module-m1-heading">module anchor link</a></li>
160+ <li><a href="package-summary.html#package-anchor">package anchor link</a></li>
161+ <li><a href="#class1-anchor">qualified local anchor link</a></li>
162+ <li><a href="#class1-anchor">unqualified local anchor link</a></li>
163+ </ul>
164+ """ );
165+ checkOrder ("m2/module-summary.html" ,
166+ """
167+ <a href="com/m2/package-summary.html#pkg-heading">Plain link to local anchor</a>.""" );
168+ checkOrder ("m2/com/m2/package-summary.html" ,
169+ """
170+ <a href="#pkg-heading">Plain link to local anchor</a>.
171+ """ ,
172+ """
173+ <ul class="tag-list">
174+ <li><a href="#pkg-heading">See local anchor</a></li>
175+ </ul>
121176 """ );
122177 checkOrder ("m2/com/m2/Class2.html" ,
123178 """
@@ -126,9 +181,14 @@ public void testModule(Path base) throws Exception {
126181 Plain link to <a href="#sub">sub heading above</a>.""" );
127182 checkOrder ("m2/doc-files/file.html" ,
128183 """
129- Link to <a href="../com/m2/Class2.html#main-heading"><code>heading in Class2</code></a>.""" ,
184+ Link to <a href="../com/m2/Class2.html#main-heading"><code>heading in Class2</code></a>.
185+ <a href="#docfile-heading">Plain link to local anchor</a>.
186+ """ ,
130187 """
131- <li><a href="../../m1/module-summary.html#module-m1-heading">Heading in module m1</a></li>""" );
188+ <ul class="tag-list">
189+ <li><a href="../../m1/module-summary.html#module-m1-heading">Heading in module m1</a></li>
190+ <li><a href="#docfile-heading">See local anchor</a></li>
191+ """ );
132192 }
133193
134194 @ Test
@@ -197,7 +257,9 @@ void generatePackageSources() throws Exception {
197257 <h2 id="main">Class1 Main</h2>
198258 Link to {@link p2##package-p2-heading heading in package p2}
199259 <h3>Class1 Sub</h3>
200- Plain link to {@linkplain p2.Class2##class2-sub-heading sub heading above}
260+ Plain link to {@linkplain p2.Class2##class2-sub-heading heading in Class2}
261+ @see ##main unqualified link to heading above
262+ @see p1.Class1##main qualified link to heading above
201263 """ )
202264 .addMembers (mb )
203265 .write (src );
@@ -216,6 +278,8 @@ void generatePackageSources() throws Exception {
216278 * <h2>Package p2</h2>
217279 *
218280 * @see p2.Class2##class2-sub-heading See sub heading in p2.Class2
281+ * @see p2##package-p2-heading local qualified link
282+ * @see ##package-p2-heading local unqualified link
219283 */
220284 package p2;
221285 """ );
@@ -227,6 +291,8 @@ void generatePackageSources() throws Exception {
227291 <body><h1>Package p2 HTML File</h1>
228292 Plain link to {@linkplain p1.Class1##main heading in p1.ClassA}.
229293 @see p2.Class2##class2main See main heading in p2.ClassB
294+ @see p2##package-p2-heading package link
295+ @see ##package-p2-html-file-heading local anchor
230296 </body>
231297 </html>
232298 """ );
@@ -235,13 +301,33 @@ void generatePackageSources() throws Exception {
235301 void generateModuleSources () throws Exception {
236302 new ModuleBuilder (tb , "m1" )
237303 .exports ("com.m1" )
304+ .requires ("m2" )
238305 .classes ("""
239306 package com.m1;
307+
308+ import com.m2.Class2;
309+
240310 /**
241311 * Link to the {@link m2/com.m2.Class2##sub sub heading in Class2}.
242312 *
243- * @see m2/com.m2.Class2##main-heading See main heading in Class2
244- * @see m1/##module-m1-heading See heading in module m1
313+ * <p>More links:
314+ * <ul>
315+ * <li>{@linkplain com.m2.Class2##sub qualified remote link}</li>
316+ * <li>{@linkplain Class2##sub unqualified remote link}</li>
317+ * <li>{@linkplain m1/##module-m1-heading module anchor link}</li>
318+ * <li>{@linkplain com.m1##package-anchor package anchor link}</li>
319+ * <li>{@linkplain Class1##class1-anchor qualified local anchor link}</li>
320+ * <li>{@linkplain ##class1-anchor unqualified local anchor link}</li>
321+ * </ul>
322+ *
323+ * <p>{@index class1-anchor}
324+ *
325+ * @see com.m2.Class2##main-heading qualified remote link
326+ * @see Class2##main-heading unqualified remote link
327+ * @see m1/##module-m1-heading module anchor link
328+ * @see com.m1##package-anchor package anchor link
329+ * @see Class1##class1-anchor qualified local anchor link
330+ * @see ##class1-anchor unqualified local anchor link
245331 */
246332 public class Class1 {}
247333 """ )
@@ -250,6 +336,17 @@ public class Class1 {}
250336 @see m2/com.m2.Class2##main-heading See main heading in Class2
251337 """ )
252338 .write (src );
339+ tb .writeFile (src .resolve ("m1/com/m1/package-info.java" ), """
340+ /**
341+ * {@linkplain ##package-anchor Link to local anchor}.
342+ * {@index package-anchor}
343+ *
344+ * @see ##package-anchor unqualified local anchor
345+ * @see com.m1##package-anchor qualified local anchor
346+ * @see m1/com.m1##package-anchor fully qualified local anchor
347+ */
348+ package com.m1;
349+ """ );
253350 new ModuleBuilder (tb , "m2" )
254351 .exports ("com.m2" )
255352 .classes ("""
@@ -264,14 +361,30 @@ public class Class1 {}
264361 public class Class2 {}
265362 """ )
266363 .write (src );
364+ tb .writeFile (src .resolve ("m2/com/m2/package.html" ), """
365+ <html>
366+ <head><title>Package com.m2</title></head>
367+ <body>
368+ {@linkplain ##pkg-heading Plain link to local anchor}.
369+
370+ <h2 id="pkg-heading">Package com.m2</h2>
371+
372+ @see ##pkg-heading See local anchor
373+ </body>
374+ </html>
375+ """ );
267376 Path docFiles = src .resolve ("m2" ).resolve ("doc-files" );
268377 tb .writeFile (docFiles .resolve ("file.html" ),
269378 """
270379 <html>
271380 <head><title>Module m2 HTML File</title></head>
272- <body><h1>Module m2 HTML File</h1>
381+ <body>
382+ <h1 id=docfile-heading>Module m2 HTML File</h1>
273383 Link to {@link com.m2.Class2##main-heading heading in Class2}.
384+ {@linkplain ##docfile-heading Plain link to local anchor}.
385+
274386 @see m1/##module-m1-heading Heading in module m1
387+ @see ##docfile-heading See local anchor
275388 </body>
276389 </html>
277390 """ );
@@ -297,4 +410,4 @@ void generateMissingLabelSource() throws Exception {
297410 """ )
298411 .write (src );
299412 }
300- }
413+ }
0 commit comments