IDEA GDSL Как добавить определение метода ко всем файлам (классам) в папке? - PullRequest
2 голосов
/ 09 декабря 2011

В моем приложении Grails есть папка grails-app / mongoDomain . В этой папке есть несколько классов, которые тоже в разных пакетах.

Я хочу добавить определение GDSL для метода скажем "save ()" для всех классов внутри папки grails-app / mongoDomain .

Мне удалось добавить этот метод в один класс, но любой метод можно добавить во все классы в grails-app / mongoDomain ?? .
.
Я пытался сделать это, но это не сработало ..

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

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

Но приведенный выше код не сработал. Каков правильный способ сделать это ??

.
.
С уважением Kushal

Ответы [ 2 ]

3 голосов
/ 09 декабря 2011

К сожалению, такого примитива 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)
        }
    }
}

}

Они совпадают как по имени класса, так и по его пути, вам нужна только вторая часть внутри участниказвоните.

2 голосов
/ 10 декабря 2011

вот оно, как я это сделал, и оно работает, большое спасибо "Петру Громову" за подсказку.

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

    }
}

Это сработало, как шарм, Спасибо всем, Просто хотел поделиться для других ..:)

...