groovy скрипт: перехватить метод run () всех скриптов - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь перехватить все методы run () в groovy скрипте. Моя текущая настройка - IntelliJ с плагином groovy и зависимостью от codehaus groovy -all Ниже приведен метакласс, который я добавил для Script, где я пытаюсь перехватить run (), выполняемую GroovyShell. Поток выполнения кода, который я вижу во время отладки: GroovyMain> GroovyShell> Script. Теперь приведенный ниже MetaClass для класса Script выполняется, когда экземпляр Script инициализируется, отлично. Но по какой-то причине метод run или invoke никогда не запускается, если это не сценарий groovy, который я вызываю из исходного сценария. Я не уверен, что это проблема с classLoaders, скорее всего, я просто не знаю, как это работает.


class ScriptMetaClass extends DelegatingMetaClass {
    {
        System.out.println(this.getClass().getName() + "STATIC")
    }

    ScriptMetaClass(MetaClass metaClass) {
        super(metaClass)
        System.out.println(this.getClass().getName() + "MetaClass")
    }
    ScriptMetaClass(Class theClass) {
        super(theClass)
        System.out.println(this.getClass().getName() + "Class")
    }

    @Override //tested with and without ovveride
    def invokeMethod(String name, Object args) {
        System.out.println(name)
    }

    def invokeMethod(String name) {
        System.out.println(name)
    }
    
    def run(){
        System.out.println("RNU METHOD")
    }

}
...