0

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

MyEntity x = MyEntity.get(1)

据我了解,我应该使用上下文ctypefor 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为实际的类名?不是“对象”,而是“我的实体”

PS 有没有关于 GroovyDSL 的文档,JavaDoc 描述contributor

4

1 回答 1

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' 甚至 '?' 范围。因此,您可以添加一些处理这些情况的代码。

于 2013-01-21T08:19:26.743 回答