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()返回的列表中

那些被忽略的类不是新创建的类(有些保持几个月不变) 据我所知,没有办法区分将被忽略的类与任何其他类 我们的 gwt 版本没有升级(我们中的一些人使用 2.5.0,其他人使用 2.5.1) 这些类使用的包也没有升级 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)

GWT/GAE - 不包括 .symbolMap 资源文件

运行时异常后 GWT RPC 调用不回滚事务

从GWT 2.7更新到2.8.1后不兼容的RemoteServiceException

Gwt中不兼容的RemoteService异常?

GWT-RPC 和不可变传输对象