@Override public void visitArrayAccessExpression(final PsiArrayAccessExpression expression) { expression.getArrayExpression().accept(this); myBuf.append("["); final PsiExpression indexExpression = expression.getIndexExpression(); if (indexExpression != null) { indexExpression.accept(this); } myBuf.append("]"); }
@Nullable private static Expression getArrayAccessExpression(@NotNull PsiArrayAccessExpression element, @NotNull Document document) { @Nullable PsiExpression index = element.getIndexExpression(); AdvancedExpressionFoldingSettings settings = AdvancedExpressionFoldingSettings.getInstance(); if (!(element.getParent() instanceof PsiAssignmentExpression && ((PsiAssignmentExpressionImpl) element.getParent()).getLExpression() == element) && index != null && settings.getState().isGetExpressionsCollapse()) { /*@Nullable Expression indexExpression = getNonSyntheticExpression(index, document);*/ @NotNull Expression arrayExpression = getAnyExpression(element.getArrayExpression(), document); /*if (indexExpression instanceof NumberLiteral && ((NumberLiteral) indexExpression).getNumber().equals(0)) { return new ArrayGet(element, element.getTextRange(), arrayExpression, ArrayGet.Style.FIRST); } else */ if (index instanceof PsiBinaryExpression) { PsiBinaryExpression a2b = (PsiBinaryExpression) index; NumberLiteral position = getSlicePosition(element, arrayExpression, a2b, document); if (position != null && position.getNumber().equals(-1)) { return new ArrayGet(element, element.getTextRange(), arrayExpression/*, ArrayGet.Style.LAST*/); } } } return null; }
/** * @return true if expression can be the left part of assignment operator */ public static boolean isLValue(PsiExpression element) { if (element instanceof PsiReferenceExpression) { final PsiReferenceExpression expression = (PsiReferenceExpression)element; final PsiElement resolved = expression.resolve(); return resolved instanceof PsiVariable; } if (element instanceof PsiParenthesizedExpression) { return isLValue(((PsiParenthesizedExpression)element).getExpression()); } if (element instanceof PsiArrayAccessExpression) { final PsiArrayAccessExpression arrayAccessExpression = (PsiArrayAccessExpression)element; final PsiExpression arrayExpression = arrayAccessExpression.getArrayExpression(); final PsiType type = arrayExpression.getType(); if (type == null || !(type instanceof PsiArrayType)) return false; final PsiExpression indexExpression = arrayAccessExpression.getIndexExpression(); if (indexExpression == null) return false; final PsiType indexType = indexExpression.getType(); if (indexType == null) return false; if (getTypeRank(indexType) <= INT_RANK) return true; } return false; }
if (variableName != null && initializer instanceof PsiArrayAccessExpression && ((PsiArrayAccessExpression) initializer).getIndexExpression() instanceof PsiReferenceExpression && isReferenceTo(((PsiReferenceExpression) ((PsiArrayAccessExpression) initializer).getIndexExpression()), conditionVariable) && conditionROperand instanceof PsiReferenceExpression && ((PsiReferenceExpression) conditionROperand).getQualifierExpression() instanceof PsiReferenceExpression