diff --git a/java/java-psi-api/src/com/intellij/psi/util/RedundantCastUtil.java b/java/java-psi-api/src/com/intellij/psi/util/RedundantCastUtil.java index faa1e50746a8..655d5ac4c833 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/RedundantCastUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/RedundantCastUtil.java @@ -390,6 +390,10 @@ public class RedundantCastUtil { return; } if (!checkResolveAfterRemoveCast(parent)) return; + final PsiExpression thenExpression = ((PsiConditionalExpression)parent).getThenExpression(); + final PsiExpression elseExpression = ((PsiConditionalExpression)parent).getElseExpression(); + final PsiExpression opposite = thenExpression == typeCast ? elseExpression : thenExpression; + if (opposite == null || !Comparing.equal(conditionalType, opposite.getType())) return; } } else if (parent instanceof PsiSynchronizedStatement && (expr instanceof PsiExpression && ((PsiExpression)expr).getType() instanceof PsiPrimitiveType)) { return; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/RedundantCastInConditionalExpression.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/RedundantCastInConditionalExpression.java new file mode 100644 index 000000000000..351526a938c0 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/RedundantCastInConditionalExpression.java @@ -0,0 +1,8 @@ +public class Foo { + public static void main(String[] args) { + final boolean b = false; + final Integer i = (Integer)3; + final short s = (short)(b ? i : (int)Integer.valueOf(3)); + System.out.println(s); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java index 4b9afce4dcd6..dd3d8c9477ec 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java @@ -57,4 +57,5 @@ public class LightAdvHighlightingJdk6Test extends LightDaemonAnalyzerTestCase { public void testIDEADEV11877() throws Exception { setLanguageLevel(LanguageLevel.JDK_1_6); doTest(false, false); } public void testIDEA108285() throws Exception { setLanguageLevel(LanguageLevel.JDK_1_6); doTest(false, false); } public void testClassObjectAccessibility() throws Exception { setLanguageLevel(LanguageLevel.JDK_1_6); doTest(false, false); } + public void testRedundantCastInConditionalExpression() throws Exception { setLanguageLevel(LanguageLevel.JDK_1_6); doTest(true, false); } }