From 53d0972e830ecb0b09cb86be8d85c2da3bd1697f Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Wed, 25 Apr 2018 17:13:59 +0300 Subject: [PATCH] Do not indent control structures parentheses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: IDEA-98552 for() statement: Place ')' on new line → "incorrect" alignment IDEA-175560 Right parenthesis (rparen) on new line is not indented properly --- .../java/BlockContainingJavaBlock.java | 3 + .../afterContainsRemoveAndAnd.java | 2 +- .../formatter/wrapping/ForStatement_both.java | 2 +- .../wrapping/ForStatement_rparen.java | 2 +- .../psi/formatter/java/JavaFormatterTest.kt | 63 +++++++++++++++++++ 5 files changed, 69 insertions(+), 3 deletions(-) diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/BlockContainingJavaBlock.java b/java/java-impl/src/com/intellij/psi/formatter/java/BlockContainingJavaBlock.java index 4ddc8034fa93..5df3f68c6084 100644 --- a/java/java-impl/src/com/intellij/psi/formatter/java/BlockContainingJavaBlock.java +++ b/java/java-impl/src/com/intellij/psi/formatter/java/BlockContainingJavaBlock.java @@ -182,6 +182,9 @@ public class BlockContainingJavaBlock extends AbstractJavaBlock{ || child.getElementType() == JavaElementType.TYPE_PARAMETER_LIST)) { return Indent.getNoneIndent(); } + else if (child.getElementType() == JavaTokenType.LPARENTH || child.getElementType() == JavaTokenType.RPARENTH) { + return Indent.getNoneIndent(); + } else { return Indent.getContinuationIndent(myIndentSettings.USE_RELATIVE_INDENTS); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantCollectionOperation/afterContainsRemoveAndAnd.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantCollectionOperation/afterContainsRemoveAndAnd.java index 714397b41f07..c292d157c995 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantCollectionOperation/afterContainsRemoveAndAnd.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantCollectionOperation/afterContainsRemoveAndAnd.java @@ -4,7 +4,7 @@ import java.util.List; class Test { void test(List list, String key) { if(key !=/*nullcheck*/ null && !key./*check*/isEmpty() /*and*/ /*key*/ //line comment - ) { + ) { list.remove(key); } } diff --git a/java/java-tests/testData/psi/formatter/wrapping/ForStatement_both.java b/java/java-tests/testData/psi/formatter/wrapping/ForStatement_both.java index 6c9793e9aae6..d4fe2b9913a6 100644 --- a/java/java-tests/testData/psi/formatter/wrapping/ForStatement_both.java +++ b/java/java-tests/testData/psi/formatter/wrapping/ForStatement_both.java @@ -8,7 +8,7 @@ public class Foo { int thisShouldBeWrapped = 0; thisShouldBeWrapped < 10; thisShouldBeWrapped++ - ) { + ) { } } } \ No newline at end of file diff --git a/java/java-tests/testData/psi/formatter/wrapping/ForStatement_rparen.java b/java/java-tests/testData/psi/formatter/wrapping/ForStatement_rparen.java index 4d6cbe21dd28..3ebf1f2b2151 100644 --- a/java/java-tests/testData/psi/formatter/wrapping/ForStatement_rparen.java +++ b/java/java-tests/testData/psi/formatter/wrapping/ForStatement_rparen.java @@ -7,7 +7,7 @@ public class Foo { for (int thisShouldBeWrapped = 0; thisShouldBeWrapped < 10; thisShouldBeWrapped++ - ) { + ) { } } } \ No newline at end of file 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 b1a786183fb0..7b0eda628895 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 @@ -3442,4 +3442,67 @@ class JavaFormatterTest : AbstractJavaFormatterTest() { "}" ) } + + /** + * See IDEA-98552, IDEA-175560 + */ + fun testParenthesesIndentation() { + doTextTest( +""" +package com.company; + +import java.util.Arrays; +import java.util.List; + +class Test { + +void foo(boolean bool1, boolean bool2) { +List list = Arrays.asList( +"a", "b", "c" +); + // IDEA-98552 +for ( +String s : list +) { +System.out.println(s); +} + // IDEA-175560 +if (bool1 +&& bool2 +) { // Indented at continuation indent level + // do stuff +} +} +} +""", + +""" +package com.company; + +import java.util.Arrays; +import java.util.List; + +class Test { + + void foo(boolean bool1, boolean bool2) { + List list = Arrays.asList( + "a", "b", "c" + ); + // IDEA-98552 + for ( + String s : list + ) { + System.out.println(s); + } + // IDEA-175560 + if (bool1 + && bool2 + ) { // Indented at continuation indent level + // do stuff + } + } +} +""" + ) + } } \ No newline at end of file