find lambdas passed into vararg methods

This commit is contained in:
peter
2016-07-21 12:16:41 +02:00
parent 262ef8de80
commit 0a4f995460
4 changed files with 22 additions and 3 deletions
@@ -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<PsiMetho
for (StubElement paramStub : ((PsiParameterListStub)stubElement).getChildrenStubs()) {
if (paramStub instanceof PsiParameterStub) {
TypeInfo type = ((PsiParameterStub)paramStub).getType(false);
if (type.arrayCount > 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)) {
@@ -38,7 +38,7 @@ import java.io.IOException;
* @author max
*/
public class JavaFileElementType extends ILightStubFileElementType<PsiJavaFileStub> {
public static final int STUB_VERSION = 27;
public static final int STUB_VERSION = 28;
public JavaFileElementType() {
super("java.FILE", JavaLanguage.INSTANCE);
@@ -0,0 +1,6 @@
public interface <caret>I {
void m();
}
interface J extends I {}
@@ -57,6 +57,19 @@ public class FindFunctionalInterfaceTest extends LightCodeInsightFixtureTestCase
doTestOneExpression();
}
public void testVarargPosition() throws Exception {
myFixture.addClass("\n" +
"class A { \n" +
" <T> 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();