diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/java/ReferenceChainLink.java b/java/java-indexing-impl/src/com/intellij/psi/impl/java/ReferenceChainLink.java index c3e0295e3e03..15ccb80fa2b0 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/java/ReferenceChainLink.java +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/java/ReferenceChainLink.java @@ -101,12 +101,17 @@ public class ReferenceChainLink { PsiPackage pkg = JavaPsiFacade.getInstance(project).findPackage(referenceName); if (pkg != null && pkg.getDirectories(scope).length > 0) return null; - if (!cache.processFieldsWithName(referenceName, processor, scope, null) || - !cache.processClassesWithName(referenceName, processor, scope, null)) { + if (!cache.processFieldsWithName(referenceName, processor, scope, null)) { markExpensive(project); return null; } } + + if (!cache.processClassesWithName(referenceName, processor, scope, null)) { + markExpensive(project); + return null; + } + return candidates; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/ChainStartingWithConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/ChainStartingWithConstructor.java new file mode 100644 index 000000000000..d9394ca3cd0d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/ChainStartingWithConstructor.java @@ -0,0 +1,17 @@ +class A { + + void foo() { + new IterHelper<>().loopMap((k, val) -> { + //do something + }); + } +} + +final class IterHelper { + public void loopMap(final MapIterCallback callback) { + //do something + } + public static interface MapIterCallback { + abstract void eval(K k, V v); + } +} \ 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 584031b37d13..c02e3c770fec 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 @@ -140,6 +140,11 @@ public class FindFunctionalInterfaceTest extends LightCodeInsightFixtureTestCase assertSize(1, FunctionalExpressionSearch.search(findClass("I")).findAll()); } + public void testChainStartingWithConstructor() { + configure(); + assertSize(1, FunctionalExpressionSearch.search(findClass("IterHelper.MapIterCallback")).findAll()); + } + public void testDontVisitInapplicableFiles() { PsiClass sam = myFixture.addClass("interface I { void foo(); }"); myFixture.addClass("class Some { " +