GWT TypeOracle.getTypes 不返回所有类型
Posted
技术标签:
【中文标题】GWT TypeOracle.getTypes 不返回所有类型【英文标题】:GWT TypeOracle.getTypes does not return all types 【发布时间】:2013-05-01 11:44:37 【问题描述】:我有一个自定义生成器,它只为我的项目中的某些类生成代码。以下代码位于generate
方法的开头,并将我需要处理的所有类放在clazzes
列表中
TypeOracle oracle = context.getTypeOracle();
JClassType markerInterfaceType = oracle.findType(MY_PARENT_CLASS.class.getName());
List<JClassType> clazzes = new ArrayList<JClassType>();
for (JClassType classType : oracle.getTypes())
if (!classType.equals(markerInterfaceType)
&& classType.isAssignableTo(markerInterfaceType))
clazzes.add(classType);
这段代码已经一年多没有改变了,但是从上周开始,生成器似乎没有考虑到一些类。
经过一番挖掘,我发现这些类甚至不在oracle.getTypes()
返回的列表中
oracle.findType(MISSING_CLASS.class.getName())
返回null
这个问题只出现在某些人身上,而不是在同一个班级里
重命名有问题的类似乎可以解决问题
我最好的猜测是我在某个地方遇到了缓存问题,但我不知道去哪里找。
【问题讨论】:
您是否尝试过删除 gwt-UnitCache 文件夹的内容?对于我来说,它通常有助于修复像这样看似奇怪的错误。另外,您是否有一些缺失类的示例名称?由于重命名它们会有所帮助,因此在缓存相关问题旁边,这也可能与名称相关。 【参考方案1】:正如 Mark Tielemans 在他的评论中所说,删除您的 gwt-UnitCache 目录(如果您使用 Eclipse,则应该位于项目的根目录)并重建。这应该会为您解决问题。
【讨论】:
【参考方案2】:答案可能为时已晚,但过去 3 天我一直面临这个问题。没有多少清除 gwt-UnitCache 文件夹有帮助。终于发现问题了。 oracle 没有选择的类有一个 gwt-ext 类的引用,我没有在我的模块定义(.gwt.xml 文件)中继承 gwt-ext。删除该引用解决了问题。因此,在您的课程中使用任何可能未在您的模块定义中引用或不属于您的模块定义的任何内容都可能导致您的课程不被 Oracle 选中。干杯!
【讨论】:
【参考方案3】:T他缺少的类没有正确编译,并且默默地失败了。一个典型的原因是超级源,否则正常的java编译已经编译失败了。
This question asks how to figure out what line is actually failing silently inside that missing class.
【讨论】:
这基本上不是@anand-saha 已经说过的吗? (虽然可以改写/改进) 是的。该答案归咎于缺少继承声明 - 这也可能是原因,而不是超级来源。并且可能还有十几个其他潜在原因导致该类无法正确编译。以上是关于GWT TypeOracle.getTypes 不返回所有类型的主要内容,如果未能解决你的问题,请参考以下文章
gwt-phonegap FileReader 不工作(iOS)