You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kw...@apache.org on 2026/08/17 09:48:07 UTC
(maven-plugin-tools) branch master updated: Normalize references in Javadoc
This is an automated email from the ASF dual-hosted git repository.
kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-plugin-tools.git
The following commit(s) were added to refs/heads/master by this push:
new 438a3acc Normalize references in Javadoc
438a3acc is described below
commit 438a3acc96b918382f3f98e0dca56f8d683c63b5
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Sun Aug 16 13:02:22 2026 +0200
Normalize references in Javadoc
Method references may contain argument names (next to types) and spaces.
Both must be removed prior generating the link to Javadoc.
---
.../tools/plugin/javadoc/JavadocReference.java | 34 +++++++++++++++++++++-
.../tools/plugin/javadoc/JavadocReferenceTest.java | 19 ++++++++++++
2 files changed, 52 insertions(+), 1 deletion(-)
diff --git a/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/javadoc/JavadocReference.java b/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/javadoc/JavadocReference.java
index 4093fa18..5577e724 100644
--- a/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/javadoc/JavadocReference.java
+++ b/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/javadoc/JavadocReference.java
@@ -18,8 +18,11 @@
*/
package org.apache.maven.tools.plugin.javadoc;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Objects;
import java.util.Optional;
+import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -63,13 +66,15 @@ public class JavadocReference {
* @throws IllegalArgumentException in case the reference has an invalid format
*/
public static JavadocReference parse(String reference) {
+ // must match the behaviour of com.sun.tools.javac.parser.ReferenceParser#parseReference
Matcher matcher = REFERENCE_VALUE_PATTERN.matcher(reference);
if (!matcher.matches()) {
throw new IllegalArgumentException("Invalid format of javadoc reference: " + reference);
}
final Optional<String> moduleName = getOptionalGroup(matcher, GROUP_INDEX_MODULE);
final Optional<String> packageNameClassName = getOptionalGroup(matcher, GROUP_INDEX_PACKAGECLASS);
- final Optional<String> member = getOptionalGroup(matcher, GROUP_INDEX_MEMBER);
+ final Optional<String> member =
+ getOptionalGroup(matcher, GROUP_INDEX_MEMBER).map(JavadocReference::normalizeMember);
final Optional<String> label = getOptionalGroup(matcher, GROUP_INDEX_LABEL);
return new JavadocReference(moduleName, packageNameClassName, member, label);
}
@@ -142,4 +147,31 @@ public class JavadocReference {
&& Objects.equals(packageNameClassName, other.packageNameClassName)
&& Objects.equals(moduleName, other.moduleName);
}
+
+ static String normalizeMember(String member) {
+ // for methods:
+ int indexOfParenthesis = member.indexOf('(');
+ if (indexOfParenthesis != -1) {
+ if (!member.endsWith(")")) {
+ throw new IllegalArgumentException("Invalid format of javadoc reference member: " + member);
+ }
+ // for each parameter separated by a comma, remove the parameter name and keep only the type
+ StringTokenizer tokenizer =
+ new StringTokenizer(member.substring(indexOfParenthesis + 1, member.length() - 1), ",");
+ Collection<String> parameterTypes = new ArrayList<>();
+ while (tokenizer.hasMoreTokens()) {
+ String parameter = tokenizer.nextToken().trim();
+ // remove parameter name if present
+ if (parameter.contains(" ")) {
+ parameterTypes.add(parameter.substring(0, parameter.indexOf(' ')));
+ } else {
+ parameterTypes.add(parameter);
+ }
+ }
+ member = member.substring(0, indexOfParenthesis) + "(" + String.join(",", parameterTypes) + ")";
+ }
+ // remove whitespace
+ member = member.replaceAll("\\s+", "");
+ return member;
+ }
}
diff --git a/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/javadoc/JavadocReferenceTest.java b/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/javadoc/JavadocReferenceTest.java
index be3cea5c..8b4c1191 100644
--- a/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/javadoc/JavadocReferenceTest.java
+++ b/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/javadoc/JavadocReferenceTest.java
@@ -60,4 +60,23 @@ class JavadocReferenceTest {
Optional.empty(), Optional.empty(), Optional.of("member"), Optional.of("label with spaces")),
JavadocReference.parse("#member label with spaces"));
}
+
+ @Test
+ void parseNonNormalizedMethodReferences() throws Exception {
+ assertEquals(
+ new JavadocReference(
+ Optional.empty(),
+ Optional.of("package.Class"),
+ Optional.of("member(ArgType1,ArgType2)"),
+ Optional.of("label")),
+ // whitespace between argument and argument names (both should be removed)
+ JavadocReference.parse("package.Class#member(ArgType1 arg1, ArgType2 arg2) label"));
+ assertEquals(
+ new JavadocReference(
+ Optional.empty(),
+ Optional.of("package.Class"),
+ Optional.of("member(ArgType1,ArgType2,ArgType3)"),
+ Optional.of("label")),
+ JavadocReference.parse("package.Class#member(ArgType1 arg1, ArgType2,ArgType3 arg3) label"));
+ }
}