Вложенные фабрики создают странный цикл в Groovy Builder
Я пытаюсь реализовать DSL с Groovy, который анализирует следующий скрипт Groovy
sched_default = schedule {
actions {
parallel {
command(host: server1, command: "echo 'parallel' >> output.txt")
sequence {
command(host: server1, command: "echo 'inner sequence' >> output.txt")
command(host: server2, command: "echo 'inner sequence' >> output.txt")
}
}
}
}
Поэтому я делегирую замыкание (переданное при вызове расписания) пользовательскому ScheduleBuilder, где зарегистрированы соответствующие фабрики для соответствующих методов.
Если я запускаю какие-либо из них изолированно, они работают как шарм. Тем не менее, вложение этих методов приводит к странному циклу и, наконец, к исключению.
Некоторые выходные данные трассировки указывают на то, что параллельный блок никогда не закрывается, но внутренний блок последовательности зацикливается до возникновения исключения.
ParallelFactory.newInstance
CommandFactory.newInstance
CommandFactory.onNodeCompleted
CommandFactory.newInstance
CommandFactory.onNodeCompleted
SequenceFactory.newInstance
CommandFactory.newInstance
CommandFactory.onNodeCompleted
CommandFactory.newInstance
CommandFactory.onNodeCompleted
SequenceFactory.onNodeCompleted
[...repeated for seven times in total...]
SequenceFactory.newInstance
CommandFactory.newInstance
CommandFactory.onNodeCompleted
CommandFactory.newInstance
CommandFactory.onNodeCompleted
SequenceFactory.onNodeCompleted
Caught: groovy.lang.MissingMethodException: No signature of method: NestedTest.actions() is applicable for argument types: (NestedTest$_run_closure3$_closure11) values: [NestedTest$_run_closure3$_closure11@7e7b159b]
groovy.lang.MissingMethodException: No signature of method: NestedTest.actions() is applicable for argument types: (NestedTest$_run_closure3$_closure11) values: [NestedTest$_run_closure3$_closure11@7e7b159b]
at NestedTest$_run_closure3.doCall(NestedTest.groovy:77)
at NestedTest$_run_closure3.doCall(NestedTest.groovy)
at Test.schedule(Test.groovy:110)
Я действительно не могу объяснить это поведение и не знаю, как дальше отлаживать это сообщение об ошибке, поэтому любая помощь очень ценится!