From 311fa37496df881103ed591eaec3fa24a2cac8af Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Mon, 13 Aug 2018 15:14:44 +0300 Subject: [PATCH] Fixed IDEA-192024 Java formatter breaks do ... while onto a new line if it exceeds the hard limit --- .../java/wrap/impl/JavaChildWrapArranger.java | 10 +++++- .../psi/formatter/java/JavaFormatterTest.kt | 31 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildWrapArranger.java b/java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildWrapArranger.java index 018fcc5b6889..1f1b6877177f 100644 --- a/java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildWrapArranger.java +++ b/java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildWrapArranger.java @@ -224,7 +224,8 @@ public class JavaChildWrapArranger { } else if (nodeType == JavaElementType.DO_WHILE_STATEMENT) { - if (role == ChildRole.LOOP_BODY || role == ChildRole.WHILE_KEYWORD) { + if (role == ChildRole.LOOP_BODY || + role == ChildRole.WHILE_KEYWORD && isAfterNonBlockStatement(child)) { return Wrap.createWrap(WrapType.NORMAL, true); } } @@ -241,6 +242,13 @@ public class JavaChildWrapArranger { return suggestedWrap; } + + private static boolean isAfterNonBlockStatement(@NotNull ASTNode node) { + ASTNode prev = node.getTreePrev(); + if (prev instanceof PsiWhiteSpace) prev = prev.getTreePrev(); + return prev != null && prev.getElementType() != JavaElementType.BLOCK_STATEMENT; + } + private static boolean isTypeAnnotationOrFalseIfDumb(@NotNull ASTNode child) { PsiElement node = child.getPsi(); PsiElement next = PsiTreeUtil.skipSiblingsForward(node, PsiWhiteSpace.class, PsiAnnotation.class); diff --git a/java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaFormatterTest.kt b/java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaFormatterTest.kt index 178f38a9ec41..d1ad735da6e3 100644 --- a/java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaFormatterTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaFormatterTest.kt @@ -3670,4 +3670,35 @@ public class Test { "}" ) } + + + fun testIdea192024() { + codeStyleBean.apply{ + rightMargin = 30 + } + doTextTest( + """ + public class Main { + public static void main(String[] args) { + int longCountVar = 0; + do { + System.out.println("Test"); + longCountVar ++; + } while(longCountVar <= 1000); + } + }""".trimIndent(), + + """ + public class Main { + public static void main(String[] args) { + int longCountVar = 0; + do { + System.out.println("Test"); + longCountVar++; + } while (longCountVar <= 1000); + } + }""".trimIndent() + ) + } + } \ No newline at end of file