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 d4829aa8b268..3cb4bf3e1e60 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
@@ -642,7 +642,7 @@ public class RedundantCastUtil {
}
}
- if (arrayAccessAtTheLeftSideOfAssignment(parent)) {
+ if (arrayAccessAtTheLeftSideOfAssignment(parent, typeCast)) {
if (TypeConversionUtil.isAssignable(opType, castTo, false) && opType.getArrayDimensions() == castTo.getArrayDimensions()) {
addToResults(typeCast);
}
@@ -715,11 +715,13 @@ public class RedundantCastUtil {
return true;
}
- private static boolean arrayAccessAtTheLeftSideOfAssignment(PsiElement element) {
- PsiAssignmentExpression assignment = PsiTreeUtil.getParentOfType(element, PsiAssignmentExpression.class, false, PsiMember.class);
+ private static boolean arrayAccessAtTheLeftSideOfAssignment(PsiElement parent, PsiElement element) {
+ PsiAssignmentExpression assignment = PsiTreeUtil.getParentOfType(parent, PsiAssignmentExpression.class, false, PsiMember.class);
if (assignment == null) return false;
PsiExpression lExpression = assignment.getLExpression();
- return PsiTreeUtil.isAncestor(lExpression, element, false) && lExpression instanceof PsiArrayAccessExpression;
+ return lExpression instanceof PsiArrayAccessExpression &&
+ PsiTreeUtil.isAncestor(lExpression, parent, false) &&
+ !PsiTreeUtil.isAncestor(((PsiArrayAccessExpression)lExpression).getIndexExpression(), element, false);
}
}
diff --git a/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/expected.xml b/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/expected.xml
index c440a49c4378..5ee65171181a 100644
--- a/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/expected.xml
+++ b/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/expected.xml
@@ -5,5 +5,10 @@
3
Casting 'array' to String[] is redundant
+
+ A.java
+ 20
+ Casting '1' to 'Integer' is redundant
+
diff --git a/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/src/A.java b/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/src/A.java
index 074a0415074b..3c86677c178b 100644
--- a/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/src/A.java
+++ b/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/src/A.java
@@ -12,4 +12,11 @@ public class Test {
t.obj = new Object[1];
((Object[])t.obj)[0] = val;
}
+
+ public static void arrayDims() {
+ int[] ints = new int[] {};
+ Object foo = 1;
+ ints[(Integer) foo] = 0;
+ ints[(Integer) 1] = 0;
+ }
}
\ No newline at end of file