Skip to content

Commit 247bff7

Browse files
committed
[MPLUGIN-482] Consider implicit module name for javadoc URL calculation
Add example JDK21 generated javadoc Execute IT with profile "run-its"
1 parent f3eba37 commit 247bff7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+5171
-24
lines changed

maven-plugin-tools-api/pom.xml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@
9696
<artifactId>junit-jupiter-params</artifactId>
9797
<scope>test</scope>
9898
</dependency>
99+
<dependency>
100+
<groupId>org.slf4j</groupId>
101+
<artifactId>slf4j-simple</artifactId>
102+
<scope>test</scope>
103+
</dependency>
99104
</dependencies>
100105

101106
<build>
@@ -125,4 +130,30 @@
125130
</plugin>
126131
</plugins>
127132
</build>
133+
<profiles>
134+
<profile>
135+
<id>run-its</id>
136+
<build>
137+
<plugins>
138+
<plugin>
139+
<groupId>org.apache.maven.plugins</groupId>
140+
<artifactId>maven-failsafe-plugin</artifactId>
141+
<executions>
142+
<execution>
143+
<goals>
144+
<goal>integration-test</goal>
145+
<goal>verify</goal>
146+
</goals>
147+
<configuration>
148+
<!-- don't run ITs against all (non-LTS) JDK javadocs -->
149+
<excludedGroups>nonLtsJavadocs</excludedGroups>
150+
</configuration>
151+
</execution>
152+
</executions>
153+
</plugin>
154+
</plugins>
155+
</build>
156+
</profile>
157+
158+
</profiles>
128159
</project>

maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/javadoc/JavadocSite.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -299,23 +299,18 @@ public URI createLink(FullyQualifiedJavadocReference javadocReference) throws Il
299299
return createLink(javadocReference, baseUri, this::appendMemberAsFragment, moduleName);
300300
}
301301

