Fix handling of javadoc method links by unused import pass
Previously references like `{@link Collection#remove(Object)}` were being
missed.
MOE_MIGRATED_REVID=126822360
diff --git a/core/src/main/java/com/google/googlejavaformat/java/RemoveUnusedImports.java b/core/src/main/java/com/google/googlejavaformat/java/RemoveUnusedImports.java
index c60eaba..e7f903e 100644
--- a/core/src/main/java/com/google/googlejavaformat/java/RemoveUnusedImports.java
+++ b/core/src/main/java/com/google/googlejavaformat/java/RemoveUnusedImports.java
@@ -35,7 +35,7 @@
import org.eclipse.jdt.core.dom.ImportDeclaration;
import org.eclipse.jdt.core.dom.Javadoc;
import org.eclipse.jdt.core.dom.MemberRef;
-import org.eclipse.jdt.core.dom.Name;
+import org.eclipse.jdt.core.dom.MethodRef;
import org.eclipse.jdt.core.dom.QualifiedName;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.TagElement;
@@ -46,9 +46,8 @@
import java.util.Set;
/**
- * Removes unused imports from a source file. Imports that are only used in
- * javadoc are also removed, and the references in javadoc are replaced with
- * fully qualified names.
+ * Removes unused imports from a source file. Imports that are only used in javadoc are also
+ * removed, and the references in javadoc are replaced with fully qualified names.
*/
public class RemoveUnusedImports {
@@ -111,13 +110,17 @@
private void recordReference(ASTNode reference) {
if (reference instanceof SimpleName) {
- usedInJavadoc.put(((SimpleName) reference).getIdentifier(), reference);
+ recordSimpleName(reference);
} else if (reference instanceof MemberRef) {
- MemberRef memberRef = (MemberRef) reference;
- Name qualifier = memberRef.getQualifier();
- if (qualifier instanceof SimpleName) {
- usedInJavadoc.put(((SimpleName) qualifier).getIdentifier(), reference);
- }
+ recordSimpleName(((MemberRef) reference).getQualifier());
+ } else if (reference instanceof MethodRef) {
+ recordSimpleName(((MethodRef) reference).getQualifier());
+ }
+ }
+
+ private void recordSimpleName(ASTNode typeReference) {
+ if (typeReference instanceof SimpleName) {
+ usedInJavadoc.put(((SimpleName) typeReference).getIdentifier(), typeReference);
}
}
@@ -191,11 +194,6 @@
if (!importTree.isStatic()) {
for (ASTNode doc : usedInJavadoc.get(simpleName)) {
String replaceWith = importTree.getName().toString();
- String ref = doc.toString();
- int idx = ref.indexOf('#');
- if (idx > 0) {
- replaceWith += ref.substring(idx);
- }
Range<Integer> range =
Range.closedOpen(doc.getStartPosition(), doc.getStartPosition() + doc.getLength());
replacements.put(range, replaceWith);
diff --git a/core/src/test/java/com/google/googlejavaformat/java/RemoveUnusedImportsTest.java b/core/src/test/java/com/google/googlejavaformat/java/RemoveUnusedImportsTest.java
index 655f79e..6fa5fd6 100644
--- a/core/src/test/java/com/google/googlejavaformat/java/RemoveUnusedImportsTest.java
+++ b/core/src/test/java/com/google/googlejavaformat/java/RemoveUnusedImportsTest.java
@@ -66,16 +66,18 @@
{
{
"import java.util.ArrayList;", //
- "/** {@link ArrayList#add} */",
+ "import java.util.Collection;",
+ "/** {@link ArrayList#add} {@link Collection#remove(Object)} */",
"class Test {}",
},
{
"import java.util.ArrayList;", //
- "/** {@link ArrayList#add} */",
+ "import java.util.Collection;",
+ "/** {@link ArrayList#add} {@link Collection#remove(Object)} */",
"class Test {}",
},
{
- "/** {@link java.util.ArrayList#add} */", //
+ "/** {@link java.util.ArrayList#add} {@link java.util.Collection#remove(Object)} */",
"class Test {}",
}
},