method refs: ignore same method signatures, include superclass substitutions

This commit is contained in:
anna
2013-10-30 14:22:30 +01:00
parent 3c0c498353
commit 19687d9fa4
3 changed files with 6 additions and 3 deletions
@@ -194,7 +194,7 @@ public class PsiMethodReferenceUtil {
if (resolve instanceof PsiMethod) {
final MethodSignature signature1 = method.getSignature(LambdaUtil.getSubstitutor(method, resolveResult));
PsiSubstitutor subst = PsiSubstitutor.EMPTY;
subst = subst.putAll(qualifierResolveResult.getSubstitutor());
subst = subst.putAll(TypeConversionUtil.getSuperClassSubstitutor(((PsiMethod)resolve).getContainingClass(), qualifierResolveResult.getContainingClass(), qualifierResolveResult.getSubstitutor()));
subst = subst.putAll(result.getSubstitutor());
final MethodSignature signature2 = ((PsiMethod)resolve).getSignature(subst);
@@ -471,7 +471,7 @@ public class PsiMethodReferenceExpressionImpl extends PsiReferenceExpressionBase
final PsiMethod psiMethod = ((MethodCandidateInfo)conflict).getElement();
if (psiMethod == null) continue;
PsiSubstitutor subst = PsiSubstitutor.EMPTY;
subst = subst.putAll(mySubstitutor);
subst = subst.putAll(TypeConversionUtil.getSuperClassSubstitutor(psiMethod.getContainingClass(), myQualifierResolveResult.getContainingClass(), mySubstitutor));
subst = subst.putAll(conflict.getSubstitutor());
final PsiType[] signatureParameterTypes2 = psiMethod.getSignature(subst).getParameterTypes();
@@ -534,6 +534,9 @@ public class PsiMethodReferenceExpressionImpl extends PsiReferenceExpressionBase
@Override
public CandidateInfo resolveConflict(@NotNull List<CandidateInfo> conflicts) {
checkSameSignatures(conflicts);
if (conflicts.size() == 1) return conflicts.get(0);
checkAccessStaticLevels(conflicts, true);
if (conflicts.size() == 1) return conflicts.get(0);
@@ -201,7 +201,7 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
}
}
private void checkSameSignatures(@NotNull List<CandidateInfo> conflicts) {
protected void checkSameSignatures(@NotNull List<CandidateInfo> conflicts) {
// candidates should go in order of class hierarchy traversal
// in order for this to work
Map<MethodSignature, CandidateInfo> signatures = new THashMap<MethodSignature, CandidateInfo>(conflicts.size());