in xbean-finder/src/main/java/org/apache/xbean/finder/AnnotationFinder.java [770:815]
private Set<Method> findMetaAnnotatedMethods(Class<? extends Annotation> annotation, Set<Method> methods, 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;
}
findMetaAnnotatedMethods((Class<? extends Annotation>) clazz, methods, seen);
} else if (info instanceof MethodInfo && !((MethodInfo) info).isConstructor()) {
MethodInfo methodInfo = (MethodInfo) info;
ClassInfo classInfo = methodInfo.getDeclaringClass();
try {
Class clazz = classInfo.get();
for (Method method : clazz.getDeclaredMethods()) {
if (method.isAnnotationPresent(annotation)) {
methods.add(method);
}
}
} catch (ClassNotFoundException e) {
classesNotLoaded.add(classInfo.getName());
} catch (NoClassDefFoundError ncdfe) {
classesNotLoaded.add(classInfo.getName());
}
}
}
return methods;
}