[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| [aspectj-users] Restricting a pointcut | 
Hello!
In the example shown below, I'd like to restrict a pointcut to affect
only the superclass, not the subclasses that extend it. Is there a
generic way to do this? Do I need to especify all subclasses that my
pointcut can't affect?
 public class Figure {
    public String printPosition() { return ""; };
 }
 public class Point extends Figure {
      private int x, y;
      public Point(int x, int y) { this.x = x; this.y = y; }
      public void setX(int x) { this.x = x; }
      public void setY(int y) { this.y = y; }
      public int getX() { return x; }
      public int getY() { return y; }
      public String printPosition() {
         return "Point at (" + this.x + "," + this.y + ")";
      }
 }
 public aspect TestingPointcut {
   pointcut p1(): call(public * Figure.printPosition());
   before(): p1() {
     System.out.println("TestingPointcut: " + thisJoinPoint);
   }
 }
 When I run the following main class,
 public class Teste {
 public static void main(String[] args) {
         Point p1 = new Point(3,3);
         Point p2 = new Point(-1,-1);
         System.out.println(p1.printPosition());
         System.out.println(p2.printPosition());
   }
 }
 I get this result:
 > TestingPointcut: call(String javaFonts.figure.Point.printPosition())
 > Point at (3,3)
 > TestingPointcut: call(String javaFonts.figure.Point.printPosition())
 > Point at (-1,-1)
 As you can observe, I'm not using the wildcard + in the pointcut
 definition, but the subtypes of Figure are also being affected.
 According to the AspectJ Programming Guide, hosted in eclipse.org, if I
 intend to affect exactly a type, I should define a pointcut like this:
 call(Foo.new());
 If I want to affect also the subtypes of Foo, I should define a pointcut
 like this:
 call(Foo+.new());
 Does it work only for constructors?
 Thanks,
 Fabiano Cutigi Ferrari.