【问题标题】:Dynamic method definition with GroovyDSL in IntelliJ在 IntelliJ 中使用 GroovyDSL 定义动态方法
【发布时间】:2011-09-04 13:21:05
【问题描述】:

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

【问题讨论】:

标签: grails ide groovy intellij-idea dsl


【解决方案1】:

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

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

【讨论】:

  • 看起来他们没有在 GDSL 中定义动态查找器,但感谢您指出它。
猜你喜欢
  • 2019-07-23
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多