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 305085c459c8..564b15281b08 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 @@ -103,6 +103,15 @@ public class DataFlowInspectionBase extends BaseJavaBatchLocalInspectionTool { analyzeCodeBlock(initializer.getBody(), holder, isOnTheFly); } + @Override + public void visitIfStatement(PsiIfStatement statement) { + PsiExpression condition = statement.getCondition(); + if (BranchingInstruction.isBoolConst(condition)) { + LocalQuickFix fix = createSimplifyBooleanExpressionFix(condition, condition.textMatches(PsiKeyword.TRUE)); + holder.registerProblem(condition, "Condition is always " + condition.getText(), fix); + } + } + @Override public void visitAnnotation(PsiAnnotation annotation) { if (!ControlFlowAnalyzer.ORG_JETBRAINS_ANNOTATIONS_CONTRACT.equals(annotation.getQualifiedName())) return; diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/instructions/BranchingInstruction.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/instructions/BranchingInstruction.java index 0f83d84afd28..3e152e577736 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/instructions/BranchingInstruction.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/instructions/BranchingInstruction.java @@ -66,7 +66,7 @@ public abstract class BranchingInstruction extends Instruction { return !isConstTrue && myIsTrueReachable != myIsFalseReachable; } - private static boolean isBoolConst(PsiElement condition) { + public static boolean isBoolConst(PsiElement condition) { if (!(condition instanceof PsiLiteralExpression)) return false; @NonNls String text = condition.getText(); return "true".equals(text) || "false".equals(text); diff --git a/java/java-tests/testData/inspection/dataFlow/caseAndNpe/expected.xml b/java/java-tests/testData/inspection/dataFlow/caseAndNpe/expected.xml index a83ef7b9e34b..184e6c5f85f1 100644 --- a/java/java-tests/testData/inspection/dataFlow/caseAndNpe/expected.xml +++ b/java/java-tests/testData/inspection/dataFlow/caseAndNpe/expected.xml @@ -20,5 +20,10 @@ 49 Switch label 'case 2:' is unreachable + + CaseAndNpe.java + 80 + Condition is always true +