7

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

我最好的猜测是我在某个地方遇到了缓存问题,但我不知道去哪里找。

4

3 回答 3

0

答案可能为时已晚,但过去 3 天我一直面临这个问题。没有多少清除 gwt-UnitCache 文件夹有帮助。终于发现问题了。oracle 没有选择的类有一个 gwt-ext 类的引用,我没有在我的模块定义(.gwt.xml 文件)中继承 gwt-ext。删除该引用解决了问题。因此,在您的课程中使用任何可能未在您的模块定义中引用或不属于其中的任何内容都可能导致您的课程不被 Oracle 选中。干杯!

于 2014-01-08T09:16:23.447 回答
0

正如 Mark Tielemans 在他的评论中所说,删除您的 gwt-UnitCache 目录(如果您使用 Eclipse,则应该位于项目的根目录)并重建。那应该为您解决问题。

于 2013-05-30T17:18:59.200 回答
0

缺少的类不能正确编译,并且会默默地失败。一个典型的原因是 super sources,否则正常的 java 编译已经编译失败了。

这个问题询问如何弄清楚在那个缺失的课程中哪条线路实际上是默默地失败了。

于 2017-04-28T07:54:43.480 回答