|
17 | 17 |
|
18 | 18 | import java.io.IOException; |
19 | 19 | import java.util.ArrayList; |
20 | | -import java.util.Collections; |
| 20 | +import java.util.Arrays; |
| 21 | +import java.util.HashSet; |
21 | 22 | import java.util.List; |
22 | 23 | import java.util.Set; |
23 | 24 | import java.util.StringJoiner; |
@@ -69,23 +70,32 @@ public class RefinementProcessor extends AbstractProcessor { |
69 | 70 |
|
70 | 71 | @Override |
71 | 72 | public Set<String> getSupportedAnnotationTypes() { |
72 | | - return Collections.singleton(GenerateRefinements.class.getName()); |
| 73 | + return new HashSet<>(Arrays.asList(GenerateRefinement.class.getName(), GenerateRefinements.class.getName())); |
73 | 74 | } |
74 | 75 |
|
75 | 76 | @Override |
76 | 77 | public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { |
77 | 78 |
|
78 | | - final Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(GenerateRefinements.class); |
| 79 | + final Set<Element> elements = new HashSet<>(); |
| 80 | + elements.addAll(roundEnv.getElementsAnnotatedWith(GenerateRefinements.class)); |
| 81 | + elements.addAll(roundEnv.getElementsAnnotatedWith(GenerateRefinement.class)); |
79 | 82 |
|
80 | 83 | for (Element elem : elements) { |
81 | 84 |
|
82 | 85 | validateAnnotation(elem); |
83 | 86 |
|
| 87 | + final GenerateRefinement[] refinements; |
84 | 88 | final GenerateRefinements generateRefinements = elem.getAnnotation(GenerateRefinements.class); |
85 | 89 |
|
| 90 | + if (generateRefinements != null) { |
| 91 | + refinements = generateRefinements.value(); |
| 92 | + } else { |
| 93 | + refinements = new GenerateRefinement[] {elem.getAnnotation(GenerateRefinement.class)}; |
| 94 | + } |
| 95 | + |
86 | 96 | int idx = 0; |
87 | 97 |
|
88 | | - for (GenerateRefinement annotation : generateRefinements.value()) { |
| 98 | + for (GenerateRefinement annotation : refinements) { |
89 | 99 |
|
90 | 100 | final TypeElement annotatedClass = (TypeElement) elem; |
91 | 101 |
|
@@ -161,13 +171,18 @@ private void addConstructors(TypeSpec.Builder builder, |
161 | 171 | GenerateRefinement annotation, |
162 | 172 | int idx) { |
163 | 173 |
|
| 174 | + final AnnotationMirror mirror; |
164 | 175 | final AnnotationMirror generateRefinementsMirror = |
165 | 176 | AnnotationUtils.findAnnotationMirror(annotatedClass, GenerateRefinements.class); |
166 | 177 |
|
167 | | - final List<? extends AnnotationValue> values = find(generateRefinementsMirror, "value"); |
168 | | - final AnnotationMirror generateRefinementMirror = (AnnotationMirror) values.get(idx).getValue(); |
| 178 | + if (generateRefinementsMirror != null) { |
| 179 | + final List<? extends AnnotationValue> values = find(generateRefinementsMirror, "value"); |
| 180 | + mirror = (AnnotationMirror) values.get(idx).getValue(); |
| 181 | + } else { |
| 182 | + mirror = AnnotationUtils.findAnnotationMirror(annotatedClass, GenerateRefinement.class); |
| 183 | + } |
169 | 184 |
|
170 | | - final List<? extends AnnotationValue> parameterMapping = find(generateRefinementMirror, "parameterMapping"); |
| 185 | + final List<? extends AnnotationValue> parameterMapping = find(mirror, "parameterMapping"); |
171 | 186 |
|
172 | 187 | for (ExecutableElement constructor : TypeUtils.getConstructors(annotatedClass)) { |
173 | 188 |
|
|
0 commit comments