guardedBy: accept inherited instance (IDEA-180433)

This commit is contained in:
Anna.Kozlova
2017-11-21 16:51:09 +01:00
parent d6b550aa66
commit bc9d1fec0b
2 changed files with 13 additions and 1 deletions
@@ -6,6 +6,7 @@ import com.intellij.codeInsight.daemon.GroupNames;
import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.psi.*;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.IncorrectOperationException;
@@ -81,7 +82,7 @@ public class FieldAccessNotGuardedInspection extends AbstractBaseJavaLocalInspec
if (guardExpression instanceof PsiThisExpression) {
final PsiThisExpression thisExpression = (PsiThisExpression)guardExpression;
final PsiClass aClass = getClassFromThisExpression(thisExpression, field);
if (aClass == null || aClass.equals(containingMethod.getContainingClass())) {
if (aClass == null || InheritanceUtil.isInheritorOrSelf(containingMethod.getContainingClass(), aClass, true)) {
return;
}
}
@@ -104,3 +104,14 @@ class Example3
private long total = 0;
}
}
class Example4 {
@GuardedBy("this")
protected Object field;
static class Example4Derived extends Example4 {
synchronized void foo() {
Object o = field;
}
}
}