Durante la creazione delle classi utilizzando Generators, è possibile scoprire tutte le sottoclassi di un tipo. Potete trovare questa tecnica, ad esempio nella fonte Showcase GWT (vedi full code):È possibile trovare tutte le classi annotate con @MyAnnotation usando GWT GeneratorContext?
JClassType cwType = null;
try {
cwType = context.getTypeOracle().getType(ContentWidget.class.getName());
} catch (NotFoundException e) {
logger.log(TreeLogger.ERROR, "Cannot find ContentWidget class", e);
throw new UnableToCompleteException();
}
JClassType[] types = cwType.getSubtypes();
Vorrei fare qualcosa di simile, ma invece di estendere una classe (o di implementazione di un'interfaccia)
public class SomeWidget extends ContentWidget { ... }
, potrei farlo anche con annotando Widget?
@MyAnnotation(...)
public class SomeWidget extends Widget { ... }
E quindi trovare tutti i widget annotati con @MyAnnotation? Non sono riuscito a trovare un metodo come JAnnotationType.getAnnotatedTypes()
, ma forse sono solo cieco?
Nota: Sono stato in grado di farlo funzionare con la libreria Google Reflections, utilizzando reflections.getTypesAnnotatedWith(SomeAnnotation.class)
, ma io preferisco usare il GeneratorContext invece, soprattutto perché questo funziona molto meglio quando ricaricare l'applicazione in DevMode.
+1, che funziona decisamente, e non ho considerato questo approccio. È una specie di metodo a forza bruta (che non importa troppo dato che nessuno avrà milioni di tipi). Accetterò volentieri la tua risposta, se non esiste una soluzione predefinita per questo. –
Sembra una forza bruta dal punto di vista della maggior parte di Java, ma all'interno del percorso sorgente non sarà così male. Inoltre, questo è ciò che dovrà fare anche la funzione nella libreria di Google Reflections: trova e guarda tutte le classi attualmente sul classpath. –