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 9d10cb617b66..f06f62a5d030 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 @@ -503,9 +503,7 @@ public class SortContentAction extends PsiElementBaseIntentionAction { void generate(StringBuilder sb, boolean isLastInRow, boolean isLast) { sb.append(myExpression.getText()); - for (PsiElement element : myBeforeSeparator) { - sb.append(element.getText()); - } + handleElementsBeforeSeparator(sb, isLast); if (!isLast) { sb.append(","); } @@ -513,7 +511,7 @@ public class SortContentAction extends PsiElementBaseIntentionAction { for (PsiComment comment : myAfterSeparator) { sb.append(" ") .append(comment.getText()); - if (comment.getText().contains("//")) { + if (comment.getTokenType() == JavaTokenType.END_OF_LINE_COMMENT) { sb.append("\n"); newLineSet = true; } @@ -525,5 +523,22 @@ public class SortContentAction extends PsiElementBaseIntentionAction { sb.append("\n"); } } + + private void handleElementsBeforeSeparator(StringBuilder sb, boolean isLast) { + boolean newLineNeed = false; + for (PsiElement element : myBeforeSeparator) { + if (newLineNeed) { + sb.append('\n'); + newLineNeed = false; + } + sb.append(element.getText()); + if (element instanceof PsiComment && ((PsiComment)element).getTokenType() == JavaTokenType.END_OF_LINE_COMMENT) { + newLineNeed = true; + } + } + if (!isLast && newLineNeed) { + sb.append('\n'); + } + } } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/sortContent/afterStringVarargComments.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/sortContent/afterStringVarargComments.java new file mode 100644 index 000000000000..48c31c21084c --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/sortContent/afterStringVarargComments.java @@ -0,0 +1,22 @@ +// "Sort content" "true" + +import java.util.*; + +public class Main { + private static void foo(String a, String... vararg) {} + + private void test() { + foo(/*6*/"bar", // 1 + // 4 + "bar", + + "baz"// 7 +// 8 + , + "foo"/*3*/ // 2 + // 5 + + + ); + } +} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/sortContent/beforeStringVarargComments.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/sortContent/beforeStringVarargComments.java new file mode 100644 index 000000000000..054fab9ca94f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/sortContent/beforeStringVarargComments.java @@ -0,0 +1,18 @@ +// "Sort content" "true" + +import java.util.*; + +public class Main { + private static void foo(String a, String... vararg) {} + + private void test() { + foo(/*6*/"bar", // 1 + // 4 + "foo"/*3*/, // 2 + // 5 + "bar", + "baz"// 7 + // 8 + ); + } +}