in xbean-finder/src/main/java/org/apache/xbean/finder/AnnotationFinder.java [831:876]
private Set<Field> findMetaAnnotatedFields(Class<? extends Annotation> annotation, Set<Field> fields, Set<String> seen) {
List<Info> infos = getAnnotationInfos(annotation.getName());
for (Info info : infos) {
String meta = info.getMetaAnnotationName();
if (meta != null) {
if (meta.equals(annotation.getName())) continue;
if (!seen.add(meta)) continue;
ClassInfo metaInfo = classInfos.get(meta);
Class<?> clazz;
try {
clazz = metaInfo.get();
} catch (ClassNotFoundException e) {
classesNotLoaded.add(metaInfo.getName());
continue;
}
findMetaAnnotatedFields((Class<? extends Annotation>) clazz, fields, seen);
} else if (info instanceof FieldInfo) {
FieldInfo fieldInfo = (FieldInfo) info;
ClassInfo classInfo = fieldInfo.getDeclaringClass();
try {
Class clazz = classInfo.get();
for (Field field : clazz.getDeclaredFields()) {
if (field.isAnnotationPresent(annotation)) {
fields.add(field);
}
}
} catch (ClassNotFoundException e) {
classesNotLoaded.add(classInfo.getName());
} catch (NoClassDefFoundError ncdfe) {
classesNotLoaded.add(classInfo.getName());
}
}
}
return fields;
}