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 cbead21aa913..074a0415074b 100644 --- a/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/src/A.java +++ b/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/src/A.java @@ -6,4 +6,10 @@ public class Test { public void bar(String[] array) { ((Object[]) array)[0] = new Object(); } + + public Object obj; + public static void setObjValueInArray(Test t, Object val) { + t.obj = new Object[1]; + ((Object[])t.obj)[0] = val; + } } \ No newline at end of file diff --git a/java/openapi/src/com/intellij/psi/util/RedundantCastUtil.java b/java/openapi/src/com/intellij/psi/util/RedundantCastUtil.java index dfb44721dd25..494bf78c3a27 100644 --- a/java/openapi/src/com/intellij/psi/util/RedundantCastUtil.java +++ b/java/openapi/src/com/intellij/psi/util/RedundantCastUtil.java @@ -443,8 +443,8 @@ public class RedundantCastUtil { PsiTypeElement typeElement = typeCast.getCastType(); if (typeElement == null) return; - PsiType castTo = typeElement.getType(); - PsiType opType = typeCast.getOperand().getType(); + final PsiType castTo = typeElement.getType(); + final PsiType opType = typeCast.getOperand().getType(); if (opType == null) return; if (parent instanceof PsiReferenceExpression) { if (castTo instanceof PsiClassType && opType instanceof PsiPrimitiveType) return; //explicit boxing @@ -460,8 +460,8 @@ public class RedundantCastUtil { } } - if (someWhereAtTheLeftSideOfAssignment(parent)) { - if (TypeConversionUtil.isAssignable(opType, castTo, false)) { + if (arrayAccessAtTheLeftSideOfAssignment(parent)) { + if (TypeConversionUtil.isAssignable(opType, castTo, false) && opType.getArrayDimensions() == castTo.getArrayDimensions()) { addToResults(typeCast); } } @@ -472,7 +472,7 @@ public class RedundantCastUtil { } } - private static boolean someWhereAtTheLeftSideOfAssignment(PsiElement element) { + private static boolean arrayAccessAtTheLeftSideOfAssignment(PsiElement element) { PsiAssignmentExpression assignment = PsiTreeUtil.getParentOfType(element, PsiAssignmentExpression.class, false, PsiMember.class); if (assignment == null) return false; PsiExpression lExpression = assignment.getLExpression();