From 2832d5f81c879044f68d1b6aa8bf2fd498ef0ba1 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 5 May 2020 11:08:05 +0200 Subject: [PATCH] java redundant cast: keep same conditional expression type based on cast type & opposite operand (IDEA-235896) GitOrigin-RevId: 7e454f0db256ad843c7abb890953c8d264af0257 --- .../com/intellij/psi/util/RedundantCastUtil.java | 3 +-- .../RedundantCastInConditionalExpression.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/psi/util/RedundantCastUtil.java b/java/java-analysis-impl/src/com/intellij/psi/util/RedundantCastUtil.java index 89c81fba339e..9143b85ced18 100644 --- a/java/java-analysis-impl/src/com/intellij/psi/util/RedundantCastUtil.java +++ b/java/java-analysis-impl/src/com/intellij/psi/util/RedundantCastUtil.java @@ -512,8 +512,7 @@ public class RedundantCastUtil { final PsiExpression thenExpression = ((PsiConditionalExpression)parent).getThenExpression(); final PsiExpression elseExpression = ((PsiConditionalExpression)parent).getElseExpression(); final PsiExpression opposite = thenExpression == typeCast ? elseExpression : thenExpression; - if (opposite == null || conditionalType instanceof PsiPrimitiveType && - !Comparing.equal(conditionalType, opposite.getType())) return; + if (opposite == null || !Comparing.equal(conditionalType, opposite.getType())) return; } } else if (parent instanceof PsiSynchronizedStatement && diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/RedundantCastInConditionalExpression.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/RedundantCastInConditionalExpression.java index ef3fe36af8d0..f4fefcdbaaea 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/RedundantCastInConditionalExpression.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/RedundantCastInConditionalExpression.java @@ -6,3 +6,17 @@ class Foo { System.out.println(s); } } + + +class NonPrimitiveType { + @SuppressWarnings("unchecked") + public void apply(Fun, ?> defaultGetter, + Class configType, + Fun, T> getter) { + (getter == null ? (Fun)defaultGetter : getter).apply(configType); + } + + interface Fun { + R apply(T t); + } +}