From 0faebe5de704622dabd38838045325d068b0e64c Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 21 Sep 2020 21:33:59 +0200 Subject: [PATCH] java redundant cast: no semantic serialization when expected type is also serializable (IDEA-249705) GitOrigin-RevId: 7ffe4dc7ef44099630afe65d7fb545337d982f7b --- .../src/com/intellij/psi/util/RedundantCastUtil.java | 5 ++--- .../lambda/redundantCast/SerializableLambda.java | 8 ++++++++ 2 files changed, 10 insertions(+), 3 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 400535f92b33..63b58eb827fd 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 @@ -975,9 +975,10 @@ public final class RedundantCastUtil { if (opType instanceof PsiClassType && ((PsiClassType)opType).isRaw()) return true; } + PsiElement parent = PsiUtil.skipParenthesizedExprUp(typeCast.getParent()); final PsiExpression stripParenthesisOperand = PsiUtil.skipParenthesizedExprDown(operand); if (stripParenthesisOperand instanceof PsiFunctionalExpression) { - if (isCastToSerializable(castType)) return true; + if (isCastToSerializable(castType) && !isCastToSerializable(PsiTypesUtil.getExpectedTypeByParent(typeCast))) return true; } else if (stripParenthesisOperand instanceof PsiConditionalExpression) { if (PsiUtil.skipParenthesizedExprDown(((PsiConditionalExpression)stripParenthesisOperand).getThenExpression()) instanceof PsiFunctionalExpression || @@ -986,8 +987,6 @@ public final class RedundantCastUtil { } } - PsiElement parent = PsiUtil.skipParenthesizedExprUp(typeCast.getParent()); - if (parent instanceof PsiBinaryExpression) { PsiBinaryExpression expression = (PsiBinaryExpression)parent; PsiExpression firstOperand = expression.getLOperand(); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/redundantCast/SerializableLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/redundantCast/SerializableLambda.java index b47c0bcdad1c..b25387bfdecc 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/redundantCast/SerializableLambda.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/redundantCast/SerializableLambda.java @@ -8,7 +8,15 @@ class Test { r = (Runnable & Serializable)() -> {}; r = (Runnable & I)() -> {}; System.out.println(r); + + + J j = (J) () -> {}; + J j1 = (J1) () -> {}; } interface I {} + interface J extends Serializable { + void m(); + } + interface J1 extends J {} } \ No newline at end of file