accept array types as receivers without subst checks

This commit is contained in:
anna
2013-03-04 16:03:08 +01:00
parent 62c5b58a76
commit 1986b5aa34
2 changed files with 4 additions and 3 deletions
@@ -191,6 +191,7 @@ public class PsiMethodReferenceUtil {
}
public static boolean isReceiverType(PsiType receiverType, @Nullable PsiClass containingClass, PsiSubstitutor psiSubstitutor) {
boolean arrayType = receiverType instanceof PsiArrayType;
if (containingClass != null) {
receiverType = getExpandedType(receiverType, containingClass);
}
@@ -198,7 +199,8 @@ public class PsiMethodReferenceUtil {
final PsiClass receiverClass = resolveResult.getElement();
if (receiverClass != null && isReceiverType(receiverClass, containingClass)) {
LOG.assertTrue(containingClass != null);
return resolveResult.getSubstitutor().equals(psiSubstitutor) ||
return arrayType ||
resolveResult.getSubstitutor().equals(psiSubstitutor) ||
emptyOrRaw(containingClass, psiSubstitutor) ||
emptyOrRaw(receiverClass, resolveResult.getSubstitutor());
}
@@ -92,8 +92,7 @@ public class ReplaceMethodRefWithLambdaIntention extends Intention {
final boolean onArrayRef =
JavaPsiFacade.getElementFactory(element.getProject()).getArrayClass(PsiUtil.getLanguageLevel(element)) == containingClass;
boolean isReceiver = onArrayRef && resolveElement instanceof PsiMethod ||
PsiMethodReferenceUtil.isReceiverType(functionalInterfaceType, containingClass, resolveElement instanceof PsiMethod ? (PsiMethod)resolveElement : null);
boolean isReceiver = PsiMethodReferenceUtil.isReceiverType(functionalInterfaceType, containingClass, resolveElement instanceof PsiMethod ? (PsiMethod)resolveElement : null);
final PsiElement referenceNameElement = referenceExpression.getReferenceNameElement();
if (isReceiver){