2013-01-14 60 views
0

我使用GroovyDSL for IntelliJ,我想描述一個靜態方法,該方法返回相同類的實例。這是一個方法,如:IntelliJ GroovyDSL靜態方法

MyEntity x = MyEntity.get(1) 

按我的理解,我應該使用情境與ctypejava.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?

回答

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'甚至'?'參數。所以你可以添加一些處理這些情況的代碼。