From e41b02e27780ef25736d97b11ae730561df63b99 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Sat, 31 Jan 2015 12:50:16 +0300 Subject: [PATCH] ignore type parameters (arguments) in non-generic method references --- .../tree/java/MethodReferenceResolver.java | 3 ++- ...odReferenceTypeArgumentsApplicability.java | 24 +++++++++++++++++++ .../lambda/NewMethodRefHighlightingTest.java | 4 ++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/MethodReferenceTypeArgumentsApplicability.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/MethodReferenceResolver.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/MethodReferenceResolver.java index 950a799f071b..1b66ab4dada0 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/MethodReferenceResolver.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/MethodReferenceResolver.java @@ -100,7 +100,8 @@ public class MethodReferenceResolver implements ResolveCache.PolyVariantContextR final PsiExpressionList argumentList = getArgumentList(); final PsiType[] typeParameters = reference.getTypeParameters(); return new MethodCandidateInfo(method, substitutor, !accessible, staticProblem, argumentList, myCurrentFileContext, - argumentList != null ? argumentList.getExpressionTypes() : null, typeParameters.length > 0 ? typeParameters : null, + argumentList != null ? argumentList.getExpressionTypes() : null, + method.hasTypeParameters() && typeParameters.length > 0 ? typeParameters : null, getLanguageLevel()) { @Override public boolean isVarargs() { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/MethodReferenceTypeArgumentsApplicability.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/MethodReferenceTypeArgumentsApplicability.java new file mode 100644 index 000000000000..4d2d0b1ef6a7 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/MethodReferenceTypeArgumentsApplicability.java @@ -0,0 +1,24 @@ +import java.util.Collection; +import java.util.List; +import java.util.stream.Stream; + +abstract class Test { + void p(final Stream> stream){ + stream.flatMap(Collection::stream); + stream.flatMap(Collection::<? extends String>stream); + stream.flatMap(Collection::<?>stream); + stream.flatMap(Collection::<? super String>stream); + } + + static void foo(T t) {} + interface I { + void m(String s); + } + + { + I i = Test::foo; + I i1 = Test::foo; + I i2 = Test::foo; + + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java index 27ca8ab43039..9b16e8de2b71 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java @@ -346,6 +346,10 @@ public class NewMethodRefHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(); } + public void testMethodReferenceTypeArgumentsApplicability() throws Exception { + doTest(); + } + private void doTest() { doTest(false); }