kabal
kabal

Reputation: 2145

AspectJ pointcut to method call in specific methods

I want to create a pointcut to target a call to a method from specific methods.

take the following:

class Parent {
   public foo() {
     //do something
   }
}

class Child extends Parent {
   public bar1() {
     foo();
   }
   public bar2() {
     foo();
   }
   public bar3() {
     foo();
   }
}

I would like to have a point cut on the call to foo() in methods bar1() and bar3()

I was thinking something like

pointcut fooOperation(): call(public void Parent.foo() && (execution(* Child.bar1()) || execution(* Child.bar3()) );

before() : fooOperation() {
  //do something else
}

however, that doesnt seem to work. any ideas?

thanks

Upvotes: 7

Views: 7763

Answers (2)

Dario Seidl
Dario Seidl

Reputation: 4640

Maybe withincode will work:

call(public void Parent.foo()) && (withincode(* Child.bar1()) || withincode(* Child.bar3()) );

Alternatively you could try the cflow pointcut:

pointcut bar1(): call(* Child.bar1());
pointcut bar3(): call(* Child.bar3());

call(public void Parent.foo()) && (cflow(bar1()) || cflow(bar3());

Look here for a pointcut reference

Upvotes: 3

Rob
Rob

Reputation: 11733

Think what you want is instead of doing the execution clauses (which have the added disadvantage of requiring additions for each new caller), is to use target, e.g. something like:

target(Child) && call(public void Parent.foo()).

Somewhat surprisingly, I have found the pointcut guides in the eclipse documentation quite useful. They are here.

Upvotes: 2

Related Questions