mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
lambda ->method ref: check if accessible (IDEA-132371)
This commit is contained in:
+24
-3
@@ -23,6 +23,7 @@ import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
@@ -187,6 +188,25 @@ public class LambdaCanBeMethodReferenceInspection extends BaseJavaBatchLocalInsp
|
||||
} else if (containingClass != PsiTreeUtil.getParentOfType(body, PsiClass.class) && containingClass.getName() == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!isReceiverType && psiMethod != null) {
|
||||
final PsiClass memberClass = psiMethod.getContainingClass();
|
||||
PsiClass accessClass;
|
||||
if (qualifierExpression != null) {
|
||||
accessClass = PsiUtil.resolveClassInType(qualifierExpression.getType());
|
||||
}
|
||||
else {
|
||||
accessClass = PsiTreeUtil.getParentOfType(methodCall, PsiClass.class);
|
||||
while (accessClass != null && !InheritanceUtil.isInheritorOrSelf(accessClass, memberClass, true)) {
|
||||
accessClass = PsiTreeUtil.getParentOfType(accessClass, PsiClass.class, true);
|
||||
}
|
||||
}
|
||||
if (!JavaResolveUtil.isAccessible(psiMethod, memberClass, psiMethod.getModifierList(),
|
||||
methodCall, accessClass, null, methodCall.getContainingFile())) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return methodCall;
|
||||
} else if (methodCall instanceof PsiNewExpression) {
|
||||
final PsiExpression[] dimensions = ((PsiNewExpression)methodCall).getArrayDimensions();
|
||||
@@ -289,11 +309,12 @@ public class LambdaCanBeMethodReferenceInspection extends BaseJavaBatchLocalInsp
|
||||
if (psiMethod.hasModifierProperty(PsiModifier.STATIC)) {
|
||||
methodRefText = getClassReferenceName(containingClass);
|
||||
} else {
|
||||
PsiClass treeContainingClass = PsiTreeUtil.getParentOfType(element, PsiClass.class);
|
||||
while (!InheritanceUtil.isInheritorOrSelf(treeContainingClass, containingClass, true)) {
|
||||
final PsiClass parentContainingClass = PsiTreeUtil.getParentOfType(element, PsiClass.class);
|
||||
PsiClass treeContainingClass = parentContainingClass;
|
||||
while (treeContainingClass != null && !InheritanceUtil.isInheritorOrSelf(treeContainingClass, containingClass, true)) {
|
||||
treeContainingClass = PsiTreeUtil.getParentOfType(treeContainingClass, PsiClass.class, true);
|
||||
}
|
||||
if (containingClass != PsiTreeUtil.getParentOfType(element, PsiClass.class) ) {
|
||||
if (treeContainingClass != null && containingClass != parentContainingClass && treeContainingClass != parentContainingClass) {
|
||||
methodRefText = treeContainingClass.getName() + ".this";
|
||||
} else {
|
||||
methodRefText = "this";
|
||||
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
// "Replace lambda with method reference" "true"
|
||||
import java.util.Random;
|
||||
import java.util.function.Function;
|
||||
class Bar extends Random {
|
||||
Function<Integer , Integer> s = this::next;
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
// "Replace lambda with method reference" "false"
|
||||
import java.util.Random;
|
||||
import java.util.function.Function;
|
||||
class Bar extends Random {
|
||||
Function<Integer , Integer> s = (i) -> super.ne<caret>xt(i);
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
// "Replace lambda with method reference" "true"
|
||||
import java.util.Random;
|
||||
import java.util.function.Function;
|
||||
class Bar extends Random {
|
||||
Function<Integer , Integer> s = (i) -> ne<caret>xt(i);
|
||||
}
|
||||
Reference in New Issue
Block a user