From 0a4f995460be0a9f52d447fc71e265740167fa89 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 20 Jul 2016 17:10:03 +0200 Subject: [PATCH] find lambdas passed into vararg methods --- .../psi/impl/java/stubs/JavaMethodElementType.java | 4 ++-- .../psi/impl/source/JavaFileElementType.java | 2 +- .../lambda/findUsages/VarargPosition.java | 6 ++++++ .../daemon/lambda/FindFunctionalInterfaceTest.java | 13 +++++++++++++ 4 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/VarargPosition.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaMethodElementType.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaMethodElementType.java index 4de4dbeec1f5..68f20356704a 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaMethodElementType.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaMethodElementType.java @@ -20,6 +20,7 @@ import com.intellij.lang.LighterAST; import com.intellij.lang.LighterASTNode; import com.intellij.psi.JavaTokenType; import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiNameHelper; import com.intellij.psi.impl.cache.RecordUtil; import com.intellij.psi.impl.cache.TypeInfo; import com.intellij.psi.impl.java.stubs.impl.PsiMethodStubImpl; @@ -169,8 +170,7 @@ public abstract class JavaMethodElementType extends JavaStubElementType 0) continue; - String typeName = type.getShortTypeText(); + String typeName = PsiNameHelper.getShortClassName(type.text); if (TypeConversionUtil.isPrimitive(typeName) || TypeConversionUtil.isPrimitiveWrapper(typeName)) continue; sink.occurrence(JavaStubIndexKeys.METHOD_TYPES, typeName); if (methodTypeParams != null && methodTypeParams.contains(typeName)) { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/JavaFileElementType.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/JavaFileElementType.java index 85fbce060fb7..d6074403ef3e 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/JavaFileElementType.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/JavaFileElementType.java @@ -38,7 +38,7 @@ import java.io.IOException; * @author max */ public class JavaFileElementType extends ILightStubFileElementType { - public static final int STUB_VERSION = 27; + public static final int STUB_VERSION = 28; public JavaFileElementType() { super("java.FILE", JavaLanguage.INSTANCE); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/VarargPosition.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/VarargPosition.java new file mode 100644 index 000000000000..cc7662348b80 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/findUsages/VarargPosition.java @@ -0,0 +1,6 @@ +public interface I { + void m(); +} + +interface J extends I {} + 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 cc967135b311..04d24f20de34 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 @@ -57,6 +57,19 @@ public class FindFunctionalInterfaceTest extends LightCodeInsightFixtureTestCase doTestOneExpression(); } + public void testVarargPosition() throws Exception { + myFixture.addClass("\n" + + "class A { \n" + + " 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 + } + + doTestOneExpression(); + } + private void doTestOneExpression() { myFixture.configureByFile(getTestName(false) + ".java"); final PsiElement elementAtCaret = myFixture.getElementAtCaret();