// Can be called anytime
mm.enter( registrationDebug(), "getClassAnalyzer", cls,
annotationClass ) ;
try {
final EvaluatedClassAnalyzer clsca = new EvaluatedClassAnalyzer( cls ) ;
final EvaluatedClassDeclaration annotatedClass = Algorithms.getFirst(
clsca.findClasses( forAnnotation( annotationClass,
EvaluatedClassDeclaration.class ) ),
new Runnable() {
public void run() {
throw Exceptions.self.noAnnotationFound(
annotationClass.getName(), cls.name() ) ;
}
} ) ;
mm.info( registrationDebug(), "annotatedClass = " + annotatedClass ) ;
final List<EvaluatedClassDeclaration> classes =
new ArrayList<EvaluatedClassDeclaration>() ;
classes.add( cls ) ;
// XXX Should we construct a union of all @IncludeSubclass contents?
final IncludeSubclass incsub = getFirstAnnotationOnClass(
cls, IncludeSubclass.class ) ;
if (incsub != null) {
for (Class<?> klass : incsub.value()) {
EvaluatedClassDeclaration ecd =
(EvaluatedClassDeclaration)TypeEvaluator.getEvaluatedType(klass) ;
classes.add( ecd ) ;
mm.info( registrationDebug(), "included subclass", klass ) ;
}
}
EvaluatedClassAnalyzer ca = new EvaluatedClassAnalyzer( classes ) ;
return new Pair<EvaluatedClassDeclaration,
EvaluatedClassAnalyzer>( annotatedClass, ca ) ;
} finally {
mm.exit( registrationDebug() ) ;