A join point has potentially multiple signatures, but only one set of modifiers. A kinded primitive pointcut matches a particular join point if and only if:
Given the hierarchy
interface Q { R m(String s); } class P implements Q { @Foo public R m(String s) {...} } class S extends P { @Bar public R' m(String s) {...} } class T extends S {}
and the program fragment:
P p = new P(); S s = new S(); T t = new T(); ... p.m("hello"); s.m("hello"); t.m("hello");
The the pointcut call(@Foo R P.m(String))
matches the
call p.m("hello")
since both the signature and the
modifiers match. It does not match the call s.m("hello")
because even though the signature pattern matches one of the signatures
of the join point, the modifiers pattern does not match the modifiers of
the method m in S which is the static target of the call.
The pointcut call(R' m(String))
matches the
calls t.m("hello")
and s.m("hello")
.
It does not match the call p.m("hello")
since the
signature pattern does not match any signature for the call join point
of m in P.