aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiam Miller-Cushon <cushon@google.com>2022-01-24 08:14:36 -0800
committergoogle-java-format Team <google-java-format-dev+copybara@google.com>2022-01-24 08:15:07 -0800
commit621fb85a8de8000fd80ced515828789cc45ff037 (patch)
tree7199ab9971a729471f93bf9fb77de5bff60ee8f0
parent49eba6d05fd5220aa832b1034491c4ab0310dd21 (diff)
downloadgoogle-java-format-621fb85a8de8000fd80ced515828789cc45ff037.tar.gz
Handle modifiers that start with `non-`
Fixes https://github.com/google/google-java-format/issues/696 PiperOrigin-RevId: 423819018
-rw-r--r--core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java18
-rw-r--r--core/src/test/java/com/google/googlejavaformat/java/FormatterIntegrationTest.java2
-rw-r--r--core/src/test/resources/com/google/googlejavaformat/java/testdata/I696.input11
-rw-r--r--core/src/test/resources/com/google/googlejavaformat/java/testdata/I696.output8
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 {}