[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-dev] type pattern "+" for declaring class
|
> without "+" a type pattern specifies the exact type without sub types.
true
> I expected that the pointcut only
> matches at point (1). But it matches at point (1) and point (2)
Briefly:
Matching both is correct, since both have that signature.
An execution join point can have more than one signature.
More detail:
Shape declares the join point signature moveBy(int, int),
regardless of whether Point also declares it. This is
specified in the programming guide semantics appendix
section on matching:
------------------------------
When matching method-execution join points, if the execution
pointcut method signature specifies a declaring type, the
pointcut will only match methods declared in that type, or
methods that override methods declared in or inherited by that type
------------------------------
Put another way, the bytecode shadow for Point.moveBy(int,int)
has more than one signature:
void Shape.moveBy(int, int)
void Point.moveBy(int, int)
The AspectJ 5 developers notebook mentions the many
signatures for an execution join point signature.
http://dev.eclipse.org/viewcvs/indextech.cgi/%7Echeckout%7E/aspectj-home/doc/ajdk15notebook/join-point-signatures.html#d0e351
This can sound funny, but it tracks what developers expect.
Most developers want to advise any implementation of a given
method. Those who want to specify a particular lexical class
can say
within(Shape) && execution(void Shape.moveBy(int, int))
Hope this helps!
Wes
> ------------Original Message------------
> From: Christoph Bockisch <bockisch@xxxxxxxxxxxxxxxxxxxxxxxxxx>
> To: aspectj-dev@xxxxxxxxxxx
> Date: Thu, Feb-10-2005 5:11 AM
> Subject: [aspectj-dev] type pattern "+" for declaring class
>
> In each documentation about AspectJ that I found, it is stated that
> without "+" a type pattern specifies the exact type without sub types.
> However this documentation is at least ambiguous for type patterns used
>
> for the declaring class. Look at the following example:
>
> class Shape {
> void moveBy(int x, int y) { (1) ... }
> }
>
> class Point extends Shape {
> void moveBy(int x, int y) { (2) ... }
> }
>
> Consider the pointcut: execution(* Shape.moveBy(int, int))
>
> After reading the documentation, I expected that the pointcut only
> matches at point (1). But it matches at point (1) and point (2). I
> think, given that Java provides polymorphism, this behavior is correct.
>
> However I think that this breaks the invariant (which is stated in the
> documentation) that type patterns without "+" always specify the exact
> class.
>
> I would be happy to hear from you how the semantics for type patterns
> with and without "+" in the declaring class are intended to be.
>
> Thanks in advance,
> Christoph Bockisch
>
>
> --
> Dipl.-Inform. Christoph Bockisch bockisch@xxxxxxxxxxxxxxxxxxxxxxxxxx
> Software Technology Group Phone: ++49 (0) 6151-16-3608
> Darmstadt University of Technology Fax: ++49 (0) 6151-16-5410
> Hochschulstr. 10, 64289 Darmstadt, Germany
> http://www.st.informatik.tu-darmstadt.de/
> _______________________________________________
> aspectj-dev mailing list
> aspectj-dev@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-dev
>