0

IntelliJ に GroovyDSL を使用しています。同じクラスのインスタンスを返す静的メソッドについて説明したいと思います。次のような方法です。

MyEntity x = MyEntity.get(1)

私が理解しているように、ctypefor でcontext を使用する必要があります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 を説明する JavaDoc である GroovyDSL に関するドキュメントはあります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 に答える