diff options
author | Tor Norbye <tnorbye@google.com> | 2014-08-20 17:01:23 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2014-08-20 17:01:23 -0700 |
commit | 1aa2e09bdbd413eacb677e9fa4b50630530d0656 (patch) | |
tree | 2f4cc6d69645bd460aa253fdecb606d764fbd25d /java/java-psi-api/src/com/intellij/psi/PsiMethodReferenceUtil.java | |
parent | 02cf98d65c798d368fcec43ed64a001d513bdd4f (diff) | |
download | idea-1aa2e09bdbd413eacb677e9fa4b50630530d0656.tar.gz |
Snapshot idea/138.1696 from git://git.jetbrains.org/idea/community.git
Change-Id: I50c97b83a815ce635e49a38380ba5b8765e4b16a
Diffstat (limited to 'java/java-psi-api/src/com/intellij/psi/PsiMethodReferenceUtil.java')
-rw-r--r-- | java/java-psi-api/src/com/intellij/psi/PsiMethodReferenceUtil.java | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/java/java-psi-api/src/com/intellij/psi/PsiMethodReferenceUtil.java b/java/java-psi-api/src/com/intellij/psi/PsiMethodReferenceUtil.java index 87afd3d4f8e4..0b0e09684128 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiMethodReferenceUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiMethodReferenceUtil.java @@ -75,20 +75,22 @@ public class PsiMethodReferenceUtil { return null; } - public static boolean isCorrectAssignment(PsiType[] signatureParameterTypes2, - PsiType[] parameterTypes, + public static boolean isCorrectAssignment(PsiType[] parameterTypes, + PsiType[] argTypes, boolean varargs, int offset) { - final int min = Math.min(signatureParameterTypes2.length, parameterTypes.length - offset); + final int min = Math.min(parameterTypes.length, argTypes.length - offset); for (int i = 0; i < min; i++) { - final PsiType type1 = parameterTypes[i + offset]; - final PsiType type2 = signatureParameterTypes2[i]; - if (varargs && i == signatureParameterTypes2.length - 1) { - if (!TypeConversionUtil.isAssignable(type2, type1) && !TypeConversionUtil.isAssignable(((PsiArrayType)type2).getComponentType(), type1)) { + final PsiType argType = argTypes[i + offset]; + PsiType parameterType = parameterTypes[i]; + parameterType = GenericsUtil.getVariableTypeByExpressionType(parameterType, true); + if (varargs && i == parameterTypes.length - 1) { + if (!TypeConversionUtil.isAssignable(parameterType, argType) && + !TypeConversionUtil.isAssignable(((PsiArrayType)parameterType).getComponentType(), argType)) { return false; } } - else if (!TypeConversionUtil.isAssignable(type2, type1)) { + else if (!TypeConversionUtil.isAssignable(parameterType, argType)) { return false; } } @@ -324,7 +326,8 @@ public class PsiMethodReferenceUtil { LOG.assertTrue(signature != null); final PsiType[] parameterTypes = signature.getParameterTypes(); final QualifierResolveResult qualifierResolveResult = getQualifierResolveResult(methodRef); - return (method.getParameterList().getParametersCount() + 1 == parameterTypes.length || method.isVarArgs() && parameterTypes.length > 0)&& + return (method.getParameterList().getParametersCount() + 1 == parameterTypes.length || + method.isVarArgs() && parameterTypes.length > 0 && !method.hasModifierProperty(PsiModifier.STATIC)) && hasReceiver(parameterTypes, qualifierResolveResult, methodRef); } |