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 04c72af9a1a9..eca6dc4888f8 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
@@ -592,6 +592,18 @@ public class RedundantCastUtil {
if (!isCastRedundantInRefExpression(refExpression, operand)) return;
}
}
+ if (parent instanceof PsiConditionalExpression) {
+ if (castTo instanceof PsiClassType && opType instanceof PsiPrimitiveType && opType != PsiType.NULL) {
+ final PsiExpression thenExpression = ((PsiConditionalExpression)parent).getThenExpression();
+ final PsiExpression elseExpression = ((PsiConditionalExpression)parent).getElseExpression();
+ final PsiExpression opposite = PsiTreeUtil.isAncestor(thenExpression, typeCast, false) ? elseExpression : thenExpression;
+ if (opposite != null &&
+ !(opposite.getType() instanceof PsiPrimitiveType) &&
+ !(PsiTypesUtil.getExpectedTypeByParent((PsiExpression)parent) instanceof PsiPrimitiveType)) {
+ return;
+ }
+ }
+ }
if (arrayAccessAtTheLeftSideOfAssignment(parent)) {
if (TypeConversionUtil.isAssignable(opType, castTo, false) && opType.getArrayDimensions() == castTo.getArrayDimensions()) {
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/BoxingInConditional/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/BoxingInConditional/expected.xml
index 3bf1252e596b..edc206d502cd 100644
--- a/java/java-tests/testData/inspection/redundantCast/generics/BoxingInConditional/expected.xml
+++ b/java/java-tests/testData/inspection/redundantCast/generics/BoxingInConditional/expected.xml
@@ -6,4 +6,11 @@
Redundant type cast
Casting <code>2</code> to <code>Integer</code> is redundant
+
+ Test.java
+ 18
+ Redundant type cast
+ Casting <code>1</code> to <code>Integer</code> is redundant
+
+
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/BoxingInConditional/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/BoxingInConditional/src/Test.java
index 995072a79416..7962c90b303b 100644
--- a/java/java-tests/testData/inspection/redundantCast/generics/BoxingInConditional/src/Test.java
+++ b/java/java-tests/testData/inspection/redundantCast/generics/BoxingInConditional/src/Test.java
@@ -7,4 +7,16 @@ public class Test {
private int foo1(String s, Integer i) {
return s == null ? i : (Integer)2;
}
+}
+
+class RedundantCastTest {
+
+ public static void main(String[] args) {
+ Integer foo = 5;
+ Integer bar = null;
+ print(args == null || args.length == 0 ? bar : (Integer) 1);
+ int i = args == null || args.length == 0 ? bar : (Integer) 1;
+ }
+
+ private static void print(Integer i) {}
}
\ No newline at end of file