summaryrefslogtreecommitdiff
path: root/java/java-psi-api/src/com/intellij/psi/PsiMethodReferenceUtil.java
diff options
context:
space:
mode:
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.java21
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);
}