Вызов замыкания от другого при использовании @CompileStatic
При неявном вызове замыкания из другого замыкания в @CompileStatic вызывающая сторона каким-то образом входит в рекурсивный цикл. Можете ли вы обнаружить проблему с кодом или это проблема с Groovy:
import groovy.transform.CompileStatic
@CompileStatic
class Main {
static main(args) {
TestClass testclass = new TestClass()
testclass.foo()
//testclass.bar() // compile error for closure with @CompileStatic
testclass.bar.call() // compiles and works fine
}
}
@CompileStatic
class TestClass {
void foo () {
println('In foo')
bar() // inside a method -- works fine
}
Closure bar = {
println('In bar')
//baz() // What's going on here?? It compiles, but instead
// of calling baz, this recurses on itself (seemingly)
baz.call() // this works fine
}
Closure baz = {
println('In baz')
}
}
[Groovy версия: 2.4.5]
Примечание. В этом вопросе SO обсуждается аналогичная проблема, но связанная с ней проблема Groovy говорит о том, что она исправлена.