GWT生成器 - 确定是否在任何地方引用类

时间:2011-03-21 08:23:26

标签: gwt reflection

我有GWT项目,它使用Generators来创建光动态反射对象。

我想知道是否有人知道如何确定在所有EntryPoints开始的依赖关系树中是否引用了特定的类。如果我能做到这一点,我可以避免为那些永远不会被使用的类生成反射数据。

我的理解是,当GWT进行编译时,它执行类似的检查,以便它可以减少已编译代码的总大小,但我无法在TypeOracle中找到任何相关方法或类似的东西。

1 个答案:

答案 0 :(得分:0)

这是一种完成你所获得的东西的间接方法。我相信每个GWT模块都完全打包成常规的java包。你可以使用

TypeOracle.findPackage(String pkgName)

获取JPackage实例,并在该实例上使用findType(String typeName)来查看该包中是否存在类型。如果存在,它可能在某个文件中被引用,而GWT将编译它。

此方法还有getPackages(),它返回此类型oracle已知的所有包的数组 - 因此可以为GWT编译器访问。

JPackage[] getPackages()

您可以在每个包上迭代findType()以查找是否要编译该类型。

最佳方法是定义自定义注释,并将您想要生成反射代码的所有类列入白名单。您可以使用它来注释所需的类,并在为其生成代码之前检查是否存在注释。

我最喜欢的是遵循注释的命名约定,(我一起做了),因此保持白名单,并使约定(通常是REGEX)成为团队想要的“设置”。