in xbean-finder/src/main/java/org/apache/xbean/finder/AnnotationFinder.java [363:408]
protected void linkParent(ClassInfo classInfo) {
if (classInfo.superType == null) return;
if (isJvm(classInfo.superType)) return;
ClassInfo parentInfo = classInfo.superclassInfo;
if (parentInfo == null) {
parentInfo = classInfos.get(classInfo.superType);
if (parentInfo == null) {
// best scanning we can do, try it first
readClassDef(classInfo.superType);
parentInfo = classInfos.get(classInfo.superType);
if (parentInfo == null) {
// parentInfo == null means readClassDef fails so clean up error and retry
classesNotLoaded.remove(classInfo.superType);
try {
if (classInfo.get() != null) { // call get() to ensure clazz got a change to be loaded
readClassDef(((Class<?>) classInfo.clazz).getSuperclass());
parentInfo = classInfos.get(classInfo.superType);
}
} catch (final ClassNotFoundException e) {
// no-op
} catch (final Throwable e) {
// no-op
}
}
if (parentInfo == null) return;
linkParent(parentInfo);
}
classInfo.superclassInfo = parentInfo;
}
synchronized (parentInfo.subclassInfos) {
if (!parentInfo.subclassInfos.contains(classInfo)) {
parentInfo.subclassInfos.add(classInfo);
}
}
}