SortContentAction: being consistent when expression is composite

This commit is contained in:
Roman.Ivanov
2018-07-11 11:25:02 +07:00
parent d1210ec4c7
commit ce6705393f
@@ -714,7 +714,7 @@ public class SortContentAction extends PsiElementBaseIntentionAction {
PsiParameter last = ArrayUtil.getLastElement(parameters);
if (last == null) return null;
if (!last.isVarArgs()) return null;
PsiExpression closestExpression = getClosestExpression(originElement);
PsiExpression closestExpression = getTopmostExpression(getClosestExpression(originElement));
if (closestExpression == null) return null;
int indexOfCurrent = Arrays.asList(arguments).indexOf(closestExpression);
if (-1 == indexOfCurrent) return null;
@@ -723,6 +723,18 @@ public class SortContentAction extends PsiElementBaseIntentionAction {
return Arrays.copyOfRange(arguments, parameters.length - 1, arguments.length);
}
@Nullable
private static PsiExpression getTopmostExpression(@Nullable final PsiExpression expression) {
if (expression == null) return null;
@NotNull PsiExpression current = expression;
while (true) {
PsiExpression parentExpr = tryCast(current.getParent(), PsiExpression.class);
if (parentExpr == null) break;
current = parentExpr;
}
return current;
}
@Nullable
private static PsiExpression getClosestExpression(@NotNull PsiElement element) {
while (element != null) {