Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Pointcut to calls to a specific field

My preferred solution is to proxy object held in the field. This is easy to do with Collections, since they implement a standard interface.

Cheers,
Nick


On Jun 23, 2004, at 2:32 PM, Bruno Feurer wrote:

Hi,

I'm still not happy with the field test in the advice. Is there really
no static way to capture field specific join points?

A new idea is to test the field reference within the pointcut
definition:

  pointcut add(MyContainer container, Object child, Collection c) :
      call(boolean Collection.add(Object)) && this(container) &&
      args(child) && target(c) && if(c == container.children);

This works also with a "clean" advice. But we still need the Collection
parameter for the if statement. And the join point annotations in
Eclipse still show up at the local Collection.add() calls.

Has somebody a hint or a correction to my approaches? There must be
several situations for capturing calls to specific field members. I've
found the get-access definition, but I don't see a way to connect it to
a following call.

Thanks,
Bruno


-----Original Message-----
From: aspectj-users-admin@xxxxxxxxxxx
[mailto:aspectj-users-admin@xxxxxxxxxxx] On Behalf Of Bruno Feurer
Sent: Friday, June 18, 2004 16:16
To: aspectj-users@xxxxxxxxxxx
Subject: [aspectj-users] Pointcut to calls to a specific field


Hi there,

how can I define a pointcut picking out calls to specific field?

  ...
  this.children.add(someObj);
  ...

definitions like

  pointcut add(MyContainer container, Object child) :
      call(boolean Collection.add(Object)) && this(container)
&& args(child);

also match

  ...
  Collection c = new ArrayList();
  c.add(someObject);
  ...

So I came up with the following solution:

  pointcut add(MyContainer container, Object child, Collection c) :
      call(boolean Collection.add(Object)) && this(container) &&
args(child) && target(c);

  after(MyContainer container, Object child, Collection c) :
add(container, child, c) {
      if (c != container.children)
          return;
      ...
  }

Has somebody found a better solution? Some definition
limiting the pointcut only to a specified field or something alike?

Thanks for any ideas,
Bruno Feurer

_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/aspect> j-users


_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/aspectj-users


Nicholas Lesiecki
Software Craftsman, specializing in J2EE,
Agile Methods, and aspect-oriented programming

Books:
* Mastering AspectJ: http://tinyurl.com/66vf
* Java Tools for Extreme Programming: http://tinyurl.com/66vt

Articles on AspectJ:
* http://tinyurl.com/66vu and http://tinyurl.com/66vv



Back to the top