diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java b/java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java index b6ca0fee6d8b..7ebe012eb2de 100644 --- a/java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java +++ b/java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java @@ -953,7 +953,14 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo AlignmentStrategy alignmentStrategy = AlignmentStrategy.wrap(createAlignment(doAlign, null), ElementType.COMMA); setChildIndent(internalIndent); setChildAlignment(alignmentStrategy.getAlignment(null)); - Alignment bracketAlignment = mySettings.ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION ? Alignment.createAlignment() : null; + boolean methodParametersBlock = true; + ASTNode lBracketParent = child.getTreeParent(); + if (lBracketParent != null) { + ASTNode methodCandidate = lBracketParent.getTreeParent(); + methodParametersBlock = methodCandidate != null && (methodCandidate.getElementType() == JavaElementType.METHOD + || methodCandidate.getElementType() == JavaElementType.METHOD_CALL_EXPRESSION); + } + Alignment bracketAlignment = methodParametersBlock && mySettings.ALIGN_MULTILINE_METHOD_BRACKETS ? Alignment.createAlignment() : null; boolean isAfterIncomplete = false; diff --git a/java/java-tests/testData/psi/formatter/java/AlignMultiLine_after.java b/java/java-tests/testData/psi/formatter/java/AlignMultiLine_after.java index 0df2999f30e3..16f3917242ca 100644 --- a/java/java-tests/testData/psi/formatter/java/AlignMultiLine_after.java +++ b/java/java-tests/testData/psi/formatter/java/AlignMultiLine_after.java @@ -3,6 +3,6 @@ class Foo { public void foo() { int someVariable = (y + z - ); + ); } } \ No newline at end of file diff --git a/java/java-tests/testData/psi/formatter/java/IfElse_after.java b/java/java-tests/testData/psi/formatter/java/IfElse_after.java index 12a4d8e82910..30731341d60c 100644 --- a/java/java-tests/testData/psi/formatter/java/IfElse_after.java +++ b/java/java-tests/testData/psi/formatter/java/IfElse_after.java @@ -14,7 +14,7 @@ public class Foo { if (x < 0) { int someVariable = (y + z - ); + ); someVariable = x = x + y; diff --git a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterAlignmentTest.java b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterAlignmentTest.java index dc770eddce3b..85d00cb23db1 100644 --- a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterAlignmentTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterAlignmentTest.java @@ -109,7 +109,8 @@ public class JavaFormatterAlignmentTest extends AbstractJavaFormatterTest { public void testMethodBrackets() throws Exception { // Inspired by IDEA-53013 - getSettings().ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION = true; + getSettings().ALIGN_MULTILINE_METHOD_BRACKETS = true; + getSettings().ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION = false; getSettings().ALIGN_MULTILINE_PARAMETERS = true; getSettings().ALIGN_MULTILINE_PARAMETERS_IN_CALLS = true; getSettings().CALL_PARAMETERS_RPAREN_ON_NEXT_LINE = true; @@ -136,6 +137,17 @@ public class JavaFormatterAlignmentTest extends AbstractJavaFormatterTest { " );\n" + "}" ); + + // Inspired by IDEA-55306 + getSettings().ALIGN_MULTILINE_METHOD_BRACKETS = false; + getSettings().CALL_PARAMETERS_RPAREN_ON_NEXT_LINE = false; + String method = + "executeCommand(new Command() {\n" + + " public Boolean run() throws ExecutionException {\n" + + " return doInterrupt();\n" + + " }\n" + + "});"; + doMethodTest(method, method); } public void testVariableDeclarationAlignment() { diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java index 29dbaf3d4f42..a3a4de778af6 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java @@ -426,6 +426,7 @@ public class CodeStyleSettings implements Cloneable, JDOMExternalizable { public boolean ALIGN_MULTILINE_THROWS_LIST = false; public boolean ALIGN_MULTILINE_EXTENDS_LIST = false; + public boolean ALIGN_MULTILINE_METHOD_BRACKETS = false; public boolean ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION = false; public boolean ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION = false; diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleIndentAndBracesPanel.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleIndentAndBracesPanel.java index 3189739d00fe..eddae7a798ae 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleIndentAndBracesPanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleIndentAndBracesPanel.java @@ -73,6 +73,7 @@ public class CodeStyleIndentAndBracesPanel extends MultilanguageCodeStyleAbstrac private JCheckBox myAlignChainedMethods; private JCheckBox myAlignDeclarationParameters; private JCheckBox myAlignCallParameters; + private JCheckBox myAlignMethodBrackets; private JCheckBox myAlignExtendsList; private JCheckBox myAlignForStatement; private JCheckBox myAlignThrowsList; @@ -206,6 +207,9 @@ public class CodeStyleIndentAndBracesPanel extends MultilanguageCodeStyleAbstrac myAlignCallParameters = createCheckBox(ApplicationBundle.message("checkbox.align.multiline.call.arguments")); optionGroup.add(myAlignCallParameters); + myAlignMethodBrackets = createCheckBox(ApplicationBundle.message("checkbox.align.multiline.method.brackets")); + optionGroup.add(myAlignMethodBrackets); + myAlignExtendsList = createCheckBox(ApplicationBundle.message("checkbox.align.multiline.extends.list")); optionGroup.add(myAlignExtendsList); @@ -325,6 +329,7 @@ public class CodeStyleIndentAndBracesPanel extends MultilanguageCodeStyleAbstrac isModified |= isModified(myAlignAssignment, settings.ALIGN_MULTILINE_ASSIGNMENT); isModified |= isModified(myAlignBinaryExpression, settings.ALIGN_MULTILINE_BINARY_OPERATION); isModified |= isModified(myAlignCallParameters, settings.ALIGN_MULTILINE_PARAMETERS_IN_CALLS); + isModified |= isModified(myAlignMethodBrackets, settings.ALIGN_MULTILINE_METHOD_BRACKETS); isModified |= isModified(myAlignDeclarationParameters, settings.ALIGN_MULTILINE_PARAMETERS); isModified |= isModified(myAlignExtendsList, settings.ALIGN_MULTILINE_EXTENDS_LIST); isModified |= isModified(myAlignForStatement, settings.ALIGN_MULTILINE_FOR); @@ -370,6 +375,7 @@ public class CodeStyleIndentAndBracesPanel extends MultilanguageCodeStyleAbstrac myAlignAssignment.setSelected(settings.ALIGN_MULTILINE_ASSIGNMENT); myAlignBinaryExpression.setSelected(settings.ALIGN_MULTILINE_BINARY_OPERATION); myAlignCallParameters.setSelected(settings.ALIGN_MULTILINE_PARAMETERS_IN_CALLS); + myAlignMethodBrackets.setSelected(settings.ALIGN_MULTILINE_METHOD_BRACKETS); myAlignChainedMethods.setSelected(settings.ALIGN_MULTILINE_CHAINED_METHODS); myAlignDeclarationParameters.setSelected(settings.ALIGN_MULTILINE_PARAMETERS); myAlignExtendsList.setSelected(settings.ALIGN_MULTILINE_EXTENDS_LIST); @@ -410,6 +416,7 @@ public class CodeStyleIndentAndBracesPanel extends MultilanguageCodeStyleAbstrac settings.ALIGN_MULTILINE_ASSIGNMENT = myAlignAssignment.isSelected(); settings.ALIGN_MULTILINE_BINARY_OPERATION = myAlignBinaryExpression.isSelected(); settings.ALIGN_MULTILINE_PARAMETERS_IN_CALLS = myAlignCallParameters.isSelected(); + settings.ALIGN_MULTILINE_METHOD_BRACKETS = myAlignMethodBrackets.isSelected(); settings.ALIGN_MULTILINE_CHAINED_METHODS = myAlignChainedMethods.isSelected(); settings.ALIGN_MULTILINE_PARAMETERS = myAlignDeclarationParameters.isSelected(); settings.ALIGN_MULTILINE_EXTENDS_LIST = myAlignExtendsList.isSelected(); diff --git a/platform/platform-resources-en/src/messages/ApplicationBundle.properties b/platform/platform-resources-en/src/messages/ApplicationBundle.properties index 120012d412c8..da4bde9abbf9 100644 --- a/platform/platform-resources-en/src/messages/ApplicationBundle.properties +++ b/platform/platform-resources-en/src/messages/ApplicationBundle.properties @@ -144,6 +144,7 @@ title.align.when.multiline=Align When Multiline checkbox.align.multiline.chained.methods=Chained methods checkbox.align.multiline.method.parameters=Method parameters checkbox.align.multiline.call.arguments=Call arguments +checkbox.align.multiline.method.brackets=Method brackets checkbox.align.multiline.extends.list=Extends list checkbox.align.multiline.throws.list=Throws list checkbox.align.multiline.fields.variables.groups=Fields/variables groups