ジェネレータを使用してクラスを作成しているときに、タイプのすべてのサブクラスを検出することができます。この手法は、たとえばGWT Showcaseソース(完全なコードを参照)にあります。
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();
私は似たようなことをしたいのですが、クラスを拡張する(またはインターフェースを実装する)代わりに
public class SomeWidget extends ContentWidget { ... }
、ウィジェットに注釈を付けることでこれを行うこともできますか?
@MyAnnotation(...)
public class SomeWidget extends Widget { ... }
そして、@ MyAnnotationで注釈が付けられているすべてのウィジェットを見つけますか?のような方法は見つかりませんでしたが、JAnnotationType.getAnnotatedTypes()
盲目なのかもしれません。
注:を使用して、 Google Reflectionsライブラリで動作させることができましたがreflections.getTypesAnnotatedWith(SomeAnnotation.class)
、代わりにGeneratorContextを使用することをお勧めします。これは、DevModeでアプリをリロードするときに非常にうまく機能するためです。