Groovy编译以`java.lang.StackOverflowError`结尾

时间:2015-04-16 08:14:23

标签: java maven groovy compilation stack-overflow

我正在使用maven和groovy-eclipse-compiler(版本2.9.2-01),即使构建结束正常,我也会在控制台中获得以下输出:

[INFO]
[INFO] --- maven-compiler-plugin:3.2:testCompile (default-testCompile) @ my-project ---
[INFO] Changes detected - recompiling the module!
[INFO] Using Groovy-Eclipse compiler to compile both Java and Groovy files
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] my-project ......................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 39.358 s
[INFO] Finished at: 2015-04-16T10:05:13+02:00
[INFO] Final Memory: 71M/1234M
[INFO] ------------------------------------------------------------------------
---------------------------------------------------

... some irrelevant info ...

---------------------------------------------------
Exception in thread "main" java.lang.StackOverflowError
        at org.codehaus.groovy.ast.ClassNode.isArray(ClassNode.java:1467)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:275)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:316)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:276)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:316)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:276)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:316)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:276)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:316)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:276)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:316)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:276)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:316)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:276)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:316)
        at org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse(GenericsUtils.java:276)

... this continues on and on ...

当我在Idea中打开groovy文件时,我在编译期间遇到了同样的错误;但是,代码分析不会报告任何错误。

任何想法可能出错?

修改

我发现以下类文件(ArraysInListComparator.groovy)会导致问题(请注意,使用List或任何其他通用类并不重要)

class ArraysInListComparator<T> implements Comparator<List<T[]>> {
    @Override
    int compare(final List<T[]> o1, final List<T[]> o2) {
        return 0
    }
}

但是,如果通用数组直接在比较器中,它可以正常工作:

class ArraysComparator<T> implements Comparator<T[]> {
    @Override
    public int compare(T[] c1, T[] c2) {
        return 0
    }
}

当我将这些类重写为纯java类(.java文件)时,它们都被编译而没有任何错误。

1 个答案:

答案 0 :(得分:0)

您显示的错误是旧版groovy版本的泛型处理中的错误。 correctToGenericsSpecRecurse不应该无休止地迭代。我不确定我是否已经看到ClassNode#isArray的错误作为入口点,但我很确定它本质上是我记得的错误。这意味着它不太可能是groovy-eclipse编译器中的错误。更新将有助于..或你做了什么,并在Java中拥有该文件。我无法回答的是为什么编译后会有编译。