2011-12-09 32 views
2

在我的Grails應用程序中,有一個文件夾grails-app/mongoDomain。在這個文件夾中,有幾個類也在各種包中。IDEA GDSL如何將方法定義添加到文件夾中的所有文件(類)?

我想爲文件夾中的所有類添加一個名爲「save()」的方法的GDSL定義grails-app/mongoDomain

我成功地將這種方法添加到單個類中,但是在所有類中添加了任何方法grails-app/mongoDomain ?? 。

我試着這樣做,但我以前不工作..

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

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

但上面的代碼我以前不工作,什麼是做正確的方法?



關注 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

這是它,我怎麼做它,它的工作原理,非常感謝「彼得格羅莫夫」提供的提示。

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 

    } 
} 

它的工作就像一個魅力,感謝所有,,只是想分享給別人.. :)

相關問題