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 f11a24cecd50..29942e804e9d 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 @@ -402,7 +402,7 @@ public class DataFlowInspectionBase extends BaseJavaBatchLocalInspectionTool { PsiExpression place = ((PushInstruction)instruction).getPlace(); DfaValue value = ((PushInstruction)instruction).getValue(); Object constant = value instanceof DfaConstValue ? ((DfaConstValue)value).getValue() : null; - if (place instanceof PsiPolyadicExpression && constant instanceof Boolean && reportedAnchors.add(place)) { + if (place instanceof PsiPolyadicExpression && constant instanceof Boolean && !isFlagCheck(place) && reportedAnchors.add(place)) { reportConstantCondition(holder, visitor, place, (Boolean)constant); } } @@ -739,15 +739,15 @@ public class DataFlowInspectionBase extends BaseJavaBatchLocalInspectionTool { } private static boolean isFlagCheck(PsiElement element) { - PsiStatement statement = PsiTreeUtil.getParentOfType(element, PsiStatement.class); - if (!(statement instanceof PsiIfStatement)) return false; + PsiElement scope = PsiTreeUtil.getParentOfType(element, PsiStatement.class, PsiVariable.class); + PsiExpression topExpression = scope instanceof PsiIfStatement ? ((PsiIfStatement)scope).getCondition() : + scope instanceof PsiVariable ? ((PsiVariable)scope).getInitializer() : + null; + if (!PsiTreeUtil.isAncestor(topExpression, element, false)) return false; - PsiExpression condition = ((PsiIfStatement)statement).getCondition(); - if (!PsiTreeUtil.isAncestor(condition, element, false)) return false; + if (isCompileTimeFlagReference(topExpression)) return true; - if (isCompileTimeFlagReference(condition)) return true; - - Collection refs = PsiTreeUtil.findChildrenOfType(condition, PsiReferenceExpression.class); + Collection refs = PsiTreeUtil.findChildrenOfType(topExpression, PsiReferenceExpression.class); return ContainerUtil.or(refs, DataFlowInspectionBase::isCompileTimeFlagReference); } diff --git a/java/java-tests/testData/inspection/dataFlow/compileTimeConst/expected.xml b/java/java-tests/testData/inspection/dataFlow/compileTimeConst/expected.xml deleted file mode 100644 index 9b4185d3ca02..000000000000 --- a/java/java-tests/testData/inspection/dataFlow/compileTimeConst/expected.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - Test.java - 6 - - void foo(boolean param) - foo(boolean) - <default> - - Y - Y - - - Constant conditions & exceptions - Condition <code>b</code> is always <code>true</code>. - - - Test.java - 5 - Constant conditions & exceptions - Condition <code>CONST</code> is always <code>true</code> - - diff --git a/java/java-tests/testData/inspection/dataFlow/compileTimeConst/src/Test.java b/java/java-tests/testData/inspection/dataFlow/compileTimeConst/src/Test.java deleted file mode 100644 index 0d302a787245..000000000000 --- a/java/java-tests/testData/inspection/dataFlow/compileTimeConst/src/Test.java +++ /dev/null @@ -1,9 +0,0 @@ -public class Y { - private static final boolean CONST = true; - - public void foo(boolean param) { - boolean b = CONST || param; - if (b) { - } - } -} diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/CompileTimeConstant.java b/java/java-tests/testData/inspection/dataFlow/fixture/CompileTimeConstant.java index 1835a8130d76..05ed50fea2ce 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/CompileTimeConstant.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/CompileTimeConstant.java @@ -1,5 +1,7 @@ class Fun { public static final boolean isDebug = true; + public static final boolean isProduction = false; + public static final boolean isDebugInProduction = isDebug && isProduction; void foo() { if (isDebug) { diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionAncientTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionAncientTest.java index e8a6bba5e623..c9327755394d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionAncientTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionAncientTest.java @@ -100,7 +100,6 @@ public class DataFlowInspectionAncientTest extends InspectionTestCase { public void testForEachNPE() { doTest15(); } public void testArrayAccessNPE() { doTest15(); } public void testArrayAccessDoesntCancelAnalysis() { doTest15(); } - public void testCompileTimeConst() { doTest15(true); } public void testAutoboxing() { doTest15(true); } public void testUnboxingNPE() { doTest15(true); } public void testStrangeArrayIndexOutOfBounds() { doTest15(); }