1

我有一个使用 groovy-eclipse-compiler 编译 groovy 类的 maven 项目。这个项目从命令行运行良好(通过'mvn test')。但是当我尝试在 Idea 内部运行测试时,我得到了一个 groovy 编译器错误,在测试甚至可以运行之前产生了堆栈跟踪。

我附上了整个项目的链接,我还将向 Intellij 人员提交一个错误,但我希望这个网站上的某个人已经看到并找到了解决这个问题的方法。
如果 Intellij 回复我,我将在此处发布解决方案。

项目 zip 文件可在此处获得: http: //dl.dropbox.com/u/9940067/groovy.compiler.bug.zip

无论如何,我将问题缩小到一类,我可以稍微调整以诱导或隐藏错误。这里是:

    package com.other

    class FooProperties extends Properties {

      FooProperties(File eCeNSHome) {
        assert eCeNSHome != null
        new File(eCeNSHome, "properties").withInputStream { stream -> load(stream) }
      }

      String getString(String key, String defaultValue = null) {
      }

      /**
       * @param key the property name
       * @return the property integer value if it exists or the defaultValue if not
       */
      int getInt(String key, int defaultValue = 0) {
        try {
          Integer.parseInt(getProperty(key))
        } catch(final NumberFormatException e) {
          return defaultValue
        }
      }
    }

如果我用类似的东西改变下面的getInt方法

int getInt(String key, int defaultValue = 0) { return 100 }

然后 Groovy 编译器错误就消失了。如果我将代码保留在错误表面上方的原始代码中(带有下面的堆栈跟踪。)。非常感谢任何帮助或建议。

PS:我尝试搜索类似的错误,我发现了一个已修复的编译器错误的报告,但特征与我的略有不同。

http://jira.codehaus.org/browse/GRECLIPSE-629

PPS:运行 'mvn test' 没有找到任何测试。但这不是问题。通过命令行,我们看到类至少可以正常编译(不会触发 groovy 编译器错误。)

堆栈跟踪

漏洞!源单元“/home/chris/cybergrid/ecens-perception-engine/src/main/groovy/com/other/FooProperties.groovy”阶段“类生成”中的异常 java.lang.Object 的 ClassNode#getTypeClass 被调用类型类在 org.codehaus.groovy.classgen.asm.BytecodeHelper.box(BytecodeHelper.java:559) 在 org.codehaus 的 org.codehaus.groovy.ast.ClassNode.getTypeClass(ClassNode.java:1311) 中设置。 org.codehaus.groovy.classgen.asm.CallSiteWriter.makeCallSite(CallSiteWriter.java:302) 上的 groovy.classgen.asm.OperandStack.box(OperandStack.java:170)。 makeCall(InvocationWriter.java:182) 在 org.codehaus.groovy.classgen.asm.InvocationWriter.makeCall(InvocationWriter.java:87) 在 org.codehaus.groovy.classgen.asm.InvocationWriter。

4

2 回答 2

0

我没有解决这个问题,但我确实找到了解决方法。我有类似的代码会产生相同的异常。如果您将 defaultValue 从

int defaultValue = 0

def defaultValue = 0

错误应该消失

这似乎是原始类型的问题。

您也可以尝试使用 defaultValue 和 Integer 而不是 int。

于 2012-06-11T04:33:32.170 回答
0

修复方法是将 groovy 版本从 1.8.0 更改为 1.8.3。你可以在我最初上传的项目 zip 上试试这个。

于 2012-06-13T04:25:11.293 回答