void (int i, PsiLambdaExpression arg, PsiExpression[] newArgs, PsiCall oldCall, PsiCall newCall, PsiParameter[] parameters) { final PsiType interfaceType = arg.getFunctionalInterfaceType(); if (interfaceType != null) { List<PsiExpression> expressions = LambdaUtil.getReturnExpressions(arg); PsiLambdaExpression newLambdaExpression = (PsiLambdaExpression)deparenthesizeExpression(newArgs[i]); LOG.assertTrue(newLambdaExpression != null); List<PsiExpression> newReturnExpressions = LambdaUtil.getReturnExpressions(newLambdaExpression); for (int returnExprIdx = 0; returnExprIdx < expressions.size(); returnExprIdx++) { ProgressManager.checkCanceled(); PsiExpression returnExpression = deparenthesizeExpression(expressions.get(returnExprIdx)); final PsiExpression newReturnExpression = deparenthesizeExpression(newReturnExpressions.get(returnExprIdx)); if (newReturnExpression instanceof PsiTypeCastExpression) { checkLambdaReturn(i, (PsiTypeCastExpression)returnExpression, (PsiTypeCastExpression)newReturnExpression, interfaceType, newLambdaExpression, oldCall, newCall, parameters); } else if (returnExpression instanceof PsiConditionalExpression conditionalExpression) { LOG.assertTrue(newReturnExpression instanceof PsiConditionalExpression); PsiConditionalExpression newConditionalExpression = (PsiConditionalExpression)newReturnExpression; final PsiExpression thenExpression = deparenthesizeExpression(conditionalExpression.getThenExpression()); final PsiExpression newThenExpression = deparenthesizeExpression(newConditionalExpression.getThenExpression()); final PsiExpression elseExpression = deparenthesizeExpression(conditionalExpression.getElseExpression()); final PsiExpression newElseExpression = deparenthesizeExpression(newConditionalExpression.getElseExpression()); if (thenExpression instanceof PsiTypeCastExpression && !castForBoxing(getInnerMostOperand(thenExpression), elseExpression != null ? elseExpression.getType() : null, returnExpression.getType())) { checkLambdaReturn(i, (PsiTypeCastExpression)thenExpression, (PsiTypeCastExpression)newThenExpression, interfaceType, newLambdaExpression, oldCall, newCall, parameters); } if (elseExpression instanceof PsiTypeCastExpression && !castForBoxing(getInnerMostOperand(elseExpression), thenExpression != null ? thenExpression.getType() : null, returnExpression.getType())) { checkLambdaReturn(i, (PsiTypeCastExpression)elseExpression, (PsiTypeCastExpression)newElseExpression, interfaceType, newLambdaExpression, oldCall, newCall, parameters); } } } } }