аспектj - как найти метод аннотированного класса вызывает другой метод того же класса. то есть вложенные звонки - PullRequest
2 голосов
/ 31 января 2011

У меня есть аннотация @AppManaged, которая используется для обозначения классов, для которых необходимо иметь определенное поведение. Вместо этого можно конвертировать вызовы методов в параллельные вызовы GPars (Groovy Parallels Library).

Однако я не хочу, чтобы советовали вложенные вызовы методов для того же класса. Итак ...

@AppManaged
class someclass 
{ 
     public void method1(){ 
         method2(); **// should not be advised**
     } 
     public void method2(){ 
     } 
} 

Но если вызов метода происходит из класса AppManaged в другой, то он должен быть рекомендован, поэтому что-то вроде! Cflowbelow (@within (AppManaged)) не помогает.

@AppManaged 
class Someotherclass 
{ 
     private someclass s; 

     public void method3(){ 
        s.method2();**// Should be advised.** 
     } 
} 

В основном я ищу pointcut, который будет сопоставлять только вложенные вызовы в пределах одного и того же экземпляра объекта и не давать им советы.

Любая помощь будет принята с благодарностью.

Спасибо и С уважением Авраам Менахерри.

1 Ответ

4 голосов
/ 31 января 2011

Как насчет:

pointcut appManagedExecution(Object appManaged) : execution(* (@AppManaged *).*(..)) && this(appManaged);

pointcut appManagedCall(Object called) : call(* (@AppManaged *).*(..)) && target(called);

pointcut routed(Object appManaged, Object called) : appManagedCall(called) && cflowbelow(appManagedExecution(appManaged)) && if(called != appManaged);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...