diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/NonCanonicalType.java b/core/src/main/java/com/google/errorprone/bugpatterns/NonCanonicalType.java index b9c67beef43..e7856277406 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/NonCanonicalType.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/NonCanonicalType.java @@ -20,6 +20,7 @@ import static com.google.errorprone.fixes.SuggestedFixes.qualifyType; import static com.google.errorprone.matchers.Description.NO_MATCH; import static com.google.errorprone.util.ASTHelpers.enclosingClass; +import static com.google.errorprone.util.ASTHelpers.getStartPosition; import static com.google.errorprone.util.ASTHelpers.getSymbol; import com.google.errorprone.BugPattern; @@ -33,6 +34,7 @@ import com.sun.source.tree.MemberSelectTree; import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.code.Symbol.TypeSymbol; +import com.sun.tools.javac.util.Position; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -64,6 +66,10 @@ public Description matchMemberSelect(MemberSelectTree tree, VisitorState state) return NO_MATCH; } } + if (getStartPosition(tree) == Position.NOPOS) { + // Can't suggest changing a synthetic type tree + return NO_MATCH; + } SuggestedFix.Builder fixBuilder = SuggestedFix.builder(); SuggestedFix fix = fixBuilder diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/NonCanonicalTypeTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/NonCanonicalTypeTest.java index a79822ae073..7f5cdaba6bc 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/NonCanonicalTypeTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/NonCanonicalTypeTest.java @@ -127,6 +127,21 @@ public void negative() { .doTest(); } + @Test + public void qualifiedName_inLambdaParameter_cantFix() { + compilationHelper + .addSourceLines( + "Test.java", + "import java.util.function.Function;", + "class Test {", + " interface Rec extends Function {}\n", + " void run() {", + " Rec f = x -> x.apply(x);", + " }", + "}") + .doTest(); + } + @Test public void qualifiedName_ambiguous() { compilationHelper