GWT TypeOracle.getTypes不返回所有类型

时间:2013-05-07 13:35:02

标签: java gwt types code-generation

我有一个自定义生成器,只为我项目中的某些类生成代码。以下代码位于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
  • 问题只出现在某些人身上,但不会出现在相同的课程上
  • 重命名有问题的类似乎可以解决问题

我最好的猜测是我在某处有缓存问题,但我不知道在哪里看。

3 个答案:

答案 0 :(得分:0)

正如Mark Tielemans在他的评论中所说,删除你的gwt-UnitCache目录(如果你正在使用Eclipse,应该在项目的根目录下)并重建。这应该为你纠正这个问题。

答案 1 :(得分:0)

答案可能为时已晚,但过去3天我遇到了这个问题。没有多少清除gwt-UnitCache文件夹有帮助。终于找到了问题。没有被oracle拿起的类有一个gwt-ext类的引用,我没有在我的模块定义(.gwt.xml文件)中继承gwt-ext。删除该引用修复了该问题。因此,使用类中可能未在模块定义中引用或不属于其中的任何内容都可能导致Oracle无法获取您的类。干杯!

答案 2 :(得分:0)

T 他错过了课程并没有正确编译而且默默地失败了。典型的原因是超级源,因为否则正常的Java编译已经失败了编译。

This question asks how to figure out what line is actually failing silently inside that missing class.