153 private class AnnotationSetScanner extends 154 ElementScanningIncludingTypeParameters<Set<Element>, TypeElement> { 155 // Insertion-order preserving set 156 private Set<Element> annotatedElements = new LinkedHashSet<>(); 157 158 AnnotationSetScanner(Set<Element> defaultSet) { 159 super(defaultSet); 160 } 161 162 @Override @DefinedBy(Api.LANGUAGE_MODEL) 163 public Set<Element> scan(Element e, TypeElement annotation) { 164 for (AnnotationMirror annotMirror : eltUtils.getAllAnnotationMirrors(e)) { 165 if (annotation.equals(mirrorAsElement(annotMirror))) { 166 annotatedElements.add(e); 167 break; 168 } 169 } 170 e.accept(this, annotation); 171 return annotatedElements; 172 } 173 } 174 175 // Could be written as a local class inside getElementsAnnotatedWithAny 176 private class AnnotationSetMultiScanner extends 177 ElementScanningIncludingTypeParameters<Set<Element>, Set<TypeElement>> { 178 // Insertion-order preserving set 179 private Set<Element> annotatedElements = new LinkedHashSet<>(); 180 181 AnnotationSetMultiScanner(Set<Element> defaultSet) { 182 super(defaultSet); 183 } 184 185 @Override @DefinedBy(Api.LANGUAGE_MODEL) 186 public Set<Element> scan(Element e, Set<TypeElement> annotations) { 187 for (AnnotationMirror annotMirror : eltUtils.getAllAnnotationMirrors(e)) { 188 if (annotations.contains(mirrorAsElement(annotMirror))) { 189 annotatedElements.add(e); 190 break; 191 } 192 } 193 e.accept(this, annotations); 194 return annotatedElements; 195 } 196 } 197 198 private static abstract class ElementScanningIncludingTypeParameters<R, P> 199 extends ElementScanner9<R, P> { 200 201 protected ElementScanningIncludingTypeParameters(R defaultValue) { 202 super(defaultValue); 203 } 204 205 @Override @DefinedBy(Api.LANGUAGE_MODEL) 206 public R visitType(TypeElement e, P p) { 207 // Type parameters are not considered to be enclosed by a type 208 scan(e.getTypeParameters(), p); 209 return super.visitType(e, p); 210 } 211 212 @Override @DefinedBy(Api.LANGUAGE_MODEL) 213 public R visitExecutable(ExecutableElement e, P p) { 214 // Type parameters are not considered to be enclosed by an executable 215 scan(e.getTypeParameters(), p); | 153 private class AnnotationSetScanner extends 154 ElementScanningIncludingTypeParameters<Set<Element>, TypeElement> { 155 // Insertion-order preserving set 156 private Set<Element> annotatedElements = new LinkedHashSet<>(); 157 158 AnnotationSetScanner(Set<Element> defaultSet) { 159 super(defaultSet); 160 } 161 162 @Override @DefinedBy(Api.LANGUAGE_MODEL) 163 public Set<Element> scan(Element e, TypeElement annotation) { 164 for (AnnotationMirror annotMirror : eltUtils.getAllAnnotationMirrors(e)) { 165 if (annotation.equals(mirrorAsElement(annotMirror))) { 166 annotatedElements.add(e); 167 break; 168 } 169 } 170 e.accept(this, annotation); 171 return annotatedElements; 172 } 173 174 @Override @DefinedBy(Api.LANGUAGE_MODEL) 175 public Set<Element> visitModule(ModuleElement e, TypeElement annotation) { 176 // Do not scan a module 177 return annotatedElements; 178 } 179 180 @Override @DefinedBy(Api.LANGUAGE_MODEL) 181 public Set<Element> visitPackage(PackageElement e, TypeElement annotation) { 182 // Do not scan a package 183 return annotatedElements; 184 } 185 } 186 187 // Could be written as a local class inside getElementsAnnotatedWithAny 188 private class AnnotationSetMultiScanner extends 189 ElementScanningIncludingTypeParameters<Set<Element>, Set<TypeElement>> { 190 // Insertion-order preserving set 191 private Set<Element> annotatedElements = new LinkedHashSet<>(); 192 193 AnnotationSetMultiScanner(Set<Element> defaultSet) { 194 super(defaultSet); 195 } 196 197 @Override @DefinedBy(Api.LANGUAGE_MODEL) 198 public Set<Element> scan(Element e, Set<TypeElement> annotations) { 199 for (AnnotationMirror annotMirror : eltUtils.getAllAnnotationMirrors(e)) { 200 if (annotations.contains(mirrorAsElement(annotMirror))) { 201 annotatedElements.add(e); 202 break; 203 } 204 } 205 e.accept(this, annotations); 206 return annotatedElements; 207 } 208 209 @Override @DefinedBy(Api.LANGUAGE_MODEL) 210 public Set<Element> visitModule(ModuleElement e, Set<TypeElement> annotations) { 211 // Do not scan a module 212 return annotatedElements; 213 } 214 215 @Override @DefinedBy(Api.LANGUAGE_MODEL) 216 public Set<Element> visitPackage(PackageElement e, Set<TypeElement> annotations) { 217 // Do not scan a package 218 return annotatedElements; 219 } 220 } 221 222 private static abstract class ElementScanningIncludingTypeParameters<R, P> 223 extends ElementScanner9<R, P> { 224 225 protected ElementScanningIncludingTypeParameters(R defaultValue) { 226 super(defaultValue); 227 } 228 229 @Override @DefinedBy(Api.LANGUAGE_MODEL) 230 public R visitType(TypeElement e, P p) { 231 // Type parameters are not considered to be enclosed by a type 232 scan(e.getTypeParameters(), p); 233 return super.visitType(e, p); 234 } 235 236 @Override @DefinedBy(Api.LANGUAGE_MODEL) 237 public R visitExecutable(ExecutableElement e, P p) { 238 // Type parameters are not considered to be enclosed by an executable 239 scan(e.getTypeParameters(), p); |