Skip to content

Commit 331d683

Browse files
committed
Use arrow switches where error-prone suggests them
error-prone's StatementSwitchToExpressionSwitch warned at 33 switch statements in the formatter. They now use arrow cases: labels that shared a body are one case, and the break statements go. Where every case returned a value, the method returns a switch expression instead: ImportOrderer.isJava, nextIsModifier, the sealed check in ModifierOrderer, and TypeNameClassifier's three states, whose switches cover all four JavaCaseFormat constants and so need no default; the IllegalStateException after them goes. This is error-prone's own fix, applied with -PerrorProneApply=StatementSwitchToExpressionSwitch and formatted with formatDiff. Nothing else changes: ./gradlew test passes, and so does :open-java-format:test on JDK 25; the 15,747 files of the JDK 21 sources format exactly as before.
1 parent a4cd6ae commit 331d683

13 files changed

Lines changed: 225 additions & 400 deletions

‎open-java-format/src/main/java/com/palantir/javaformat/Newlines.java‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,16 @@ public static String guessLineSeparator(String text) {
7171
for (int i = 0; i < text.length(); i++) {
7272
char c = text.charAt(i);
7373
switch (c) {
74-
case '\r':
74+
case '\r' -> {
7575
if (i + 1 < text.length() && text.charAt(i + 1) == '\n') {
7676
return "\r\n";
7777
}
7878
return "\r";
79-
case '\n':
79+
}
80+
case '\n' -> {
8081
return "\n";
81-
default:
82-
break;
82+
}
83+
default -> {}
8384
}
8485
}
8586
return "\n";

‎open-java-format/src/main/java/com/palantir/javaformat/doc/Level.java‎

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -570,10 +570,10 @@ private static Optional<State> tryBreakInnerLevel_checkInner(
570570
}
571571
Level lastLevel2 = ((Level) getLast(innerLevel.docs));
572572
switch (lastLevel2.getBreakabilityIfLastLevel()) {
573-
case ABORT:
574-
case CHECK_INNER:
573+
case ABORT, CHECK_INNER -> {
575574
return Optional.empty();
576-
case ACCEPT_INLINE_CHAIN:
575+
}
576+
case ACCEPT_INLINE_CHAIN -> {
577577
Exploration broken =
578578
innerLevel.breakNormally(state, levelNode, commentsHelper, maxWidth);
579579
return innerLevel.handle_breakOnlyIfInnerLevelsThenFitOnOneLine(
@@ -583,11 +583,13 @@ private static Optional<State> tryBreakInnerLevel_checkInner(
583583
broken.state(),
584584
keepIndentWhenInlined,
585585
explorationNode);
586-
case ACCEPT_INLINE_CHAIN_IF_SIMPLE_OTHERWISE_CHECK_INNER:
586+
}
587+
case ACCEPT_INLINE_CHAIN_IF_SIMPLE_OTHERWISE_CHECK_INNER -> {
587588
// specific to lambda body expressions - falls back to `breakNormally` in
588589
// `preferBreakingLastInnerLevel`
589590
return Optional.empty();
590-
default:
591+
}
592+
default ->
591593
throw new RuntimeException("Unknown breakabilityIfLastLevel: " + lastLevel2);
592594
}
593595
})

‎open-java-format/src/main/java/com/palantir/javaformat/java/CommandLineOptionsParser.java‎

