aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/squareup/javapoet/ArrayTypeName.java2
-rw-r--r--src/main/java/com/squareup/javapoet/ClassName.java2
-rw-r--r--src/main/java/com/squareup/javapoet/ParameterizedTypeName.java2
-rw-r--r--src/main/java/com/squareup/javapoet/TypeName.java8
-rw-r--r--src/main/java/com/squareup/javapoet/WildcardTypeName.java2
-rw-r--r--src/test/java/com/squareup/javapoet/AnnotatedTypeNameTest.java13
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);