IntelliJ GroovyDSL用于静态方法

时间:2013-01-14 06:03:04

标签: groovy intellij-idea groovydsl

我正在使用GroovyDSL for IntelliJ,我想描述一个静态方法,它返回同一个类的实例。这是一种方法:

MyEntity x = MyEntity.get(1)

据我了解,我应该使用ctype的上下文作为java.lang.Class。但我不知道如何指定返回类型,目前我只是将其指定为java.lang.Object

def domainCtx = context(
        ctype: 'java.lang.Class'
)
contributor([domainCtx]) {
    method name: 'get',
           params: [id: 'long'],
           type: 'java.lang.Object'
}

问题:如何将type设置为实际的类名?不是'对象',而是'MyEntity'

PS是否有任何关于GroovyDSL的文档,一个描述contributor的JavaDoc?

1 个答案:

答案 0 :(得分:2)

使用类似的东西

private String extractParameter(def type) {
  def parameters = type.parameters
  if (!parameters || parameters.length != 1) return 'java.lang.Object'
  return parameters[0].canonicalText
}

contributor(ctype:'java.lang.Class') {
    method(type:extractParameter(psiType), name: 'create')
}

'psiType'属性在您的情况下具有'com.intellij.psi.PsiClassType'类型。它有'getParameters()'方法,它返回泛型参数或类型。 'getCanonicalText()'返回类型的规范表示(带有泛型的限定类名)。

在某些情况下java.lang.Class可以有'?延伸MyEntity甚至'?'参数。因此,您可以添加一些处理这些情况的代码。