From c537db84f71204dcd0d79c3374afb0424f368fac Mon Sep 17 00:00:00 2001 From: fwindheuser Date: Wed, 6 Jan 2021 17:46:45 +0100 Subject: [PATCH] Wrap multiple values in switch expressions case --- .../java/JavaInputAstVisitor.java | 8 ++++---- .../java/java14/Java14InputAstVisitor.java | 16 ++++++++++++++-- .../java/testdata/ExpressionSwitch.input | 13 +++++++++++++ .../java/testdata/ExpressionSwitch.output | 19 +++++++++++++++++++ 4 files changed, 50 insertions(+), 6 deletions(-) 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 f84e228f1..05a42df7b 100644 --- a/core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java +++ b/core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java @@ -177,7 +177,7 @@ boolean isYes() { } /** Whether to collapse empty blocks. */ - enum CollapseEmptyOrNot { + protected enum CollapseEmptyOrNot { YES, NO; @@ -191,7 +191,7 @@ boolean isYes() { } /** Whether to allow leading blank lines in blocks. */ - enum AllowLeadingBlankLine { + protected enum AllowLeadingBlankLine { YES, NO; @@ -201,7 +201,7 @@ static AllowLeadingBlankLine valueOf(boolean b) { } /** Whether to allow trailing blank lines in blocks. */ - enum AllowTrailingBlankLine { + protected enum AllowTrailingBlankLine { YES, NO; @@ -2082,7 +2082,7 @@ void visitAnnotations( } /** Helper method for blocks. */ - private void visitBlock( + protected void visitBlock( BlockTree node, CollapseEmptyOrNot collapseEmptyOrNot, AllowLeadingBlankLine allowLeadingBlankLine, diff --git a/core/src/main/java/com/google/googlejavaformat/java/java14/Java14InputAstVisitor.java b/core/src/main/java/com/google/googlejavaformat/java/java14/Java14InputAstVisitor.java index 2a90b939d..7885bd754 100644 --- a/core/src/main/java/com/google/googlejavaformat/java/java14/Java14InputAstVisitor.java +++ b/core/src/main/java/com/google/googlejavaformat/java/java14/Java14InputAstVisitor.java @@ -23,6 +23,7 @@ import com.google.googlejavaformat.OpsBuilder; import com.google.googlejavaformat.java.JavaInputAstVisitor; import com.sun.source.tree.BindingPatternTree; +import com.sun.source.tree.BlockTree; import com.sun.source.tree.CaseTree; import com.sun.source.tree.ClassTree; import com.sun.source.tree.ExpressionTree; @@ -222,16 +223,18 @@ public Void visitCase(CaseTree node, Void unused) { token("default", plusTwo); } else { token("case", plusTwo); + builder.open(plusFour); builder.space(); boolean first = true; for (ExpressionTree expression : node.getExpressions()) { if (!first) { token(","); - builder.space(); + builder.breakOp(" "); } scan(expression, null); first = false; } + builder.close(); } switch (node.getCaseKind()) { case STATEMENT: @@ -245,7 +248,16 @@ public Void visitCase(CaseTree node, Void unused) { token("-"); token(">"); builder.space(); - scan(node.getBody(), null); + if (node.getBody().getKind() == Tree.Kind.BLOCK) { + // Explicit call with {@link CollapseEmptyOrNot.YES} to handle empty case blocks. + visitBlock( + (BlockTree) node.getBody(), + CollapseEmptyOrNot.YES, + AllowLeadingBlankLine.NO, + AllowTrailingBlankLine.NO); + } else { + scan(node.getBody(), null); + } builder.guessToken(";"); break; default: diff --git a/core/src/test/resources/com/google/googlejavaformat/java/testdata/ExpressionSwitch.input b/core/src/test/resources/com/google/googlejavaformat/java/testdata/ExpressionSwitch.input index 1e4db164d..5590f742a 100644 --- a/core/src/test/resources/com/google/googlejavaformat/java/testdata/ExpressionSwitch.input +++ b/core/src/test/resources/com/google/googlejavaformat/java/testdata/ExpressionSwitch.input @@ -25,4 +25,17 @@ class ExpressionSwitch { default -> System.out.println("default"); } } + + String breakLongCaseArgs(MyEnum e) { + return switch (e) { + case SOME_RATHER_LONG_NAME_1, SOME_RATHER_LONG_NAME_2, SOME_RATHER_LONG_NAME_3, SOME_RATHER_LONG_NAME_4, SOME_RATHER_LONG_NAME_5, SOME_RATHER_LONG_NAME_6, SOME_RATHER_LONG_NAME_7 -> {} + case SOME_RATHER_LONG_NAME_8 -> {} + }; + } + + String dontBreakShortCaseArgs(MyEnum e) { + return switch (e) { + case CASE_A, CASE_B -> {} + }; + } } diff --git a/core/src/test/resources/com/google/googlejavaformat/java/testdata/ExpressionSwitch.output b/core/src/test/resources/com/google/googlejavaformat/java/testdata/ExpressionSwitch.output index 6458aa09d..00ae892d4 100644 --- a/core/src/test/resources/com/google/googlejavaformat/java/testdata/ExpressionSwitch.output +++ b/core/src/test/resources/com/google/googlejavaformat/java/testdata/ExpressionSwitch.output @@ -31,4 +31,23 @@ class ExpressionSwitch { default -> System.out.println("default"); } } + + String breakLongCaseArgs(MyEnum e) { + return switch (e) { + case SOME_RATHER_LONG_NAME_1, + SOME_RATHER_LONG_NAME_2, + SOME_RATHER_LONG_NAME_3, + SOME_RATHER_LONG_NAME_4, + SOME_RATHER_LONG_NAME_5, + SOME_RATHER_LONG_NAME_6, + SOME_RATHER_LONG_NAME_7 -> {} + case SOME_RATHER_LONG_NAME_8 -> {} + }; + } + + String dontBreakShortCaseArgs(MyEnum e) { + return switch (e) { + case CASE_A, CASE_B -> {} + }; + } }