Lines changed: 28 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -79,83 +79,30 @@ static CommandLineOptions parse(Iterable<String> options) {
7979
}
8080
// NOTE: update usage information in UsageException when new flags are added
8181
switch (flag) {
82-
case "-i":
83-
case "-r":
84-
case "-replace":
85-
case "--replace":
86-
optionsBuilder.inPlace(true);
87-
break;
88-
case "--lines":
89-
case "-lines":
90-
case "--line":
91-
case "-line":
82+
case "-i", "-r", "-replace", "--replace" -> optionsBuilder.inPlace(true);
83+
case "--lines", "-lines", "--line", "-line" ->
9284
parseRangeSet(optionsBuilder.linesBuilder(), getValue(flag, it, value));
93-
break;
94-
case "--character-ranges":
95-
case "-character-ranges":
96-
case "--character-range":
97-
case "-character-range":
85+
case "--character-ranges", "-character-ranges", "--character-range", "-character-range" ->
9886
parseCharacterRanges(optionsBuilder.characterRangesBuilder(), getValue(flag, it, value));
99-
break;
100-
case "--offset":
101-
case "-offset":
102-
optionsBuilder.addOffset(parseInteger(it, flag, value));
103-
break;
104-
case "--length":
105-
case "-length":
106-
optionsBuilder.addLength(parseInteger(it, flag, value));
107-
break;
108-
case "--aosp":
109-
case "-aosp":
110-
case "-a":
111-
case "--ojf":
112-
case "-ojf":
87+
case "--offset", "-offset" -> optionsBuilder.addOffset(parseInteger(it, flag, value));
88+
case "--length", "-length" -> optionsBuilder.addLength(parseInteger(it, flag, value));
89+
case "--aosp", "-aosp", "-a", "--ojf", "-ojf" ->
11390
// There is one style. The old style flags are accepted so that a script keeps working, and
11491
// Main warns about each of them.
11592
optionsBuilder.addUnsupportedFlag(flag);
116-
break;
117-
case "--version":
118-
case "-version":
119-
case "-v":
120-
optionsBuilder.version(true);
121-
break;
122-
case "--help":
123-
case "-help":
124-
case "-h":
125-
optionsBuilder.help(true);
126-
break;
127-
case "--fix-imports-only":
128-
optionsBuilder.fixImportsOnly(true);
129-
break;
130-
case "--skip-sorting-imports":
131-
optionsBuilder.sortImports(false);
132-
break;
133-
case "--skip-removing-unused-imports":
134-
optionsBuilder.removeUnusedImports(false);
135-
break;
136-
case "--skip-reflowing-long-strings":
137-
optionsBuilder.reflowLongStrings(false);
138-
break;
139-
case "-":
140-
optionsBuilder.stdin(true);
141-
break;
142-
case "-n":
143-
case "--dry-run":
144-
optionsBuilder.dryRun(true);
145-
break;
146-
case "--set-exit-if-changed":
147-
optionsBuilder.setExitIfChanged(true);
148-
break;
149-
case "-assume-filename":
150-
case "--assume-filename":
93+
case "--version", "-version", "-v" -> optionsBuilder.version(true);
94+
case "--help", "-help", "-h" -> optionsBuilder.help(true);
95+
case "--fix-imports-only" -> optionsBuilder.fixImportsOnly(true);
96+
case "--skip-sorting-imports" -> optionsBuilder.sortImports(false);
97+
case "--skip-removing-unused-imports" -> optionsBuilder.removeUnusedImports(false);
98+
case "--skip-reflowing-long-strings" -> optionsBuilder.reflowLongStrings(false);
99+
case "-" -> optionsBuilder.stdin(true);
100+
case "-n", "--dry-run" -> optionsBuilder.dryRun(true);
101+
case "--set-exit-if-changed" -> optionsBuilder.setExitIfChanged(true);
102+
case "-assume-filename", "--assume-filename" ->
151103
optionsBuilder.assumeFilename(getValue(flag, it, value));
152-
break;
153-
case "-output-replacements":
154-
case "--output-replacements":
155-
optionsBuilder.outputReplacements(true);
156-
break;
157-
default:
158-
throw new IllegalArgumentException("unexpected flag: " + flag);
104+
case "-output-replacements", "--output-replacements" -> optionsBuilder.outputReplacements(true);
105+
default -> throw new IllegalArgumentException("unexpected flag: " + flag);
159106
}
160107
}
161108
return optionsBuilder.build();
@@ -196,15 +143,16 @@ private static void parseCharacterRanges(ImmutableRangeSet.Builder<Integer> resu
196143
private static Range<Integer> parseCharacterRange(String range) {
197144
List<String> args = COLON_SPLITTER.splitToList(range);
198145
switch (args.size()) {
199-
case 1:
146+
case 1 -> {
200147
int lowerUpperRange = Integer.parseInt(args.get(0));
201148
return Range.closed(lowerUpperRange, lowerUpperRange);
202-
case 2:
149+
}
150+
case 2 -> {
203151
int lower = Integer.parseInt(args.get(0));
204152
int higher = Integer.parseInt(args.get(1));
205153
return Range.closed(lower, higher);
206-
default:
207-
throw new IllegalArgumentException(range);
154+
}
155+
default -> throw new IllegalArgumentException(range);
208156
}
209157
}
210158

@@ -226,15 +174,16 @@ private static void parseRangeSet(RangeSet<Integer> result, String ranges) {
226174
private static Range<Integer> parseRange(String arg) {
227175
List<String> args = COLON_SPLITTER.splitToList(arg);
228176
switch (args.size()) {
229-
case 1:
177+
case 1 -> {
230178
int line = Integer.parseInt(args.get(0)) - 1;
231179
return Range.closedOpen(line, line + 1);
232-
case 2:
180+
}
181+
case 2 -> {
233182
int line0 = Integer.parseInt(args.get(0)) - 1;
234183
int line1 = Integer.parseInt(args.get(1)) - 1;
235184
return Range.closedOpen(line0, line1 + 1);
236-
default:
237-
throw new IllegalArgumentException(arg);
185+
}
186+
default -> throw new IllegalArgumentException(arg);
238187
}
239188
}
240189

‎open-java-format/src/main/java/com/palantir/javaformat/java/DimensionHelpers.java‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,18 +103,21 @@ private static Iterable<List<AnnotationTree>> reorderBySourcePosition(Deque<List
103103
*/
104104
private static Tree extractDims(Deque<List<AnnotationTree>> dims, Tree node) {
105105
switch (node.getKind()) {
106-
case ARRAY_TYPE:
106+
case ARRAY_TYPE -> {
107107
return extractDims(dims, ((ArrayTypeTree) node).getType());
108-
case ANNOTATED_TYPE:
108+
}
109+
case ANNOTATED_TYPE -> {
109110
AnnotatedTypeTree annotatedTypeTree = (AnnotatedTypeTree) node;
110111
if (!(annotatedTypeTree.getUnderlyingType() instanceof ArrayTypeTree)) {
111112
return node;
112113
}
113114
node = extractDims(dims, annotatedTypeTree.getUnderlyingType());
114115
dims.addFirst(ImmutableList.copyOf(annotatedTypeTree.getAnnotations()));
115116
return node;
116-
default:
117+
}
118+
default -> {
117119
return node;
120+
}
118121
}
119122
}
120123
}

‎open-java-format/src/main/java/com/palantir/javaformat/java/Formatter.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,12 +220,12 @@ static boolean errorDiagnostic(Diagnostic<?> input) {
220220
return false;
221221
}
222222
switch (input.getCode()) {
223-
case "compiler.err.invalid.meth.decl.ret.type.req":
223+
case "compiler.err.invalid.meth.decl.ret.type.req" -> {
224224
// accept constructor-like method declarations that don't match the name of their
225225
// enclosing class
226226
return false;
227-
default:
228-
break;
227+
}
228+
default -> {}
229229
}
230230
return true;
231231
}

‎open-java-format/src/main/java/com/palantir/javaformat/java/ImportOrderer.java‎

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -257,13 +257,10 @@ boolean isAndroid() {
257257

258258
/** True if this is a Java import per AOSP style. */
259259
boolean isJava() {
260-
switch (topLevel()) {
261-
case "java":
262-
case "javax":
263-
return true;
264-
default:
265-
return false;
266-
}
260+
return switch (topLevel()) {
261+
case "java", "javax" -> true;
262+
default -> false;
263+
};
267264
}
268265

269266
/**

‎open-java-format/src/main/java/com/palantir/javaformat/java/JavaInput.java‎

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -543,20 +543,18 @@ private static ImmutableList<Token> buildTokens(List<Tok> toks) {
543543
// TODO(cushon): find a better strategy.
544544
if (toks.get(k).isSlashStarComment()) {
545545
switch (tok.getText()) {
546-
case "(":
547-
case "<":
548-
case ".":
546+
case "(", "<", "." -> {
549547
break OUTER;
550-
default:
551-
break;
548+
}
549+
default -> {}
552550
}
553551
}
554552
if (toks.get(k).isJavadocComment()) {
555553
switch (tok.getText()) {
556-
case ";":
554+
case ";" -> {
557555
break OUTER;
558-
default:
559-
break;
556+
}
557+
default -> {}
560558
}
561559
}
562560
if (isParamComment(toks.get(k))) {

0 commit comments

Comments
 (0)