Handle -> operator Never break after `->` in statement-bodied lambda expressions, and indent them correctly. Fixes #2 ------------- Created by MOE: http://code.google.com/p/moe-java MOE_MIGRATED_REVID=100067466
diff --git a/core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java b/core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java index e00a0f1..2a1183e 100644 --- a/core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java +++ b/core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java
@@ -1093,7 +1093,7 @@ public boolean visit(Initializer node) { sync(node); visitAndBreakModifiers(node.modifiers(), Direction.VERTICAL); - visit(node.getBody()); + node.getBody().accept(this); builder.guessToken(";"); return false; } @@ -1152,7 +1152,8 @@ @Override public boolean visit(LambdaExpression node) { sync(node); - builder.open(plusFour); + boolean statementBody = node.getBody().getNodeType() == ASTNode.BLOCK; + builder.open(statementBody ? ZERO : plusFour); builder.open(plusFour); if (node.hasParentheses()) { token("("); @@ -1163,29 +1164,21 @@ token(","); builder.breakOp(" "); } - if (parameter.getNodeType() == ASTNode.SINGLE_VARIABLE_DECLARATION) { - visit((SingleVariableDeclaration) parameter); - } else if (parameter.getNodeType() == ASTNode.VARIABLE_DECLARATION_FRAGMENT) { - visit((VariableDeclarationFragment) parameter); - } else { - token("<<<PARAMETER>>>"); - } + parameter.accept(this);; first = false; } if (node.hasParentheses()) { token(")"); } builder.close(); - builder.breakOp(" "); + if (statementBody) { + builder.space(); + } else { + builder.breakOp(" "); + } builder.op("->"); builder.space(); - if (node.getBody().getNodeType() == ASTNode.BLOCK) { - visit((Block) node.getBody()); - } else if (node.getBody() instanceof Expression) { - node.getBody().accept(this); - } else { - token("<<<BODY>>>"); - } + node.getBody().accept(this); builder.close(); return false; } @@ -1745,7 +1738,7 @@ builder.close(); token(")"); builder.space(); - visit(node.getBody()); + node.getBody().accept(this); return false; }
diff --git a/core/src/test/resources/com/google/googlejavaformat/java/testdata/B22873322.input b/core/src/test/resources/com/google/googlejavaformat/java/testdata/B22873322.input new file mode 100644 index 0000000..48984c4 --- /dev/null +++ b/core/src/test/resources/com/google/googlejavaformat/java/testdata/B22873322.input
@@ -0,0 +1,14 @@ +class B22873322 { + { + f(param -> veryLooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongExpr(param)); + f((param1, param2) -> veryLooooooooooooooooooooooooooooooooooooooooooooooooongExpr(param1, param2)); + f((int param) -> veryLooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongExpr(param)); + f((param1, param2) -> { + return expr(param1, param2); + }); + f((param1, param2) -> { + Object foo = expr(param1, param2); + return foo; + }); + } +}
diff --git a/core/src/test/resources/com/google/googlejavaformat/java/testdata/B22873322.output b/core/src/test/resources/com/google/googlejavaformat/java/testdata/B22873322.output new file mode 100644 index 0000000..8bf4cd6 --- /dev/null +++ b/core/src/test/resources/com/google/googlejavaformat/java/testdata/B22873322.output
@@ -0,0 +1,23 @@ +class B22873322 { + { + f( + param + -> veryLooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongExpr( + param)); + f( + (param1, param2) + -> veryLooooooooooooooooooooooooooooooooooooooooooooooooongExpr(param1, param2)); + f( + (int param) + -> veryLooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongExpr(param)); + f( + (param1, param2) -> { + return expr(param1, param2); + }); + f( + (param1, param2) -> { + Object foo = expr(param1, param2); + return foo; + }); + } +}