在我的Grails应用程序中,有一个文件夹 grails-app / mongoDomain 。在这个文件夹中,在各种包中也有几个类。
我想为文件夹 grails-app / mongoDomain 中的所有类添加一个GDSL Defination方法,例如“save()”。
我成功地将此方法添加到单个类中,但是在 grails-app / mongoDomain 中添加所有类的方法?
。
。
我试过这样做,但它没有用..
def mongoDomainContext = context(pathRegexp: /.*grails-app\/mongoDomain.*/)
contributor(mongoDomainContext) {
method(name: 'save', type: 'void', params: [closure: { }])
}
但是上面的代码没有用,做正确的方法是什么?
。
。
问候
Kushal
答案 0 :(得分:3)
不幸的是,还没有这样的GDSL原语。在Griffon中,他们使用未记录的功能获得以下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)
}
}
}
}
它们在此类名称及其路径上匹配,您只需要第二部分,在电话会议中。
答案 1 :(得分: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
}
}
它工作就像一个魅力,感谢所有人,只是想分享给别人.. :)