From d9c65ce4ee3687babb4d59cc5670fe2e98b1dc2e Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 31 May 2016 20:19:58 +0300 Subject: [PATCH] ensure functional interface is found if assigned to field in another file (IDEA-156592) --- ...aredInFileWithoutFunctionalInterfaces.java | 3 ++ .../lambda/FindFunctionalInterfaceTest.java | 37 +++++++++++++------ 2 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/FieldDeclaredInFileWithoutFunctionalInterfaces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/FieldDeclaredInFileWithoutFunctionalInterfaces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/FieldDeclaredInFileWithoutFunctionalInterfaces.java new file mode 100644 index 000000000000..e56083252085 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/FieldDeclaredInFileWithoutFunctionalInterfaces.java @@ -0,0 +1,3 @@ +public interface I { + void m(); +} \ 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 fdccb3c34cdd..cc967135b311 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 @@ -16,6 +16,7 @@ package com.intellij.codeInsight.daemon.lambda; import com.intellij.JavaTestUtil; +import com.intellij.idea.Bombed; import com.intellij.psi.*; import com.intellij.psi.impl.search.JavaFunctionalExpressionSearcher; import com.intellij.psi.search.GlobalSearchScope; @@ -26,31 +27,45 @@ import com.intellij.testFramework.LightProjectDescriptor; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import org.jetbrains.annotations.NotNull; +import java.util.Calendar; import java.util.Collection; import java.util.function.Predicate; public class FindFunctionalInterfaceTest extends LightCodeInsightFixtureTestCase { public void testMethodArgument() throws Exception { - 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 Collection expressions = FunctionalExpressionSearch.search(psiClass).findAll(); - assertTrue(expressions.size() == 1); - final PsiFunctionalExpression next = expressions.iterator().next(); - assertNotNull(next); - assertEquals("() -> {}", next.getText()); + doTestOneExpression(); } public void testMethodArgumentByTypeParameter() throws Exception { + doTestOneExpression(); + } + + @Bombed(month = Calendar.AUGUST, day = 1, user = "ann peter") + public void testFieldDeclaredInFileWithoutFunctionalInterfaces() throws Exception { + myFixture.addClass("class B {" + + " void f(A a) {" + + " a.r = () -> {};" + + " }" + + "}"); + 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 + } + + 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 Collection expressions = FunctionalExpressionSearch.search(psiClass).findAll(); - assertTrue(expressions.size() == 1); + int size = expressions.size(); + assertEquals(1, size); final PsiFunctionalExpression next = expressions.iterator().next(); assertNotNull(next); assertEquals("() -> {}", next.getText());