From b9b71c6717c7dca1bb67bcaf85abd01e7901aa7a Mon Sep 17 00:00:00 2001 From: "Roman.Ivanov" Date: Fri, 6 Jul 2018 11:24:17 +0700 Subject: [PATCH] SortContentAction: limit intention in enums only to declaration of enum --- .../intention/impl/SortContentAction.java | 14 ++++++++++++++ .../quickFix/sortContent/beforeEnumAfterDecl.java | 8 ++++++++ 2 files changed, 22 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/sortContent/beforeEnumAfterDecl.java 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 f451829c7493..1281e0674a5f 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 @@ -807,6 +807,9 @@ public class SortContentAction extends PsiElementBaseIntentionAction { if (!aClass.isEnum()) return null; PsiEnumConstant[] constants = PsiTreeUtil.getChildrenOfType(aClass, PsiEnumConstant.class); if (constants == null || constants.length < MIN_ELEMENTS_COUNT) return null; + PsiEnumConstant last = constants[constants.length - 1]; + PsiElement lastEnumRelatedElement = getLastEnumDeclarationRelatedElement(last); + if (lastEnumRelatedElement.getTextRange().getEndOffset() <= origin.getTextOffset()) return null; PsiElement lBrace = aClass.getLBrace(); if (lBrace == null) return null; PsiElement nextAfterLbrace = lBrace.getNextSibling(); @@ -814,6 +817,17 @@ public class SortContentAction extends PsiElementBaseIntentionAction { return new EnumContext(Arrays.asList(constants), nextAfterLbrace); } + private static @NotNull PsiElement getLastEnumDeclarationRelatedElement(@NotNull PsiEnumConstant last) { + PsiElement current = last.getNextSibling(); + while (current instanceof PsiWhiteSpace + || current instanceof PsiComment + || (current instanceof PsiJavaToken && (((PsiJavaToken)current).getTokenType() == JavaTokenType.COMMA)) + ) { + current = current.getNextSibling(); + } + return current; + } + @NotNull @Override List getElements(@NotNull EnumContext context) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/sortContent/beforeEnumAfterDecl.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/sortContent/beforeEnumAfterDecl.java new file mode 100644 index 000000000000..216457239849 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/sortContent/beforeEnumAfterDecl.java @@ -0,0 +1,8 @@ +// "Sort content" "false" + +enum e { + Foo, + Bar, + Baz; + +}