diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/LambdaFunctionalInterface.java b/core/src/main/java/com/google/errorprone/bugpatterns/LambdaFunctionalInterface.java index e22246c5b51..c3528cbae7a 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/LambdaFunctionalInterface.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/LambdaFunctionalInterface.java @@ -17,6 +17,8 @@ package com.google.errorprone.bugpatterns; import static com.google.common.collect.ImmutableList.toImmutableList; +import static com.google.common.collect.Streams.findLast; +import static com.google.common.collect.Streams.stream; import static com.google.errorprone.BugPattern.SeverityLevel.SUGGESTION; import static com.google.errorprone.util.ASTHelpers.getReceiver; import static com.google.errorprone.util.ASTHelpers.getSymbol; @@ -25,7 +27,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Streams; import com.google.errorprone.BugPattern; import com.google.errorprone.VisitorState; import com.google.errorprone.bugpatterns.BugChecker.MethodTreeMatcher; @@ -231,11 +232,11 @@ private boolean methodCallsMeetConditions(Symbol sym, VisitorState state) { } private static ClassTree getTopLevelClassTree(VisitorState state) { - return (ClassTree) - Streams.findLast( - Streams.stream(state.getPath().iterator()) - .filter((Tree t) -> t.getKind() == Kind.CLASS)) - .orElseThrow(() -> new IllegalArgumentException("No enclosing class found")); + return findLast( + stream(state.getPath().iterator()) + .filter(ClassTree.class::isInstance) + .map(ClassTree.class::cast)) + .orElseThrow(() -> new IllegalArgumentException("No enclosing class found")); } private ImmutableMultimap methodCallsForSymbol( diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/LambdaFunctionalInterfaceTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/LambdaFunctionalInterfaceTest.java index b9429a4a4ab..ccc8087c3cf 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/LambdaFunctionalInterfaceTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/LambdaFunctionalInterfaceTest.java @@ -19,7 +19,6 @@ import com.google.errorprone.BugCheckerRefactoringTestHelper; import com.google.errorprone.BugCheckerRefactoringTestHelper.FixChoosers; import com.google.errorprone.CompilationTestHelper; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -27,17 +26,12 @@ /** {@link LambdaFunctionalInterface}Test */ @RunWith(JUnit4.class) public class LambdaFunctionalInterfaceTest { - CompilationTestHelper compilationHelper; + private final CompilationTestHelper compilationHelper = + CompilationTestHelper.newInstance(LambdaFunctionalInterface.class, getClass()); private final BugCheckerRefactoringTestHelper refactoringHelper = BugCheckerRefactoringTestHelper.newInstance(LambdaFunctionalInterface.class, getClass()); - @Before - public void setUp() { - compilationHelper = - CompilationTestHelper.newInstance(LambdaFunctionalInterface.class, getClass()); - } - @Test public void testPositiveCase() { compilationHelper.addSourceFile("LambdaFunctionalInterfacePositiveCases.java").doTest(); @@ -215,4 +209,18 @@ public void testRefactoringGenericToPrimitive() { .setFixChooser(FixChoosers.FIRST) .doTest(); } + + @Test + public void onEnum() { + compilationHelper + .addSourceLines( + "E.java", + "import java.util.function.Function;", + "public enum E {", + " VALUE(String::length);", + " // BUG: Diagnostic contains:", + " E(Function func) {}", + "}") + .doTest(); + } }