diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java index f48303bd85ac..3403ed5584d9 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java @@ -536,6 +536,10 @@ public class DataFlowInspectionBase extends BaseJavaBatchLocalInspectionTool { } private static boolean isCompileConstantInIfCondition(PsiElement element) { + if (element instanceof PsiPrefixExpression && ((PsiPrefixExpression)element).getOperationTokenType() == JavaTokenType.EXCL) { + return isCompileConstantInIfCondition(((PsiPrefixExpression)element).getOperand()); + } + if (!(element instanceof PsiReferenceExpression)) return false; PsiElement resolved = ((PsiReferenceExpression)element).resolve(); if (!(resolved instanceof PsiField)) return false; diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/CompileTimeConstant.java b/java/java-tests/testData/inspection/dataFlow/fixture/CompileTimeConstant.java new file mode 100644 index 000000000000..401df4ccf61c --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/CompileTimeConstant.java @@ -0,0 +1,14 @@ +class Fun { + public static final boolean isDebug = true; + + void foo() { + if (isDebug) { + System.out.println(); + } + } + void fooNegated() { + if (!isDebug) { + System.out.println(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java index 4276d58e24c7..90e7d127b8b5 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java @@ -184,6 +184,8 @@ public class DataFlowInspectionTest extends LightCodeInsightFixtureTestCase { public void testUnknownFloatMayBeNaN() { doTest(); } public void testFloatEquality() { doTest(); } public void testLastConstantConditionInAnd() { doTest(); } + + public void testCompileTimeConstant() { doTest(); } public void testTransientFinalField() { doTest(); } public void testRememberLocalTransientFieldState() { doTest(); }