2011-12-09 8 views
2

私のGrailsアプリケーションには、フォルダgrails-app/mongoDomainがあります。このフォルダには、さまざまなパッケージにもいくつかのクラスがあります。IDEA GDSLフォルダ内のすべてのファイル(クラス)にメソッド定義を追加する方法は?

メソッドのGDSL定義を追加したいと思います。grails-app/mongoDomainというフォルダ内のすべてのクラスに "save()"を追加します。

このメソッドを1つのクラスに追加できましたが、すべてのクラスを追加するメソッドはすべてgrails-app/mongoDomain ?? 。

私はこれをやってみましたが、それは

def mongoDomainContext = context(pathRegexp: /.*grails-app\/mongoDomain.*/) 

contributor(mongoDomainContext) { 
    method(name: 'save', type: 'void', params: [closure: { }]) 
} 

しかし、上記のコードは、それを行うための正しい方法は何ですか、加工したdid't ..働いたdid't?



よろしくお願いします。 Kushal

答えて

3

残念ながら、このようなGDSLプリミティブはありません。グリフォンでは、彼らは文書化されていない機能を使用して、次のGDSLフラグメントを持っている:

['Controller', 'Model', 'View', 'Service'].each { type -> 
String artifactPath = type.toLowerCase() + 's' 
contributor(ctype: PsiJavaPatterns.psiClass().withName(PlatformPatterns.string().matches(/.*${type}/))) { 
    def path = psiClass.containingFile.originalFile.virtualFile.path 
    if (path =~ ".*/*griffon-app/${artifactPath}/.*") { 
     delegatesTo(findClass("griffon.core.Griffon${type}")) 

     if (type == 'View') { 
      addNodeContributions(delegate) 
     } 
    } 
} 

}

彼らは、クラス名と、ここでそのパスの両方で一致し、あなたはconributorコール内で、唯一の第二部を必要としています。

2

ここはそれです、私はそれをやったのですが、"Peter Gromov"ヒントを提供してくれてありがとう。

def mongoContext = context(
     ctype: PsiJavaPatterns.psiClass().withName(PlatformPatterns.string().matches(/.*/)) 
) 

contributor(mongoContext) { 
    def path = "" 
    try { 
     path = psiClass.containingFile.originalFile.virtualFile.path 
    } catch (Exception e) {/*This is to prevent any non Class null matches*/} 
    if (path =~ ".*/*grails-app/mongoDomain/.*")//Matches Directory 
    { 
     //Code Here to add methods/Properties etc 

    } 
} 

それは...ただ、他人のために共有したいと思った,,、魔法のようにすべてのおかげで働いた:)

関連する問題