diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/ConstructorReferences.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/ConstructorReferences.java new file mode 100644 index 000000000000..e51e0df8af9b --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/ConstructorReferences.java @@ -0,0 +1,9 @@ +class Foo { + Foo() { this(() -> 4); } + + Foo(I i) {} +} + +interface I { + int foo(); +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/FindFunctionalInterfaceTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/FindFunctionalInterfaceTest.java index 04d24f20de34..7ab0bf361c20 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/FindFunctionalInterfaceTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/FindFunctionalInterfaceTest.java @@ -50,9 +50,7 @@ public class FindFunctionalInterfaceTest extends LightCodeInsightFixtureTestCase myFixture.addClass("public class A {" + " public I r;" + "}"); - for (int i = 0; i < JavaFunctionalExpressionSearcher.SMART_SEARCH_THRESHOLD + 1; i++) { - myFixture.addClass("class B" + i + " { {Runnable r = () -> {};}}"); //ensure common case is used - } + addManyLambdas(); doTestOneExpression(); } @@ -63,19 +61,14 @@ public class FindFunctionalInterfaceTest extends LightCodeInsightFixtureTestCase " void foo(T... r) {}\n" + " void bar(J i){foo(i, i, () -> {});}\n" + "}"); - for (int i = 0; i < JavaFunctionalExpressionSearcher.SMART_SEARCH_THRESHOLD + 1; i++) { - myFixture.addClass("class B" + i + " { {Runnable r = () -> {};}}"); //ensure common case is used - } + addManyLambdas(); doTestOneExpression(); } private void doTestOneExpression() { myFixture.configureByFile(getTestName(false) + ".java"); - final PsiElement elementAtCaret = myFixture.getElementAtCaret(); - assertNotNull(elementAtCaret); - final PsiClass psiClass = PsiTreeUtil.getParentOfType(elementAtCaret, PsiClass.class, false); - assertTrue(psiClass != null && psiClass.isInterface()); + final PsiClass psiClass = findClassAtCaret(); final Collection expressions = FunctionalExpressionSearch.search(psiClass).findAll(); int size = expressions.size(); assertEquals(1, size); @@ -84,6 +77,15 @@ public class FindFunctionalInterfaceTest extends LightCodeInsightFixtureTestCase assertEquals("() -> {}", next.getText()); } + @NotNull + private PsiClass findClassAtCaret() { + final PsiElement elementAtCaret = myFixture.getElementAtCaret(); + assertNotNull(elementAtCaret); + final PsiClass psiClass = PsiTreeUtil.getParentOfType(elementAtCaret, PsiClass.class, false); + assertTrue(psiClass != null && psiClass.isInterface()); + return psiClass; + } + public void testFieldFromAnonymousClassScope() throws Exception { myFixture.configureByFile(getTestName(false) + ".java"); final PsiElement elementAtCaret = myFixture.getElementAtCaret(); @@ -108,9 +110,7 @@ public class FindFunctionalInterfaceTest extends LightCodeInsightFixtureTestCase public void doTestIndexSearch(String expected) { myFixture.configureByFile(getTestName(false) + ".java"); - for (int i = 0; i < JavaFunctionalExpressionSearcher.SMART_SEARCH_THRESHOLD + 5; i++) { - myFixture.addFileToProject("a" + i + ".java", "class Goo {{ Runnable r = () -> {} }}"); - } + addManyLambdas(); PsiClass predicate = JavaPsiFacade.getInstance(getProject()).findClass(Predicate.class.getName(), GlobalSearchScope.allScope(getProject())); assert predicate != null; @@ -118,6 +118,28 @@ public class FindFunctionalInterfaceTest extends LightCodeInsightFixtureTestCase assertEquals(expected, next.getText()); } + public void testConstructorReferences() { + myFixture.configureByFile(getTestName(false) + ".java"); + + myFixture.addClass("class Bar extends Foo {\n" + + " public Bar() { super(() -> 1); }\n" + + "\n" + + " {\n" + + " new Foo(() -> 2) { };\n" + + " new Foo(() -> 3);\n" + + " }\n" + + "}"); + addManyLambdas(); + + assertSize(4, FunctionalExpressionSearch.search(findClassAtCaret()).findAll()); + } + + private void addManyLambdas() { + for (int i = 0; i < JavaFunctionalExpressionSearcher.SMART_SEARCH_THRESHOLD + 5; i++) { + myFixture.addFileToProject("a" + i + ".java", "class Goo {{ Runnable r = () -> {} }}"); + } + } + @Override protected String getBasePath() { return JavaTestUtil.getRelativeJavaTestDataPath() + "/codeInsight/daemonCodeAnalyzer/lambda/findUsages/";