diff options
6 files changed, 22 insertions, 7 deletions
diff --git a/src/main/java/com/squareup/javapoet/ArrayTypeName.java b/src/main/java/com/squareup/javapoet/ArrayTypeName.java index 07bf581..289e05a 100644 --- a/src/main/java/com/squareup/javapoet/ArrayTypeName.java +++ b/src/main/java/com/squareup/javapoet/ArrayTypeName.java @@ -41,7 +41,7 @@ public final class ArrayTypeName extends TypeName { } @Override public ArrayTypeName annotated(List<AnnotationSpec> annotations) { - return new ArrayTypeName(componentType, annotations); + return new ArrayTypeName(componentType, prependAnnotations(annotations)); } @Override CodeWriter emit(CodeWriter out) throws IOException { diff --git a/src/main/java/com/squareup/javapoet/ClassName.java b/src/main/java/com/squareup/javapoet/ClassName.java index 679ad08..5136b86 100644 --- a/src/main/java/com/squareup/javapoet/ClassName.java +++ b/src/main/java/com/squareup/javapoet/ClassName.java @@ -55,7 +55,7 @@ public final class ClassName extends TypeName implements Comparable<ClassName> { } @Override public ClassName annotated(List<AnnotationSpec> annotations) { - return new ClassName(names, annotations); + return new ClassName(names, prependAnnotations(annotations)); } /** Returns the package name, like {@code "java.util"} for {@code Map.Entry}. */ diff --git a/src/main/java/com/squareup/javapoet/ParameterizedTypeName.java b/src/main/java/com/squareup/javapoet/ParameterizedTypeName.java index ff2f933..8b36c7e 100644 --- a/src/main/java/com/squareup/javapoet/ParameterizedTypeName.java +++ b/src/main/java/com/squareup/javapoet/ParameterizedTypeName.java @@ -49,7 +49,7 @@ public final class ParameterizedTypeName extends TypeName { } @Override public ParameterizedTypeName annotated(List<AnnotationSpec> annotations) { - return new ParameterizedTypeName(rawType, typeArguments, annotations); + return new ParameterizedTypeName(rawType, typeArguments, prependAnnotations(annotations)); } @Override CodeWriter emit(CodeWriter out) throws IOException { diff --git a/src/main/java/com/squareup/javapoet/TypeName.java b/src/main/java/com/squareup/javapoet/TypeName.java index 6895d85..9d5c706 100644 --- a/src/main/java/com/squareup/javapoet/TypeName.java +++ b/src/main/java/com/squareup/javapoet/TypeName.java @@ -110,7 +110,13 @@ public class TypeName { public TypeName annotated(List<AnnotationSpec> annotations) { Util.checkNotNull(annotations, "annotations == null"); - return new TypeName(keyword, annotations); + return new TypeName(keyword, prependAnnotations(annotations)); + } + + protected final List<AnnotationSpec> prependAnnotations(List<AnnotationSpec> annotations) { + List<AnnotationSpec> allAnnotations = new ArrayList<>(annotations); + allAnnotations.addAll(this.annotations); + return allAnnotations; } public boolean isAnnotated() { diff --git a/src/main/java/com/squareup/javapoet/WildcardTypeName.java b/src/main/java/com/squareup/javapoet/WildcardTypeName.java index b2bfb76..31ccc62 100644 --- a/src/main/java/com/squareup/javapoet/WildcardTypeName.java +++ b/src/main/java/com/squareup/javapoet/WildcardTypeName.java @@ -55,7 +55,7 @@ public final class WildcardTypeName extends TypeName { } @Override public WildcardTypeName annotated(List<AnnotationSpec> annotations) { - return new WildcardTypeName(upperBounds, lowerBounds, annotations); + return new WildcardTypeName(upperBounds, lowerBounds, prependAnnotations(annotations)); } @Override CodeWriter emit(CodeWriter out) throws IOException { diff --git a/src/test/java/com/squareup/javapoet/AnnotatedTypeNameTest.java b/src/test/java/com/squareup/javapoet/AnnotatedTypeNameTest.java index c5475d0..212651a 100644 --- a/src/test/java/com/squareup/javapoet/AnnotatedTypeNameTest.java +++ b/src/test/java/com/squareup/javapoet/AnnotatedTypeNameTest.java @@ -44,8 +44,7 @@ public class AnnotatedTypeNameTest { assertEquals(simpleString, TypeName.get(String.class)); TypeName annotated = simpleString.annotated(NEVER_NULL); assertTrue(annotated.isAnnotated()); - assertEquals(simpleString, annotated.annotated()); - assertFalse(annotated.annotated().isAnnotated()); + assertEquals(annotated, annotated.annotated()); } @Test public void annotatedType() { @@ -55,6 +54,16 @@ public class AnnotatedTypeNameTest { assertEquals(expected, actual); } + @Test public void annotatedTwice() { + String expected = "@java.lang.Override @" + NN + " java.lang.String"; + TypeName type = TypeName.get(String.class); + String actual = + type.annotated(NEVER_NULL) + .annotated(AnnotationSpec.builder(Override.class).build()) + .toString(); + assertEquals(expected, actual); + } + @Test public void annotatedParameterizedType() { String expected = "@" + NN + " java.util.List<java.lang.String>"; TypeName type = ParameterizedTypeName.get(List.class, String.class); |