[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] Restricting a pointcut
|
Thanks a lot, Rafal and Gregor !
On Mon, 21 Feb 2005 07:22:14 -0800, Gregor Kiczales <gregor@xxxxxxxxx> wrote:
>
> execution(void Figure.printPosition()) && within(Figure)
>
> will get execution of only the method defined in Figure
>
> similarly,
>
> execution(void Figure.printPosition()) && !within(Figure)
>
> will get only the overriding methods
>
>
> > -----Original Message-----
> > From: aspectj-users-admin@xxxxxxxxxxx
> > [mailto:aspectj-users-admin@xxxxxxxxxxx] On Behalf Of Fabiano listas
> > Sent: Monday, February 21, 2005 5:48 AM
> > To: aspectj-users@xxxxxxxxxxx
> > Subject: [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.
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > http://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>