Hi.
I was debugging an application using Spring AOP to find out why a class was proxied despite not actually matching the pointcut, and found out that KindedPointcut.fastMatch() would only match on an exact type pattern or a type pattern with an exact annotation type pattern, and return "maybe" otherwise.
It seems a bit restrictive, when the conjunctions, disjunctions and negations could probably also be evaluated with the same kind of cost, and help my case, which is a pointcut like:
execution(* (@Annotation1 !@Annotation2 *).*(..))
Is there any intrinsic reason why that can't be done (outside of the Spring AOP scope for example, when used directly in AspectJ), or is it just a lack of need / time for the implementation?
In the same vein, the patterns seem really disjunct, when they could actually have multiple facets: a WildTypePattern can contain an AnnotationTypePattern, however it's not an AnyWithAnnotationTypePattern. If it were, a possible match could be ruled out using only the annotations (again with exact match, conjunction, disjunction, negation), and not considering the wildcard.
I could probably try and contribute something if it seems feasible, though I know building and testing AspectJ is not that easy.
Regards,
Frank