302-
static URI createLink(
303-
FullyQualifiedJavadocReference javadocReference,
304-
URI baseUri,
305-
BiFunction<URI, FullyQualifiedJavadocReference, URI> fragmentAppender) {
306-
return createLink(javadocReference, baseUri, fragmentAppender, Optional.empty());
307-
}
308-
309302
static URI createLink(
310303
FullyQualifiedJavadocReference javadocReference,
311304
URI baseUri,
312305
BiFunction<URI, FullyQualifiedJavadocReference, URI> fragmentAppender,
313-
Optional<String> pathPrefix)
306+
Optional<String> resolvedModuleName)
314307
throws IllegalArgumentException {
315308
try {
316309
URI uri = createLink(
317310
baseUri,
318-
javadocReference.getModuleName(),
311+
javadocReference.getModuleName().isPresent()
312+
? javadocReference.getModuleName()
313+
: resolvedModuleName,
319314
javadocReference.getPackageName(),
320315
javadocReference.getClassName());
321316
return fragmentAppender.apply(uri, javadocReference);
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.maven.tools.plugin.javadoc;
20+
21+
import java.io.IOException;
22+
import java.net.URI;
23+
import java.util.stream.Stream;
24+
25+
import org.junit.jupiter.api.Tag;
26+
import org.junit.jupiter.params.ParameterizedTest;
27+
import org.junit.jupiter.params.provider.Arguments;
28+
import org.junit.jupiter.params.provider.MethodSource;
29+
30+
@Tag("nonLtsJavadocs")
31+
class JavadocNonLtsSiteIT extends JavadocSiteIT {
32+
33+
// tests against all non-LTS Javadoc sites need to be enabled explicitly via tag "nonLtsJavadocs"
34+
static Stream<Arguments> javadocBaseUrls() {
35+
return Stream.of(
36+
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/20/docs/api/")),
37+
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/19/docs/api/")),
38+
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/18/docs/api/")),
39+
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/16/docs/api/")),
40+
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/15/docs/api/")),
41+
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/14/docs/api/")),
42+
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/13/docs/api/")),
43+
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/12/docs/api/")),
44+
Arguments.of(URI.create("https://docs.oracle.com/javase/10/docs/api/")),
45+
Arguments.of(URI.create("https://docs.oracle.com/javase/9/docs/api/")),
46+
Arguments.of(URI.create("https://docs.oracle.com/javase/7/docs/api/")),
47+
Arguments.of(URI.create("https://docs.oracle.com/javase/6/docs/api/")),
48+
Arguments.of(URI.create("https://docs.oracle.com/javase/1.5.0/docs/api/")),
49+
Arguments.of(URI.create("https://javaalmanac.io/jdk/1.4/api/index.html")),
50+
Arguments.of(URI.create("https://javaalmanac.io/jdk/1.3/api/index.html")));
51+
}
52+
53+
@ParameterizedTest
54+
@MethodSource("javadocBaseUrls")
55+
void testConstructors(URI javadocBaseUrl) throws IOException {
56+
super.testConstructors(javadocBaseUrl);
57+
}
58+
59+
@ParameterizedTest
60+
@MethodSource("javadocBaseUrls")
61+
void testMethods(URI javadocBaseUrl) throws IOException {
62+
super.testMethods(javadocBaseUrl);
63+
}
64+
65+
@ParameterizedTest
66+
@MethodSource("javadocBaseUrls")
67+
void testFields(URI javadocBaseUrl) throws IOException {
68+
super.testFields(javadocBaseUrl);
69+
}
70+
71+
@ParameterizedTest
72+
@MethodSource("javadocBaseUrls")
73+
void testNestedClass(URI javadocBaseUrl) throws IOException {
74+
super.testNestedClass(javadocBaseUrl);
75+
}
76+
}

maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/javadoc/JavadocSiteIT.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,11 @@
3030
class JavadocSiteIT {
3131

3232
static Stream<Arguments> javadocBaseUrls() {
33+
// only test LTS versions by default
3334
return Stream.of(
3435
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/17/docs/api/")),
35-
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/16/docs/api/")),
36-
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/15/docs/api/")),
37-
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/14/docs/api/")),
38-
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/13/docs/api/")),
39-
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/12/docs/api/")),
4036
Arguments.of(URI.create("https://docs.oracle.com/en/java/javase/11/docs/api/")),
41-
Arguments.of(URI.create("https://docs.oracle.com/javase/10/docs/api/")),
42-
Arguments.of(URI.create("https://docs.oracle.com/javase/9/docs/api/")),
43-
Arguments.of(URI.create("https://docs.oracle.com/javase/8/docs/api/")),
44-
Arguments.of(URI.create("https://docs.oracle.com/javase/7/docs/api/")),
45-
Arguments.of(URI.create("https://docs.oracle.com/javase/6/docs/api/")),
46-
Arguments.of(URI.create("https://docs.oracle.com/javase/1.5.0/docs/api/")),
47-
Arguments.of(URI.create("https://javaalmanac.io/jdk/1.4/api/index.html")),
48-
Arguments.of(URI.create("https://javaalmanac.io/jdk/1.3/api/index.html")));
37+
Arguments.of(URI.create("https://docs.oracle.com/javase/8/docs/api/")));
4938
}
5039

5140
@ParameterizedTest

maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/javadoc/JavadocSiteTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class JavadocSiteTest {
4444

4545
static Stream<Arguments> jdkNamesAndVersions() {
4646
return Stream.of(
47+
Arguments.of("jdk21", JavadocLinkGenerator.JavadocToolVersionRange.JDK10_OR_HIGHER, "21"),
4748
Arguments.of("jdk17", JavadocLinkGenerator.JavadocToolVersionRange.JDK10_OR_HIGHER, "17"),
4849
Arguments.of("jdk11", JavadocLinkGenerator.JavadocToolVersionRange.JDK10_OR_HIGHER, "11"),
4950
Arguments.of("jdk8", JavadocLinkGenerator.JavadocToolVersionRange.JDK8_OR_9, "8"));
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<!DOCTYPE HTML>
2+
<html lang="en">
3+
<head>
4+
<!-- Generated by javadoc (21) on Fri Sep 08 10:05:46 CEST 2023 -->
5+
<title>All Classes and Interfaces</title>
6+
<meta name="viewport" content="width=device-width, initial-scale=1">
7+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
8+
<meta name="dc.created" content="2023-09-08">
9+
<meta name="description" content="class index">
10+
<meta name="generator" content="javadoc/AllClassesIndexWriter">
11+
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
12+
<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
13+
<script type="text/javascript" src="script.js"></script>
14+
<script type="text/javascript" src="script-dir/jquery-3.6.1.min.js"></script>
15+
<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
16+
</head>
17+
<body class="all-classes-index-page">
18+
<script type="text/javascript">var pathtoroot = "./";
19+
loadScripts(document, 'script');</script>
20+
<noscript>
21+
<div>JavaScript is disabled on your browser.</div>
22+
</noscript>
23+
<div class="flex-box">
24+
<header role="banner" class="flex-header">
25+
<nav role="navigation">
26+
<!-- ========= START OF TOP NAVBAR ======= -->
27+
<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
28+
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
29+
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
30+
<li><a href="index.html">Overview</a></li>
31+
<li>Package</li>
32+
<li>Class</li>
33+
<li><a href="overview-tree.html">Tree</a></li>
34+
<li><a href="index-all.html">Index</a></li>
35+
<li><a href="help-doc.html#all-classes">Help</a></li>
36+
</ul>
37+
</div>
38+
<div class="sub-nav">
39+
<div id="navbar-sub-list"></div>
40+
<div class="nav-list-search"><a href="search.html">SEARCH</a>
41+
<input type="text" id="search-input" disabled placeholder="Search">
42+
<input type="reset" id="reset-button" disabled value="reset">
43+
</div>
44+
</div>
45+
<!-- ========= END OF TOP NAVBAR ========= -->
46+
<span class="skip-nav" id="skip-navbar-top"></span></nav>
47+
</header>
48+
<div class="flex-content">
49+
<main role="main">
50+
<div class="header">
51+
<h1 title="All Classes and Interfaces" class="title">All Classes and Interfaces</h1>
52+
</div>
53+
<div id="all-classes-table">
54+
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="all-classes-table-tab0" role="tab" aria-selected="true" aria-controls="all-classes-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('all-classes-table', 'all-classes-table', 2)" class="active-table-tab">All Classes and Interfaces</button><button id="all-classes-table-tab2" role="tab" aria-selected="false" aria-controls="all-classes-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('all-classes-table', 'all-classes-table-tab2', 2)" class="table-tab">Classes</button><button id="all-classes-table-tab3" role="tab" aria-selected="false" aria-controls="all-classes-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('all-classes-table', 'all-classes-table-tab3', 2)" class="table-tab">Enum Classes</button></div>
55+
<div id="all-classes-table.tabpanel" role="tabpanel">
56+
<div class="summary-table two-column-summary" aria-labelledby="all-classes-table-tab0">
57+
<div class="table-header col-first">Class</div>
58+
<div class="table-header col-last">Description</div>
59+
<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/maven/tools/plugin/extractor/annotations/converter/test/CurrentClass.html" title="class in org.apache.maven.tools.plugin.extractor.annotations.converter.test">CurrentClass</a></div>
60+
<div class="col-last even-row-color all-classes-table all-classes-table-tab2">&nbsp;</div>
61+
<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/maven/tools/plugin/extractor/annotations/converter/test/OtherClass.html" title="class in org.apache.maven.tools.plugin.extractor.annotations.converter.test">OtherClass</a></div>
62+
<div class="col-last odd-row-color all-classes-table all-classes-table-tab2">&nbsp;</div>
63+
<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/maven/tools/plugin/extractor/annotations/converter/test/other/OtherClassOtherPackage.html" title="class in org.apache.maven.tools.plugin.extractor.annotations.converter.test.other">OtherClassOtherPackage</a></div>
64+
<div class="col-last even-row-color all-classes-table all-classes-table-tab2">&nbsp;</div>
65+
<div class="col-first odd-row-color all-classes-table all-classes-table-tab3"><a href="org/apache/maven/tools/plugin/extractor/annotations/converter/test/other/OtherClassOtherPackage.EmbeddedEnum.html" title="enum class in org.apache.maven.tools.plugin.extractor.annotations.converter.test.other">OtherClassOtherPackage.EmbeddedEnum</a></div>
66+
<div class="col-last odd-row-color all-classes-table all-classes-table-tab3">&nbsp;</div>
67+
<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/maven/tools/plugin/extractor/annotations/converter/test/SuperClass.html" title="class in org.apache.maven.tools.plugin.extractor.annotations.converter.test">SuperClass</a></div>
68+
<div class="col-last even-row-color all-classes-table all-classes-table-tab2">&nbsp;</div>
69+
</div>
70+
</div>
71+
</div>
72+
</main>
73+
</div>
74+
</div>
75+
</body>
76+
</html>
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<!DOCTYPE HTML>
2+
<html lang="en">
3+
<head>
4+
<!-- Generated by javadoc (21) on Fri Sep 08 10:05:46 CEST 2023 -->
5+
<title>All Packages</title>
6+
<meta name="viewport" content="width=device-width, initial-scale=1">
7+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
8+
<meta name="dc.created" content="2023-09-08">
9+
<meta name="description" content="package index">
10+
<meta name="generator" content="javadoc/AllPackagesIndexWriter">
11+
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
12+
<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
13+
<script type="text/javascript" src="script.js"></script>
14+
<script type="text/javascript" src="script-dir/jquery-3.6.1.min.js"></script>
15+
<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
16+
</head>
17+
<body class="all-packages-index-page">
18+
<script type="text/javascript">var pathtoroot = "./";
19+
loadScripts(document, 'script');</script>
20+
<noscript>
21+
<div>JavaScript is disabled on your browser.</div>
22+
</noscript>
23+
<div class="flex-box">
24+
<header role="banner" class="flex-header">
25+
<nav role="navigation">
26+
<!-- ========= START OF TOP NAVBAR ======= -->
27+
<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
28+
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
29+
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
30+
<li><a href="index.html">Overview</a></li>
31+
<li>Package</li>
32+
<li>Class</li>
33+
<li><a href="overview-tree.html">Tree</a></li>
34+
<li><a href="index-all.html">Index</a></li>
35+
<li><a href="help-doc.html#all-packages">Help</a></li>
36+
</ul>
37+
</div>
38+
<div class="sub-nav">
39+
<div id="navbar-sub-list"></div>
40+
<div class="nav-list-search"><a href="search.html">SEARCH</a>
41+
<input type="text" id="search-input" disabled placeholder="Search">
42+
<input type="reset" id="reset-button" disabled value="reset">
43+
</div>
44+
</div>
45+
<!-- ========= END OF TOP NAVBAR ========= -->
46+
<span class="skip-nav" id="skip-navbar-top"></span></nav>
47+
</header>
48+
<div class="flex-content">
49+
<main role="main">
50+
<div class="header">
51+
<h1 title="All&amp;nbsp;Packages" class="title">All&nbsp;Packages</h1>
52+
</div>
53+
<div class="caption"><span>Package Summary</span></div>
54+
<div class="summary-table two-column-summary">
55+
<div class="table-header col-first">Package</div>
56+
<div class="table-header col-last">Description</div>
57+
<div class="col-first even-row-color"><a href="org/apache/maven/tools/plugin/extractor/annotations/converter/test/package-summary.html">org.apache.maven.tools.plugin.extractor.annotations.converter.test</a></div>
58+
<div class="col-last even-row-color">&nbsp;</div>
59+
<div class="col-first odd-row-color"><a href="org/apache/maven/tools/plugin/extractor/annotations/converter/test/other/package-summary.html">org.apache.maven.tools.plugin.extractor.annotations.converter.test.other</a></div>
60+
<div class="col-last odd-row-color">&nbsp;</div>
61+
</div>
62+
</main>
63+
</div>
64+
</div>
65+
</body>
66+
</html>

0 commit comments

Comments
 (0)