mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
CapturingCleanerInspection: get back description, renaming
This commit is contained in:
@@ -38,6 +38,7 @@ public class CapturingCleanerInspection extends AbstractBaseJavaLocalInspectionT
|
||||
if (trackedObject == null || runnableExpression == null) return;
|
||||
|
||||
final PsiElement highlightingElement;
|
||||
final String referenceName;
|
||||
if (trackedObject instanceof PsiThisExpression) {
|
||||
PsiClassType classType = tryCast(trackedObject.getType(), PsiClassType.class);
|
||||
if (classType == null) return;
|
||||
@@ -46,6 +47,7 @@ public class CapturingCleanerInspection extends AbstractBaseJavaLocalInspectionT
|
||||
PsiElement elementCapturingThis = getElementCapturingThis(runnableExpression, trackedClass);
|
||||
if (elementCapturingThis == null) return;
|
||||
highlightingElement = elementCapturingThis;
|
||||
referenceName = "this";
|
||||
}
|
||||
else if (trackedObject instanceof PsiReferenceExpression) {
|
||||
PsiVariable variable = tryCast(((PsiReferenceExpression)trackedObject).resolve(), PsiVariable.class);
|
||||
@@ -59,13 +61,15 @@ public class CapturingCleanerInspection extends AbstractBaseJavaLocalInspectionT
|
||||
String variableName = variable.getName();
|
||||
if (variableName == null) return;
|
||||
highlightingElement = referenceExpression.get();
|
||||
referenceName = variableName;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
holder.registerProblem(highlightingElement, InspectionsBundle.message("inspection.capturing.cleaner"));
|
||||
holder.registerProblem(highlightingElement, InspectionsBundle.message("inspection.capturing.cleaner", referenceName));
|
||||
}
|
||||
|
||||
|
||||
private PsiElement getElementCapturingThis(PsiExpression runnableExpr, PsiClass trackedClass) {
|
||||
if (runnableExpr instanceof PsiMethodReferenceExpression) {
|
||||
PsiMethodReferenceExpression methodReference = (PsiMethodReferenceExpression)runnableExpr;
|
||||
@@ -84,7 +88,7 @@ public class CapturingCleanerInspection extends AbstractBaseJavaLocalInspectionT
|
||||
if (lambda.getParameterList().getParametersCount() != 0) return null;
|
||||
PsiElement lambdaBody = lambda.getBody();
|
||||
if (lambdaBody == null) return null;
|
||||
return getElementLambdaCapturingThis(lambdaBody, trackedClass).orElse(null);
|
||||
return getLambdaElementCapturingThis(lambdaBody, trackedClass).orElse(null);
|
||||
}
|
||||
if (runnableExpr instanceof PsiNewExpression) {
|
||||
PsiNewExpression newExpression = (PsiNewExpression)runnableExpr;
|
||||
@@ -102,7 +106,7 @@ public class CapturingCleanerInspection extends AbstractBaseJavaLocalInspectionT
|
||||
};
|
||||
}
|
||||
|
||||
private static Optional<PsiElement> getElementLambdaCapturingThis(@NotNull PsiElement lambdaBody, @NotNull PsiClass containingClass) {
|
||||
private static Optional<PsiElement> getLambdaElementCapturingThis(@NotNull PsiElement lambdaBody, @NotNull PsiClass containingClass) {
|
||||
return StreamEx.ofTree(lambdaBody, el -> StreamEx.of(el.getChildren()))
|
||||
.findAny(element -> isThisCapturingElement(containingClass, element));
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ class Anonymous {
|
||||
|
||||
static void free(int descriptor) {}
|
||||
|
||||
Cleaner.Cleanable cleanable = Cleaner.create().register(this, <warning descr="Cleaner capture object reference">new Runnable() {
|
||||
Cleaner.Cleanable cleanable = Cleaner.create().register(this, <warning descr="Runnable passed to Cleaner.register() captures 'this' reference">new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
System.out.println("adsad");
|
||||
@@ -18,7 +18,7 @@ class Inner {
|
||||
|
||||
static void free(int descriptor) {}
|
||||
|
||||
Cleaner.Cleanable cleanable = Cleaner.create().register(this, new <warning descr="Cleaner capture object reference">MyRunnable</warning>());
|
||||
Cleaner.Cleanable cleanable = Cleaner.create().register(this, new <warning descr="Runnable passed to Cleaner.register() captures 'this' reference">MyRunnable</warning>());
|
||||
|
||||
private class MyRunnable implements Runnable {
|
||||
@Override
|
||||
@@ -33,7 +33,7 @@ class InstanceMethodReference {
|
||||
|
||||
static void free(int descriptor) {}
|
||||
|
||||
Cleaner.Cleanable cleanable = Cleaner.create().register(this, <warning descr="Cleaner capture object reference">this</warning>::run);
|
||||
Cleaner.Cleanable cleanable = Cleaner.create().register(this, <warning descr="Runnable passed to Cleaner.register() captures 'this' reference">this</warning>::run);
|
||||
|
||||
private void run() {
|
||||
System.out.println("adsad");
|
||||
@@ -46,7 +46,7 @@ class LambdaExprBodyInstanceMethod {
|
||||
|
||||
static void free(int descriptor) {}
|
||||
|
||||
Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> <warning descr="Cleaner capture object reference">run</warning>());
|
||||
Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> <warning descr="Runnable passed to Cleaner.register() captures 'this' reference">run</warning>());
|
||||
|
||||
private void run() {
|
||||
System.out.println("adsad");
|
||||
@@ -59,7 +59,7 @@ class LambdaInstanceField {
|
||||
|
||||
Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> {
|
||||
System.out.println("adsad");
|
||||
<warning descr="Cleaner capture object reference">fileDescriptor</warning> = 0;
|
||||
<warning descr="Runnable passed to Cleaner.register() captures 'this' reference">fileDescriptor</warning> = 0;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ class LambdaInstanceMethod {
|
||||
|
||||
Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> {
|
||||
System.out.println("adsad");
|
||||
free(<warning descr="Cleaner capture object reference">fileDescriptor</warning>);
|
||||
free(<warning descr="Runnable passed to Cleaner.register() captures 'this' reference">fileDescriptor</warning>);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ class Base {
|
||||
class LambdaInstanceSuperField extends Base {
|
||||
Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> {
|
||||
System.out.println("adsad");
|
||||
<warning descr="Cleaner capture object reference">fileDescriptor</warning> = 0;
|
||||
<warning descr="Runnable passed to Cleaner.register() captures 'this' reference">fileDescriptor</warning> = 0;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ class LambdaThis {
|
||||
static void free(int descriptor) {}
|
||||
|
||||
Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> {
|
||||
LambdaThis o = <warning descr="Cleaner capture object reference">this</warning>;
|
||||
LambdaThis o = <warning descr="Runnable passed to Cleaner.register() captures 'this' reference">this</warning>;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ class StaticMethodFactory {
|
||||
|
||||
static ResourceHolder create() {
|
||||
ResourceHolder holder = new ResourceHolder();
|
||||
cleaner.register(holder, <warning descr="Cleaner capture object reference">holder</warning>::free);
|
||||
cleaner.register(holder, <warning descr="Runnable passed to Cleaner.register() captures 'holder' reference">holder</warning>::free);
|
||||
return holder;
|
||||
}
|
||||
}
|
||||
@@ -154,7 +154,7 @@ class ConstructorDelegatesToStaticMethod {
|
||||
}
|
||||
|
||||
static void register(ConstructorDelegatesToStaticMethod holder) {
|
||||
cleaner.register(holder, () -> free(<warning descr="Cleaner capture object reference">holder</warning>.resource));
|
||||
cleaner.register(holder, () -> free(<warning descr="Runnable passed to Cleaner.register() captures 'holder' reference">holder</warning>.resource));
|
||||
}
|
||||
|
||||
static void free(int resource){}
|
||||
@@ -168,7 +168,7 @@ class InnerAccesInstanceOuterMembers {
|
||||
Cleaner cleaner = Cleaner.create();
|
||||
|
||||
public Inner() {
|
||||
cleaner.register(this, () -> <warning descr="Cleaner capture object reference">resource</warning> = -1);
|
||||
cleaner.register(this, () -> <warning descr="Runnable passed to Cleaner.register() captures 'this' reference">resource</warning> = -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -940,5 +940,5 @@ inspection.conditional.break.in.infinite.loop.description=Conditional break insi
|
||||
|
||||
inspection.endless.stream.description=Non-short-circuit operation consumes the infinite stream
|
||||
|
||||
inspection.capturing.cleaner=Cleaner capture object reference
|
||||
inspection.capturing.cleaner.description=Cleaner capture object reference
|
||||
inspection.capturing.cleaner=Runnable passed to Cleaner.register() captures ''{0}'' reference
|
||||
inspection.capturing.cleaner.description=Cleaner captures object reference
|
||||
Reference in New Issue
Block a user