Я пытался определить динамический метод, используя возможности сценариев GroovyDSL в IntelliJ. Руководство по началу работы «Разработка сценариев для среды DSL» дает хорошее представление о том, как начать работу с этим. Определение динамического метода в моем DSL более сложное, чем в примере, и я не совсем уверен, как это сделать. Вы можете представить, что он работает как методы динамического поиска в Grails, за исключением того, что вы можете комбинировать произвольное количество критериев с логическим ключевым словом And
в любом порядке. Все ключевые слова не определены в классе, для которого я вызываю метод, но могут быть определены в файле GDSL. Метод всегда начинается с submitTransactionWith
. Вот пример:
clientDSL.submitTransactionWithCriteria1AndCriteria2AndCriteria3(arg1, arg2, arg3)
Я начал с этого, но он работает только для одного критерия и не учитывает, что вы можете комбинировать несколько критериев в любом порядке.
def ctx = context(ctype: "my.client.ClientDSL")
contributor(ctx) {
['Criteria1', 'Criteria2', 'Criteria3'].each {
method name: "submitTransactionWith${it}",
type: 'java.util.Map',
params: [args: 'java.util.Collection']
}
}
Мне было интересно, есть ли специальная поддержка для такого динамического метода. Мне также было бы интересно узнать, как DSL для Grails внутренне моделируется в IntelliJ.