wrong redundant cast suggestion (IDEA-86095)

This commit is contained in:
Anna Kozlova
2012-05-23 13:52:04 +04:00
parent 1100b5670f
commit b5921927fc
2 changed files with 11 additions and 5 deletions
@@ -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;
}
}
@@ -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();