mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
support .class guard (IDEA-169707)
This commit is contained in:
+13
-5
@@ -91,11 +91,19 @@ public class FieldAccessNotGuardedInspection extends BaseJavaBatchLocalInspectio
|
||||
if (JCiPUtil.isGuardedBy(containingMethod, guard) || containingMethod.isConstructor()) {
|
||||
return;
|
||||
}
|
||||
if (containingMethod.hasModifierProperty(PsiModifier.SYNCHRONIZED) && guardExpression instanceof PsiThisExpression) {
|
||||
final PsiThisExpression thisExpression = (PsiThisExpression)guardExpression;
|
||||
final PsiClass aClass = getClassFromThisExpression(thisExpression, field);
|
||||
if (aClass == null || aClass.equals(containingMethod.getContainingClass())) {
|
||||
return;
|
||||
if (containingMethod.hasModifierProperty(PsiModifier.SYNCHRONIZED)) {
|
||||
if (guardExpression instanceof PsiThisExpression) {
|
||||
final PsiThisExpression thisExpression = (PsiThisExpression)guardExpression;
|
||||
final PsiClass aClass = getClassFromThisExpression(thisExpression, field);
|
||||
if (aClass == null || aClass.equals(containingMethod.getContainingClass())) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (containingMethod.hasModifierProperty(PsiModifier.STATIC) && guardExpression instanceof PsiClassObjectAccessExpression) {
|
||||
PsiClass psiClass = PsiUtil.resolveClassInType(((PsiClassObjectAccessExpression)guardExpression).getOperand().getType());
|
||||
if (psiClass == null || psiClass.equals(containingMethod.getContainingClass())) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
import javax.annotation.concurrent.GuardedBy;
|
||||
|
||||
class GuardedByDemo {
|
||||
@GuardedBy("GuardedByDemo.class")
|
||||
static final long foo = 23;
|
||||
|
||||
synchronized static void bar() {
|
||||
long a = foo;
|
||||
}
|
||||
}
|
||||
+5
-4
@@ -28,22 +28,22 @@ public class FieldAccessedNotGuardedInspectionTest extends LightCodeInsightFixtu
|
||||
}
|
||||
|
||||
public void testJavax_itself() throws Exception {
|
||||
myFixture.addClass("package javax.annotation.concurrent;\n" + getGuardedByAnnotationText());
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testSyncOnFieldQualifier() throws Exception {
|
||||
myFixture.addClass("package javax.annotation.concurrent;\n" + getGuardedByAnnotationText());
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testFieldAccessNotGuarded() {
|
||||
myFixture.addClass("package javax.annotation.concurrent;\n" + getGuardedByAnnotationText());
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testCheapReadWriteLock() {
|
||||
myFixture.addClass("package javax.annotation.concurrent;\n" + getGuardedByAnnotationText());
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testStaticSyncOnClass() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ public class FieldAccessedNotGuardedInspectionTest extends LightCodeInsightFixtu
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
myFixture.addClass("package javax.annotation.concurrent;\n" + getGuardedByAnnotationText());
|
||||
myFixture.enableInspections(new FieldAccessNotGuardedInspection());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user