IntelliJ中使用GroovyDSL进行动态方法定义

时间:2011-09-04 13:21:05

标签: grails ide groovy intellij-idea dsl

我试图使用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感兴趣。

1 个答案:

答案 0 :(得分:1)

Grails DSL位于${idea.home}/plugins/GrailsGriffon/lib/standardDsls

它可能会帮助您解决问题。他们提前创建所有方法名称组合的字符串数组,然后在他们的贡献者中迭代它们,使用字符串数组创建一个方法。