mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 21:11:28 +07:00
anonymous -> lambda: fix anonymous classes in enum constants
This commit is contained in:
@@ -161,7 +161,8 @@ public class AnonymousCanBeLambdaInspection extends BaseJavaBatchLocalInspection
|
||||
final PsiCall call = LambdaUtil.treeWalkUp(topExpr);
|
||||
if (call != null && call.resolveMethod() != null) {
|
||||
final int offsetInTopCall = aClass.getTextRange().getStartOffset() - call.getTextRange().getStartOffset();
|
||||
final PsiCall copyCall = (PsiCall)call.copy();
|
||||
PsiCall copyCall = LambdaUtil.copyTopLevelCall(call);
|
||||
if (copyCall == null) return null;
|
||||
final PsiAnonymousClass classArg = PsiTreeUtil.getParentOfType(copyCall.findElementAt(offsetInTopCall), PsiAnonymousClass.class);
|
||||
if (classArg != null) {
|
||||
PsiExpression lambda = JavaPsiFacade.getElementFactory(aClass.getProject())
|
||||
|
||||
@@ -775,6 +775,28 @@ public class LambdaUtil {
|
||||
return top;
|
||||
}
|
||||
|
||||
public static PsiCall copyTopLevelCall(@NotNull PsiCall call) {
|
||||
PsiCall copyCall = (PsiCall)call.copy();
|
||||
if (call instanceof PsiEnumConstant) {
|
||||
PsiClass containingClass = ((PsiEnumConstant)call).getContainingClass();
|
||||
if (containingClass == null) {
|
||||
return null;
|
||||
}
|
||||
String enumName = containingClass.getName();
|
||||
if (enumName == null) {
|
||||
return null;
|
||||
}
|
||||
PsiMethod resolveMethod = call.resolveMethod();
|
||||
if (resolveMethod == null) {
|
||||
return null;
|
||||
}
|
||||
PsiClass anEnum = JavaPsiFacade.getElementFactory(call.getProject()).createEnum(enumName);
|
||||
anEnum.add(resolveMethod);
|
||||
return (PsiCall)anEnum.add(copyCall);
|
||||
}
|
||||
return copyCall;
|
||||
}
|
||||
|
||||
public static class TypeParamsChecker extends PsiTypeVisitor<Boolean> {
|
||||
private PsiMethod myMethod;
|
||||
private final PsiClass myClass;
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
// "Replace with lambda" "true"
|
||||
enum E {
|
||||
A(() -> {});
|
||||
|
||||
public E(Runnable r) {}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// "Replace with lambda" "true"
|
||||
enum E {
|
||||
A(new Runna<caret>ble() {
|
||||
public void run(){}
|
||||
});
|
||||
|
||||
public E(Runnable r) {}
|
||||
}
|
||||
Reference in New Issue
Block a user