diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/MutableVolatileNullableFieldsTreatment.java b/java/java-tests/testData/inspection/dataFlow/fixture/MutableVolatileNullableFieldsTreatment.java new file mode 100644 index 000000000000..e5cdac1d2dee --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/MutableVolatileNullableFieldsTreatment.java @@ -0,0 +1,68 @@ +import org.jetbrains.annotations.Nullable; + +class Foo { + @Nullable volatile Object data; + + void checkNotNullAndUse(Foo f) { + if (f.data != null) { + System.out.println(f.data.hashCode()); + } + } + + void checkNullAndReturn(Foo f) { + if (f.data == null) { + return; + } + System.out.println(f.data.hashCode()); + } + + void warnWhenWrongCheck() { + if (data != null) { + return; + } + System.out.println(data.hashCode()); + System.out.println(data.hashCode()); + } + + void warnWhenNotChecked(Foo f) { + System.out.println(f.data.hashCode()); + } + + void warnWhenNotCheckedThis() { + System.out.println(data.hashCode()); + } + + void dontWarnWhenDoubleChecked(Foo f) { + if (f.data == null) { + return; + } + if (f.data == null) { + return; + } + System.out.println(f.data.hashCode()); + } + + void dontWarnWhenDoubleChecked_This_Synchronized() { + if (data == null) { + return; + } + synchronized (this) { + if (data == null) { + return; + } + } + System.out.println(data.hashCode()); + } + + void dontWarnWhenDoubleChecked_This_WithMethodCall() { + if (data == null) { + return; + } + System.out.println(data.hashCode()); + if (data == null) { + return; + } + System.out.println(data.hashCode()); + } + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java index b28e4316c746..d9489ab4c135 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java @@ -133,6 +133,7 @@ public class DataFlowInspectionFixtureTest extends JavaCodeInsightFixtureTestCas public void testConstantDoubleComparisons() { doTest(); } public void _testMutableNullableFieldsTreatment() { doTest(); } + public void _testMutableVolatileNullableFieldsTreatment() { doTest(); } public void testMutableNotAnnotatedFieldsTreatment() { doTest(); } }