mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
CapturingCleaner: fix local variable calls threated as this calls
This commit is contained in:
@@ -70,7 +70,9 @@ public class CapturingCleanerInspection extends AbstractBaseJavaLocalInspectionT
|
||||
}
|
||||
|
||||
|
||||
private PsiElement getElementCapturingThis(PsiExpression runnableExpr, PsiClass trackedClass) {
|
||||
@Nullable
|
||||
private PsiElement getElementCapturingThis(@NotNull PsiExpression runnableExpr,
|
||||
@NotNull PsiClass trackedClass) {
|
||||
if (runnableExpr instanceof PsiMethodReferenceExpression) {
|
||||
PsiMethodReferenceExpression methodReference = (PsiMethodReferenceExpression)runnableExpr;
|
||||
if (PsiMethodReferenceUtil.isStaticallyReferenced(methodReference)) return null;
|
||||
@@ -116,6 +118,9 @@ public class CapturingCleanerInspection extends AbstractBaseJavaLocalInspectionT
|
||||
return PsiUtil.resolveClassInType(((PsiThisExpression)element).getType()) == containingClass;
|
||||
}
|
||||
else if (element instanceof PsiReferenceExpression) {
|
||||
PsiReferenceExpression qualifierReference =
|
||||
tryCast(((PsiReferenceExpression)element).getQualifierExpression(), PsiReferenceExpression.class);
|
||||
if (qualifierReference != null) return false;
|
||||
PsiMember member = tryCast(((PsiReferenceExpression)element).resolve(), PsiMember.class);
|
||||
return memberBringsThisRef(containingClass, member);
|
||||
}
|
||||
|
||||
@@ -171,4 +171,17 @@ class InnerAccesInstanceOuterMembers {
|
||||
cleaner.register(this, () -> <warning descr="Runnable passed to Cleaner.register() captures 'this' reference">resource</warning> = -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class LambdaUsingAnotherInstanceMember {
|
||||
int fileDescriptor;
|
||||
|
||||
static Cleaner cleaner = Cleaner.create();
|
||||
|
||||
void register() {
|
||||
LambdaUsingAnotherInstanceMember another = new LambdaUsingAnotherInstanceMember();
|
||||
cleaner.register(this, () -> {
|
||||
another.fileDescriptor = 12;
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user