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 084dd1c49392..39b44d4adb79 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 @@ -702,9 +702,9 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo ASTNode child = node.getFirstChildNode(); while (child != null) { if (!FormatterUtil.containsWhiteSpacesOnly(child)) { - if (child.getElementType() == JavaElementType.METHOD_CALL_EXPRESSION || child.getElementType() == - JavaElementType - .REFERENCE_EXPRESSION) { + IElementType type = child.getElementType(); + if (type == JavaElementType.METHOD_CALL_EXPRESSION || + type == JavaElementType.REFERENCE_EXPRESSION) { collectNodes(nodes, child); } else { diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/ChainMethodCallsBlockBuilder.java b/java/java-impl/src/com/intellij/psi/formatter/java/ChainMethodCallsBlockBuilder.java index 799027f701b5..e5e3ed668fce 100644 --- a/java/java-impl/src/com/intellij/psi/formatter/java/ChainMethodCallsBlockBuilder.java +++ b/java/java-impl/src/com/intellij/psi/formatter/java/ChainMethodCallsBlockBuilder.java @@ -75,8 +75,10 @@ class ChainMethodCallsBlockBuilder { for (int i = 0; i < methodCall.size(); i++) { ChainedCallChunk currentCallChunk = methodCall.get(i); if (isMethodCall(currentCallChunk)) { - if (myWrap == null) myWrap = createCallChunkWrap(i, methodCall); - if (myChainedCallsAlignment == null) myChainedCallsAlignment = createCallChunkAlignment(i, methodCall); + if (myWrap == null) + myWrap = createCallChunkWrap(i, methodCall); + if (myChainedCallsAlignment == null) + myChainedCallsAlignment = createCallChunkAlignment(i, methodCall); } else { myWrap = null; @@ -137,7 +139,7 @@ class ChainMethodCallsBlockBuilder { private boolean isMethodCall(@NotNull ChainedCallChunk callChunk) { List nodes = callChunk.nodes; - return !nodes.isEmpty() && nodes.get(nodes.size() - 1).getElementType() == JavaElementType.EXPRESSION_LIST; + return nodes.size() >= 3 && nodes.get(2).getElementType() == JavaElementType.EXPRESSION_LIST; } } 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 dadf7fbf590f..c45fa4cfdbdd 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 @@ -48,7 +48,42 @@ public class JavaFormatterAlignmentTest extends AbstractJavaFormatterTest { " .foo();" ); } + + public void testChainedMethodWithComments() throws Exception { + getSettings().ALIGN_MULTILINE_CHAINED_METHODS = true; + doMethodTest("AAAAA.b()\n" + + ".c() // comment after line\n" + + ".d()\n" + + ".e();", + "AAAAA.b()\n" + + " .c() // comment after line\n" + + " .d()\n" + + " .e();"); + } + + public void testChainedMethodWithBlockComment() { + getSettings().ALIGN_MULTILINE_CHAINED_METHODS = true; + doTextTest("class X {\n" + + " public void test() {\n" + + " AAAAAA.b()\n" + + ".c()\n" + + ".d()\n" + + " /* simple block comment */\n" + + ".e();\n" + + " }\n" + + "}", + "class X {\n" + + " public void test() {\n" + + " AAAAAA.b()\n" + + " .c()\n" + + " .d()\n" + + " /* simple block comment */\n" + + " .e();\n" + + " }\n" + + "}"); + } + public void testMultipleMethodAnnotationsCommentedInTheMiddle() throws Exception { getSettings().BLANK_LINES_AFTER_CLASS_HEADER = 1; getSettings().getRootSettings().getIndentOptions(StdFileTypes.JAVA).INDENT_SIZE = 4; @@ -256,7 +291,7 @@ public class JavaFormatterAlignmentTest extends AbstractJavaFormatterTest { "}" ); } - + public void testAnnotatedAndNonAnnotatedFieldsInColumnsAlignment() { // Inspired by IDEA-60237 @@ -281,10 +316,10 @@ public class JavaFormatterAlignmentTest extends AbstractJavaFormatterTest { "}" ); } - + public void testAlignThrowsKeyword() throws Exception { // Inspired by IDEA-63820 - + getSettings().ALIGN_THROWS_KEYWORD = true; doClassTest( "public void test()\n" +