我正在使用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?
答案 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甚至'?'参数。因此,您可以添加一些处理这些情况的代码。