java redundant cast: preserve multiple type casts around functional interface when if expected type is the same as cast

isAssignable check may fail otherwise

GitOrigin-RevId: d02c9d50645a2bbb0e957f077a4a66813c94afd6
This commit is contained in:
Anna Kozlova
2020-05-11 20:09:58 +00:00
committed by intellij-monorepo-bot
parent b088cbd746
commit c879ed4e4a
3 changed files with 16 additions and 1 deletions
@@ -146,7 +146,7 @@ public class RedundantCastUtil {
private void processTypeCastWithExpectedType(PsiExpression rExpr, @Nullable PsiType lType) {
rExpr = deparenthesizeExpression(rExpr);
if (rExpr instanceof PsiTypeCastExpression) {
PsiExpression castOperand = getInnerMostOperand(((PsiTypeCastExpression)rExpr).getOperand());
PsiExpression castOperand = deparenthesizeExpression(((PsiTypeCastExpression)rExpr).getOperand());
if (castOperand != null) {
if (castOperand instanceof PsiFunctionalExpression) {
if (lType != null) {
@@ -0,0 +1,14 @@
import java.util.function.Function;
abstract class MyTest {
public <T> T m() {
//noinspection unchecked
return (T)(Function)t -> t;
}
public Function m1() {
//noinspection unchecked
return (<warning descr="Casting '(Function)t -> {...}' to 'Function' is redundant">Function</warning>)(<warning descr="Casting 't -> {...}' to 'Function' is redundant">Function</warning>)t -> t;
}
}
@@ -88,6 +88,7 @@ public class LambdaRedundantCastTest extends LightDaemonAnalyzerTestCase {
public void testThrowsStatementInLambdaBody() { doTest(); }
public void testSynchronizeCasts() { doTest(); }
public void testBoxingInConditionalOfLambdaReturn() { doTest(); }
public void testRawMiddleMan() { doTest(); }
public void testRejectReturnTypeChange() {
doTest();
}