Skip to content

Commit ee6f9ee

Browse files
mkurzgoogle-java-format Team
authored andcommitted
Add CLI flag to disable modifier reordering
The library API already supports `JavaFormatterOptions.reorderModifiers(false)`, but the CLI had no equivalent flag. This change adds `--skip-reordering-modifiers` and wires it through the CLI into `JavaFormatterOptions`. The default CLI behavior is unchanged. Fixes #1373 FUTURE_COPYBARA_INTEGRATE_REVIEW=#1373 from mkurz:cli-skip-reordering-modifiers ef826a7 PiperOrigin-RevId: 917226990
1 parent 35ed64a commit ee6f9ee

6 files changed

Lines changed: 38 additions & 1 deletion

File tree

core/src/main/java/com/google/googlejavaformat/java/CommandLineOptions.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
* normally.
4040
* @param setExitIfChanged Return exit code 1 if there are any formatting changes.
4141
* @param assumeFilename Return the name to use for diagnostics when formatting standard input.
42+
* @param reorderModifiers Reorder modifiers into the JLS-recommended order.
4243
*/
4344
record CommandLineOptions(
4445
ImmutableList<String> files,
@@ -57,7 +58,8 @@ record CommandLineOptions(
5758
boolean setExitIfChanged,
5859
Optional<String> assumeFilename,
5960
boolean reflowLongStrings,
60-
boolean formatJavadoc) {
61+
boolean formatJavadoc,
62+
boolean reorderModifiers) {
6163

6264
/** Returns true if partial formatting was selected. */
6365
boolean isSelection() {
@@ -70,6 +72,7 @@ static Builder builder() {
7072
.removeUnusedImports(true)
7173
.reflowLongStrings(true)
7274
.formatJavadoc(true)
75+
.reorderModifiers(true)
7376
.aosp(false)
7477
.version(false)
7578
.help(false)
@@ -129,6 +132,8 @@ default Builder addLength(Integer length) {
129132

130133
Builder formatJavadoc(boolean formatJavadoc);
131134

135+
Builder reorderModifiers(boolean reorderModifiers);
136+
132137
CommandLineOptions build();
133138
}
134139
}

core/src/main/java/com/google/googlejavaformat/java/CommandLineOptionsParser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ static CommandLineOptions parse(Iterable<String> options) {
7979
case "--skip-removing-unused-imports" -> optionsBuilder.removeUnusedImports(false);
8080
case "--skip-reflowing-long-strings" -> optionsBuilder.reflowLongStrings(false);
8181
case "--skip-javadoc-formatting" -> optionsBuilder.formatJavadoc(false);
82+
case "--skip-reordering-modifiers" -> optionsBuilder.reorderModifiers(false);
8283
case "-" -> optionsBuilder.stdin(true);
8384
case "-n", "--dry-run" -> optionsBuilder.dryRun(true);
8485
case "--set-exit-if-changed" -> optionsBuilder.setExitIfChanged(true);

core/src/main/java/com/google/googlejavaformat/java/Main.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ public int format(String... args) throws UsageException {
120120
JavaFormatterOptions.builder()
121121
.style(parameters.aosp() ? Style.AOSP : Style.GOOGLE)
122122
.formatJavadoc(parameters.formatJavadoc())
123+
.reorderModifiers(parameters.reorderModifiers())
123124
.build();
124125

125126
if (parameters.stdin()) {

core/src/main/java/com/google/googlejavaformat/java/UsageException.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ Use AOSP style instead of Google Style (4-space indentation).
4646
Do not reflow string literals that exceed the column limit.
4747
--skip-javadoc-formatting
4848
Do not reformat javadoc.
49+
--skip-reordering-modifiers
50+
Do not reorder modifiers into the JLS-recommended order.
4951
--dry-run, -n
5052
Prints the paths of the files whose contents would change if the formatter were run normally.
5153
--set-exit-if-changed

core/src/test/java/com/google/googlejavaformat/java/CommandLineOptionsParserTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public void defaults() {
5353
assertThat(options.setExitIfChanged()).isFalse();
5454
assertThat(options.reflowLongStrings()).isTrue();
5555
assertThat(options.formatJavadoc()).isTrue();
56+
assertThat(options.reorderModifiers()).isTrue();
5657
}
5758

5859
@Test
@@ -200,4 +201,12 @@ public void skipJavadocFormatting() {
200201
.formatJavadoc())
201202
.isFalse();
202203
}
204+
205+
@Test
206+
public void skipReorderingModifiers() {
207+
assertThat(
208+
CommandLineOptionsParser.parse(Arrays.asList("--skip-reordering-modifiers"))
209+
.reorderModifiers())
210+
.isFalse();
211+
}
203212
}

core/src/test/java/com/google/googlejavaformat/java/MainTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,25 @@ public static void main(String... args) {}
638638
.isEqualTo(input);
639639
}
640640

641+
@Test
642+
public void noReorderModifiers() throws Exception {
643+
String input =
644+
"""
645+
class Test {
646+
static public void main(String... args) {}
647+
}
648+
""";
649+
InputStream in = new ByteArrayInputStream(input.getBytes(UTF_8));
650+
StringWriter out = new StringWriter();
651+
Main main =
652+
new Main(
653+
new PrintWriter(out, true),
654+
new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.err, UTF_8)), true),
655+
in);
656+
assertThat(main.format("--skip-reordering-modifiers", "-")).isEqualTo(0);
657+
assertThat(out.toString()).isEqualTo(input);
658+
}
659+
641660
@Test
642661
public void syntaxError() throws Exception {
643662
Path path = testFolder.newFile("Test.java").toPath();

0 commit comments

Comments
 (0)