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
+