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 4d41e4ba39..b4cc1a35e0 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 @@ -182,7 +182,7 @@ ${builderClassModifiers}class ${builderName}${builderFormalTypes} ## #if ($builderGetter) @`java.lang.Override` - ${p.nullableAnnotation}${builderGetter.access}$builderGetter.type ${builderGetter.name}() { + #if (!$builderGetter.optional)${p.nullableAnnotation}#end${builderGetter.access}$builderGetter.type ${builderGetter.name}() { #set ($noValueToGetCondition = $builderRequiredProperties.noValueToGet($p)) #if ($builderGetters[$p.name].optional) 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 4484f9f35c..22bbd60490 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 @@ -1180,6 +1180,51 @@ public void nullablePrimitiveTypeUseAnnotation() { .onLineContaining("Baz(@Nullable int thing)"); } + @Test + public void conflictingAnnotationsOnOptionalGetter() { + JavaFileObject javaFileObject = + JavaFileObjects.forSourceLines( + "foo.bar.Baz", + "package foo.bar;", + "", + "import com.google.auto.value.AutoBuilder;", + "import java.lang.annotation.ElementType;", + "import java.lang.annotation.Target;", + "import java.util.Optional;", + "", + "public class Baz {", + " @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})", + " public @interface Nullable {}", + "", + " @Target(ElementType.TYPE_USE)", + " public @interface NotNull {}", + "", + " private final String foo;", + "", + " public Baz(@Nullable String foo) {", + " this.foo = foo;", + " }", + "", + " @AutoBuilder", + " public interface Builder {", + " Builder foo(String foo);", + " @NotNull Optional foo();", + " Baz build();", + " }", + "}"); + Compilation compilation = + javac().withProcessors(new AutoBuilderProcessor()).compile(javaFileObject); + assertThat(compilation).succeeded(); + assertThat(compilation) + .generatedSourceFile("foo.bar.AutoBuilder_Baz_Builder") + .contentsAsUtf8String() + .doesNotContain("@Baz.Nullable public @Baz.NotNull Optional foo()"); + assertThat(compilation) + .generatedSourceFile("foo.bar.AutoBuilder_Baz_Builder") + .contentsAsUtf8String() + .contains("public @Baz.NotNull Optional foo()"); + } + private static String sorted(String... imports) { return stream(imports).sorted().collect(joining("\n")); }