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 9143b85ced18..2f8fae8a4aa8 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 @@ -536,10 +536,9 @@ public class RedundantCastUtil { } private static boolean checkResolveAfterRemoveCast(PsiElement parent) { - PsiElement grandPa = parent.getParent(); + PsiElement grandPa = PsiUtil.skipParenthesizedExprUp(parent.getParent()); if (grandPa instanceof PsiExpressionList) { - PsiExpression[] expressions = ((PsiExpressionList)grandPa).getExpressions(); - int idx = ArrayUtil.find(expressions, parent); + int idx = LambdaUtil.getLambdaIdx((PsiExpressionList)grandPa, parent); PsiElement grandGrandPa = grandPa.getParent(); if (grandGrandPa instanceof PsiCall) { PsiMethod resolve = ((PsiCall)grandGrandPa).resolveMethod(); @@ -548,7 +547,7 @@ public class RedundantCastUtil { if (expression == null) return false; PsiExpressionList argumentList = expression.getArgumentList(); LOG.assertTrue(argumentList != null); - PsiExpression toReplace = argumentList.getExpressions()[idx]; + PsiExpression toReplace = PsiUtil.skipParenthesizedExprDown(argumentList.getExpressions()[idx]); if (toReplace instanceof PsiConditionalExpression) { PsiExpression thenExpression = ((PsiConditionalExpression)toReplace).getThenExpression(); PsiExpression elseExpression = ((PsiConditionalExpression)toReplace).getElseExpression(); diff --git a/java/java-tests/testData/inspection/redundantCast/lambda/ParenthesisAroundConditional.java b/java/java-tests/testData/inspection/redundantCast/lambda/ParenthesisAroundConditional.java new file mode 100644 index 000000000000..5f5b9ada94cb --- /dev/null +++ b/java/java-tests/testData/inspection/redundantCast/lambda/ParenthesisAroundConditional.java @@ -0,0 +1,18 @@ + +import java.util.List; + +class MyTest { + + public void testLong(List list, int i) { + assertEquals(1L, (i >= 0 ? (long) getLong(list, i) : 2L)); + assertEquals(1L, i >= 0 ? (long) getLong(list, i) : 2L); + } + + private T getLong(List list, int i) { + return list.get(i); + } + + private static void assertEquals(long l, long l1) { } + private static void assertEquals(Object l, Object l1) { } + +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/RedundantCast18Test.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/RedundantCast18Test.java index f54cea75b53a..1c2678405e25 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/RedundantCast18Test.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/RedundantCast18Test.java @@ -49,4 +49,5 @@ public class RedundantCast18Test extends LightDaemonAnalyzerTestCase { public void testBinaryConversions() { doTest();} public void testInferenceIncompatibilityWithoutCast() { doTest();} public void testCastToPrimitive() { doTest();} + public void testParenthesisAroundConditional() { doTest();} } \ No newline at end of file