ExpressionUtils#isConstantArray: allow usage in for-each

This commit is contained in:
Tagir Valeev
2018-04-17 12:41:17 +07:00
parent 836f11c1f2
commit 07ade0780a
@@ -1203,17 +1203,19 @@ public class ExpressionUtils {
if (!(e instanceof PsiReferenceExpression)) return true;
PsiReferenceExpression ref = (PsiReferenceExpression)e;
if (!ref.isReferenceTo(array)) return true;
PsiExpression parent = tryCast(PsiUtil.skipParenthesizedExprUp(ref.getParent()), PsiExpression.class);
if (parent == null) return false;
PsiElement parent = PsiUtil.skipParenthesizedExprUp(ref.getParent());
if (parent instanceof PsiForeachStatement && PsiTreeUtil.isAncestor(((PsiForeachStatement)parent).getIteratedValue(), ref, false)) {
return true;
}
if (parent instanceof PsiReferenceExpression) {
if (isReferenceTo(getArrayFromLengthExpression(parent), array)) return true;
if (isReferenceTo(getArrayFromLengthExpression((PsiExpression)parent), array)) return true;
if (parent.getParent() instanceof PsiMethodCallExpression &&
MethodCallUtils.isCallToMethod((PsiMethodCallExpression)parent.getParent(), CommonClassNames.JAVA_LANG_OBJECT,
null, "clone", PsiType.EMPTY_ARRAY)) {
return true;
}
}
return parent instanceof PsiArrayAccessExpression && !PsiUtil.isAccessedForWriting(parent);
return parent instanceof PsiArrayAccessExpression && !PsiUtil.isAccessedForWriting((PsiExpression)parent);
});
}