From ce702dd48cd788db1511288db24b224a79218e37 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Mon, 10 Apr 2017 12:56:48 +0200 Subject: [PATCH] redundant cast: process multidimensional arrays (IDEA-171047) --- .../com/intellij/psi/util/RedundantCastUtil.java | 13 ++++++++++++- .../lambda/CastInMultidimensionalArrayIndex.java | 5 +++++ .../codeInspection/RedundantCast18Test.java | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/inspection/redundantCast/lambda/CastInMultidimensionalArrayIndex.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 c02649b0fa68..b1e85b73ca6b 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 @@ -738,7 +738,18 @@ public class RedundantCastUtil { PsiExpression lExpression = assignment.getLExpression(); return lExpression instanceof PsiArrayAccessExpression && PsiTreeUtil.isAncestor(lExpression, parent, false) && - !PsiTreeUtil.isAncestor(((PsiArrayAccessExpression)lExpression).getIndexExpression(), element, false); + !isIndexExpression(element, (PsiArrayAccessExpression)lExpression); + } + + private static boolean isIndexExpression(PsiElement element, PsiArrayAccessExpression arrayAccessExpression) { + if (PsiTreeUtil.isAncestor(arrayAccessExpression.getIndexExpression(), element, false)) { + return true; + } + PsiExpression arrayExpression = arrayAccessExpression.getArrayExpression(); + if (arrayExpression instanceof PsiArrayAccessExpression) { + return isIndexExpression(element, (PsiArrayAccessExpression)arrayExpression); + } + return false; } } diff --git a/java/java-tests/testData/inspection/redundantCast/lambda/CastInMultidimensionalArrayIndex.java b/java/java-tests/testData/inspection/redundantCast/lambda/CastInMultidimensionalArrayIndex.java new file mode 100644 index 000000000000..5e6a9c5471c0 --- /dev/null +++ b/java/java-tests/testData/inspection/redundantCast/lambda/CastInMultidimensionalArrayIndex.java @@ -0,0 +1,5 @@ +class MyTest { + void bar(Object[] update, Object[][] grid){ + grid[(int)update[0]][1] = null; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast18Test.java b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast18Test.java index f544cfa44798..d1c48111b910 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast18Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast18Test.java @@ -41,4 +41,5 @@ public class RedundantCast18Test extends LightDaemonAnalyzerTestCase { public void testConditional() { doTest(); } public void testInferApplicabilityError() { doTest(); } public void testCastToRawType() { doTest(); } + public void testCastInMultidimensionalArrayIndex() { doTest(); } } \ No newline at end of file