diff --git a/value/src/main/java/com/google/auto/value/processor/AutoBuilderProcessor.java b/value/src/main/java/com/google/auto/value/processor/AutoBuilderProcessor.java index 0ff0a1dc21..dc61560698 100644 --- a/value/src/main/java/com/google/auto/value/processor/AutoBuilderProcessor.java +++ b/value/src/main/java/com/google/auto/value/processor/AutoBuilderProcessor.java @@ -324,7 +324,7 @@ private Property newProperty( return new Property( name, identifier, - TypeEncoder.encode(type), + TypeEncoder.encodeWithAnnotations(type), new AnnotatedTypeMirror(type), nullableAnnotation, nullables, diff --git a/value/src/main/java/com/google/auto/value/processor/builder.vm b/value/src/main/java/com/google/auto/value/processor/builder.vm index 30989b7843..ee0203bb40 100644 --- a/value/src/main/java/com/google/auto/value/processor/builder.vm +++ b/value/src/main/java/com/google/auto/value/processor/builder.vm @@ -43,7 +43,7 @@ ${builderClassModifiers}class ${builderName}${builderFormalTypes} ## private ${builderPropertyBuilders[$p.name].nullableBuilderType} ## ${builderPropertyBuilders[$p.name].name}; - #end + #end private $p.builderFieldType $p $p.builderInitializer; diff --git a/value/src/test/java/com/google/auto/value/processor/AutoBuilderCompilationTest.java b/value/src/test/java/com/google/auto/value/processor/AutoBuilderCompilationTest.java index a850d171cb..016cfaa496 100644 --- a/value/src/test/java/com/google/auto/value/processor/AutoBuilderCompilationTest.java +++ b/value/src/test/java/com/google/auto/value/processor/AutoBuilderCompilationTest.java @@ -167,6 +167,42 @@ public void simpleRecord() { .hasSourceEquivalentTo(EXPECTED_SIMPLE_OUTPUT); } + @Test + public void recordWithNullableNestedComponentType() { + double version = Double.parseDouble(JAVA_SPECIFICATION_VERSION.value()); + assume().that(version).isAtLeast(16.0); + JavaFileObject javaFileObject = + JavaFileObjects.forSourceLines( + "foo.bar.Baz", + "package foo.bar;", + "", + "import com.google.auto.value.AutoBuilder;", + "import org.checkerframework.checker.nullness.qual.Nullable;", + "", + "public record Baz(@Nullable Nested nested) {", + " public static Builder builder() {", + " return new AutoBuilder_Baz_Builder();", + " }", + "", + " @AutoBuilder", + " public interface Builder {", + " Builder setNested(Nested nested);", + " Baz build();", + " }", + "", + " public record Nested() {}", + "}"); + Compilation compilation = + javac() + .withProcessors(new AutoBuilderProcessor()) + .withOptions("-A" + Nullables.NULLABLE_OPTION + "=org.checkerframework.checker.nullness.qual.Nullable") + .compile(javaFileObject); + assertThat(compilation) + .generatedSourceFile("foo.bar.AutoBuilder_Baz_Builder") + .contentsAsUtf8String() + .contains("private Baz.@Nullable Nested nested;"); + } + @Test public void buildOtherPackage() { JavaFileObject built =