我有GWT项目,它使用Generators来创建光动态反射对象。
我想知道是否有人知道如何确定在所有EntryPoints开始的依赖关系树中是否引用了特定的类。如果我能做到这一点,我可以避免为那些永远不会被使用的类生成反射数据。
我的理解是,当GWT进行编译时,它执行类似的检查,以便它可以减少已编译代码的总大小,但我无法在TypeOracle中找到任何相关方法或类似的东西。
答案 0 :(得分:0)
这是一种完成你所获得的东西的间接方法。我相信每个GWT模块都完全打包成常规的java包。你可以使用
TypeOracle.findPackage(String pkgName)
获取JPackage实例,并在该实例上使用findType(String typeName)来查看该包中是否存在类型。如果存在,它可能在某个文件中被引用,而GWT将编译它。
此方法还有getPackages(),它返回此类型oracle已知的所有包的数组 - 因此可以为GWT编译器访问。
JPackage[] getPackages()
您可以在每个包上迭代findType()
以查找是否要编译该类型。
最佳方法是定义自定义注释,并将您想要生成反射代码的所有类列入白名单。您可以使用它来注释所需的类,并在为其生成代码之前检查是否存在注释。
我最喜欢的是遵循注释的命名约定,(我一起做了),因此保持白名单,并使约定(通常是REGEX)成为团队想要的“设置”。