From ce6705393f9e1d5d8ce6da20d6b09020754886d3 Mon Sep 17 00:00:00 2001 From: "Roman.Ivanov" Date: Wed, 11 Jul 2018 11:21:52 +0700 Subject: [PATCH] SortContentAction: being consistent when expression is composite --- .../intention/impl/SortContentAction.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SortContentAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SortContentAction.java index 1281e0674a5f..6393a652e10d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SortContentAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SortContentAction.java @@ -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) {