[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Implementing abstract pointcut that includes nojoinpoints

Thanks for all the quick replies.

Oddly, I did try the pointcut with not spec:

protected pointcut overriddenAbstractPointcut();

But because I'd missed on the parameter matching (the abstract decl captures the target for around advice which I'd left off in the sub), I mistakenly thought that the syntax was generally incorrect.

So, it's actually the first thing that came to mind, which is always a good feeling.

It's also good to see that this can be done in the base aspect; sort of a parallel with the template method pattern, only for pointcuts and advice. Good stuff.


- Ken

On Oct 21, 2005, at 12:24 AM, Ron Bodkin wrote:


This syntax will do it, although it is a little counterintuitive when you
first encounter it:

protected pointcut overriddenAbstractPointcut();

You can also define a default empty value in a concrete pointcut (like this)
in an abstract aspect and then override it with a non-empty definition in
some concrete aspects. E.g.,

abstract aspect Base {
   protected pointcut optionalPoint(); // empty

aspect Derived1 extends Base {
protected pointcut optionalPoint() : within(foo..*); // defines for this

aspect Derived2 extends Base {
   // optional is empty for this concrete aspect

-----Original Message-----
From: aspectj-users-bounces@xxxxxxxxxxx
[mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Ken Pelletier
Sent: Thursday, October 20, 2005 10:06 PM
To: aspectj-users@xxxxxxxxxxx
Subject: [aspectj-users] Implementing abstract pointcut that includes

I have an abstract aspect that declares a couple of abstract
pointcuts to be overridden in concrete subclasses.

In a particular subclass, however I want to nullify one of those
pointcuts; include no joinpoints at all.

Is there a common idiom for implementing a concrete pointcut that
explicitly includes no joinpoints?

I know I can nullify with && if(false), but it smells funny to
declare any advice type at all if really none applies.


protected overriddenAbstractPointcut() :
<what_would_advice_spec_be_here> && if(false;


- Ken

PS: it's probably a design smell in the first place to have abstract
pointcuts that sometimes have no applicable concrete implementation,
but that's another matter.  :-)
aspectj-users mailing list

aspectj-users mailing list