我试图使用IntelliJ中的GroovyDSL脚本功能来定义动态方法。入门指南"Scripting IDE for DSL awareness"为您提供了如何开始使用它的好主意。我的DSL中的动态方法定义比示例更复杂,但我不太清楚如何构建它。您可以想象它在Grails中像dynamic finder methods一样工作,除了您可以按任意顺序将任意数量的条件与布尔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']
}
}
我想知道是否对这种动态方法有特殊支持。我也对如何在IntelliJ内部建模Grails的DSL感兴趣。
答案 0 :(得分:1)
Grails DSL位于${idea.home}/plugins/GrailsGriffon/lib/standardDsls
它可能会帮助您解决问题。他们提前创建所有方法名称组合的字符串数组,然后在他们的贡献者中迭代它们,使用字符串数组创建一个方法。