From 57600ffedc26748829a753e4165c15a0de076e11 Mon Sep 17 00:00:00 2001 From: Liam Miller-Cushon Date: Mon, 12 Apr 2021 18:14:28 -0700 Subject: [PATCH] Fix handling of annotations in compact record constructors Fixes https://github.com/google/google-java-format/issues/574 PiperOrigin-RevId: 368124032 --- .../java/java14/Java14InputAstVisitor.java | 14 ++------------ .../palantir/javaformat/java/FileBasedTests.java | 2 +- .../palantir/javaformat/java/testdata/I574.input | 6 ++++++ .../palantir/javaformat/java/testdata/I574.output | 6 ++++++ 4 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 palantir-java-format/src/test/resources/com/palantir/javaformat/java/testdata/I574.input create mode 100644 palantir-java-format/src/test/resources/com/palantir/javaformat/java/testdata/I574.output diff --git a/palantir-java-format/src/main/java/com/palantir/javaformat/java/java14/Java14InputAstVisitor.java b/palantir-java-format/src/main/java/com/palantir/javaformat/java/java14/Java14InputAstVisitor.java index ffda10cfc..51445bd07 100644 --- a/palantir-java-format/src/main/java/com/palantir/javaformat/java/java14/Java14InputAstVisitor.java +++ b/palantir-java-format/src/main/java/com/palantir/javaformat/java/java14/Java14InputAstVisitor.java @@ -17,7 +17,6 @@ package com.palantir.javaformat.java.java14; import static com.google.common.collect.ImmutableList.toImmutableList; -import static com.google.common.collect.MoreCollectors.toOptional; import static com.sun.source.tree.Tree.Kind.BLOCK; import com.google.common.base.Verify; @@ -43,6 +42,7 @@ import com.sun.source.tree.YieldTree; import com.sun.tools.javac.code.Flags; import com.sun.tools.javac.tree.JCTree; +import com.sun.tools.javac.tree.JCTree.JCVariableDecl; import com.sun.tools.javac.tree.TreeInfo; import java.util.List; import java.util.Optional; @@ -161,9 +161,7 @@ public void visitRecordDeclaration(ClassTree node) { if (!node.getTypeParameters().isEmpty()) { typeParametersRest(node.getTypeParameters(), hasSuperInterfaceTypes ? plusFour : ZERO); } - ImmutableList parameters = compactRecordConstructor(node) - .map(m -> ImmutableList.copyOf(m.getParameters())) - .orElseGet(() -> recordVariables(node)); + ImmutableList parameters = recordVariables(node); token("("); if (!parameters.isEmpty()) { // Break before args. @@ -201,14 +199,6 @@ public void visitRecordDeclaration(ClassTree node) { dropEmptyDeclarations(); } - private static Optional compactRecordConstructor(ClassTree node) { - return node.getMembers().stream() - .filter(JCTree.JCMethodDecl.class::isInstance) - .map(JCTree.JCMethodDecl.class::cast) - .filter(m -> (m.mods.flags & COMPACT_RECORD_CONSTRUCTOR) == COMPACT_RECORD_CONSTRUCTOR) - .collect(toOptional()); - } - private static ImmutableList recordVariables(ClassTree node) { return node.getMembers().stream() .filter(JCTree.JCVariableDecl.class::isInstance) diff --git a/palantir-java-format/src/test/java/com/palantir/javaformat/java/FileBasedTests.java b/palantir-java-format/src/test/java/com/palantir/javaformat/java/FileBasedTests.java index 4711ce22a..0477a979a 100644 --- a/palantir-java-format/src/test/java/com/palantir/javaformat/java/FileBasedTests.java +++ b/palantir-java-format/src/test/java/com/palantir/javaformat/java/FileBasedTests.java @@ -43,7 +43,7 @@ public final class FileBasedTests { // Test files that are only used when run with a minimum Java version private static final ImmutableSet JAVA_14_TESTS = - ImmutableSet.of("ExpressionSwitch", "RSL", "Records", "Var"); + ImmutableSet.of("ExpressionSwitch", "RSL", "Records", "Var", "I574"); private static final ImmutableSet JAVA_16_TESTS = ImmutableSet.of("I588"); private final Class testClass; diff --git a/palantir-java-format/src/test/resources/com/palantir/javaformat/java/testdata/I574.input b/palantir-java-format/src/test/resources/com/palantir/javaformat/java/testdata/I574.input new file mode 100644 index 000000000..27d23d040 --- /dev/null +++ b/palantir-java-format/src/test/resources/com/palantir/javaformat/java/testdata/I574.input @@ -0,0 +1,6 @@ +public record Record(@NotNull Object o) { + + public Record { + this.o = o; + } +} \ No newline at end of file diff --git a/palantir-java-format/src/test/resources/com/palantir/javaformat/java/testdata/I574.output b/palantir-java-format/src/test/resources/com/palantir/javaformat/java/testdata/I574.output new file mode 100644 index 000000000..b0deb2d10 --- /dev/null +++ b/palantir-java-format/src/test/resources/com/palantir/javaformat/java/testdata/I574.output @@ -0,0 +1,6 @@ +public record Record(@NotNull Object o) { + + public Record { + this.o = o; + } +}