From 7f8b5f89527be26798548392a11e99efe3ded48d Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 25 May 2016 13:09:45 +0200 Subject: [PATCH] redundant cast: process branches of conditional expressions with respect to expected type for functional expressions (IDEA-156480) --- .../src/com/intellij/psi/util/RedundantCastUtil.java | 4 ++++ .../lambda/redundantCast/CastInConditionalBranch.java | 11 +++++++++++ .../daemon/lambda/LambdaRedundantCastTest.java | 1 + 3 files changed, 16 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/redundantCast/CastInConditionalBranch.java 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 57c6d99f73c7..603031d375fc 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 @@ -663,6 +663,10 @@ public class RedundantCastUtil { return; } } + + if (operand instanceof PsiFunctionalExpression && !castTo.equals(PsiTypesUtil.getExpectedTypeByParent(parent))) { + return; + } } if (arrayAccessAtTheLeftSideOfAssignment(parent, typeCast)) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/redundantCast/CastInConditionalBranch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/redundantCast/CastInConditionalBranch.java new file mode 100644 index 000000000000..6c94cd192494 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/redundantCast/CastInConditionalBranch.java @@ -0,0 +1,11 @@ +import java.util.function.Supplier; + +class Test { + { + Object o = true ? ((Supplier) () -> "") : null; + Supplier s1 = true ? ((' is redundant">Supplier) () -> "") : null; + Supplier s2 = true ? ((A) () -> "") : null; + } + + interface A extends Supplier {} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaRedundantCastTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaRedundantCastTest.java index bb6a9c97548d..5a821021f2ec 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaRedundantCastTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaRedundantCastTest.java @@ -80,6 +80,7 @@ public class LambdaRedundantCastTest extends LightDaemonAnalyzerTestCase { } public void testInvalidResolveWithoutCast() { doTest();} + public void testCastInConditionalBranch() { doTest();} public void testRejectReturnTypeChange() throws Exception { doTest();