diff options
author | Liam Miller-Cushon <cushon@google.com> | 2022-01-24 08:14:36 -0800 |
---|---|---|
committer | google-java-format Team <google-java-format-dev+copybara@google.com> | 2022-01-24 08:15:07 -0800 |
commit | 621fb85a8de8000fd80ced515828789cc45ff037 (patch) | |
tree | 7199ab9971a729471f93bf9fb77de5bff60ee8f0 | |
parent | 49eba6d05fd5220aa832b1034491c4ab0310dd21 (diff) | |
download | google-java-format-621fb85a8de8000fd80ced515828789cc45ff037.tar.gz |
Handle modifiers that start with `non-`
Fixes https://github.com/google/google-java-format/issues/696
PiperOrigin-RevId: 423819018
4 files changed, 30 insertions, 9 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 8da7195..daed250 100644 --- a/core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java +++ b/core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java @@ -2294,7 +2294,7 @@ public class JavaInputAstVisitor extends TreePathScanner<Void, Void> { ? forceBreakList(declarationAnnotationBreak) : breakList(declarationAnnotationBreak)); } - formatAnnotationOrModifier(declarationModifiers.removeFirst()); + formatAnnotationOrModifier(declarationModifiers); first = false; lastWasAnnotation = true; } @@ -2317,7 +2317,7 @@ public class JavaInputAstVisitor extends TreePathScanner<Void, Void> { if (!first) { builder.addAll(breakFillList(Optional.empty())); } - formatAnnotationOrModifier(declarationModifiers.removeFirst()); + formatAnnotationOrModifier(declarationModifiers); first = false; } builder.close(); @@ -2452,10 +2452,15 @@ public class JavaInputAstVisitor extends TreePathScanner<Void, Void> { modifiers.subList(0, idx + 1), typeAnnotations.build().reverse()); } - private void formatAnnotationOrModifier(AnnotationOrModifier modifier) { + private void formatAnnotationOrModifier(Deque<AnnotationOrModifier> modifiers) { + AnnotationOrModifier modifier = modifiers.removeFirst(); switch (modifier.getKind()) { case MODIFIER: token(modifier.modifier().getText()); + if (modifier.modifier().getText().equals("non")) { + token(modifiers.removeFirst().modifier().getText()); + token(modifiers.removeFirst().modifier().getText()); + } break; case ANNOTATION: scan(modifier.annotation(), null); @@ -2471,10 +2476,6 @@ public class JavaInputAstVisitor extends TreePathScanner<Void, Void> { return typeAnnotationSimpleNames.contains(((IdentifierTree) annotationType).getName()); } - boolean nextIsModifier() { - return isModifier(builder.peekToken().get()); - } - private static boolean isModifier(String token) { switch (token) { case "public": @@ -2490,7 +2491,8 @@ public class JavaInputAstVisitor extends TreePathScanner<Void, Void> { case "strictfp": case "default": case "sealed": - case "non-sealed": + case "non": + case "-": return true; default: return false; diff --git a/core/src/test/java/com/google/googlejavaformat/java/FormatterIntegrationTest.java b/core/src/test/java/com/google/googlejavaformat/java/FormatterIntegrationTest.java index 22202e9..61a4346 100644 --- a/core/src/test/java/com/google/googlejavaformat/java/FormatterIntegrationTest.java +++ b/core/src/test/java/com/google/googlejavaformat/java/FormatterIntegrationTest.java @@ -51,7 +51,7 @@ public class FormatterIntegrationTest { .putAll(14, "I477", "Records", "RSLs", "Var", "ExpressionSwitch", "I574", "I594") .putAll(15, "I603") .putAll(16, "I588") - .putAll(17, "I683", "I684") + .putAll(17, "I683", "I684", "I696") .build(); @Parameters(name = "{index}: {0}") diff --git a/core/src/test/resources/com/google/googlejavaformat/java/testdata/I696.input b/core/src/test/resources/com/google/googlejavaformat/java/testdata/I696.input new file mode 100644 index 0000000..156e6ef --- /dev/null +++ b/core/src/test/resources/com/google/googlejavaformat/java/testdata/I696.input @@ -0,0 +1,11 @@ +public abstract non-sealed class A extends SealedClass { +} + +non-sealed class B extends SealedClass { +} + +non-sealed @A class B extends SealedClass { +} + +@A non-sealed class B extends SealedClass { +} diff --git a/core/src/test/resources/com/google/googlejavaformat/java/testdata/I696.output b/core/src/test/resources/com/google/googlejavaformat/java/testdata/I696.output new file mode 100644 index 0000000..14721c3 --- /dev/null +++ b/core/src/test/resources/com/google/googlejavaformat/java/testdata/I696.output @@ -0,0 +1,8 @@ +public abstract non-sealed class A extends SealedClass {} + +non-sealed class B extends SealedClass {} + +non-sealed @A class B extends SealedClass {} + +@A +non-sealed class B extends SealedClass {} |