Трассировка в Groovy после запуска каждого метода/функции

У меня тот же вопрос, что и в В Groovy есть ли способ украсить каждый класс, чтобы добавить трассировку? но этому ответу уже несколько лет, поэтому я хотел знать, есть ли сейчас лучший и более простой способ выполнить какой-либо код до, после или вокруг выполнения методов. Я бы предпочел что-то с аннотациями вроде

@TraceLog
class Foo {
   def bar() {
       println "in bar"
   }
}

or

class Foo { 
   @TraceLog
   def bar() {
       println "in bar"
   }
}

Так что, когда я вызываю bar(), некоторый код (определенный TraceLog Aspect или аналогичный) выполняется до того, как будет напечатано «in bar». Возможно ли это с groovy?


person valenterry    schedule 01.04.2014    source источник
comment
stackoverflow.com/questions/3691933/   -  person Fran García    schedule 01.04.2014
comment
Или вы можете написать преобразование AST   -  person tim_yates    schedule 01.04.2014
comment
groovy.codehaus.org/Local+AST+Transformations   -  person tim_yates    schedule 01.04.2014
comment
Спасибо! Преобразование AST было ключевыми словами, которых мне не хватало. Итак, могу ли я как-то пометить комментарии как успешные ответы?   -  person valenterry    schedule 01.04.2014
comment
@valenterry добавлено как ответ (с оговоркой)   -  person tim_yates    schedule 01.04.2014


Ответы (1)


Вы можете сделать это с помощью преобразования AST, как показано здесь

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

person tim_yates    schedule 01.04.2014