Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] declare parents syntax

Named type patterns have been on the radar for some time now. We decided not to make any language changes in the 1.5.x stream (the jump to 1.5.0 was big enough). For AspectJ 1.6 support for named type patterns (which in turn allows us to introduce things like matching on type modifiers without the syntax getting too unwieldy) is high on the list of considerations. See e.g. https://bugs.eclipse.org/bugs/ show_bug.cgi?id=86818.

Regards, Adrian.


On 2 Oct 2006, at 01:27, Ron Bodkin wrote:

That's a good clarification, thanks. Often this pattern is adequate when working in application code where you expect to have subtypes in the same
packages (and the warning is a good enforcement/reminder tool).

However, these caveats just further remind me of the improved value that having a named reusable type pattern would provide. I think a reusable type
pattern is what Eugene wants also. And named type patterns (and method
signatures too) would also allow more readable versions of complex
expressions through composition of named parts.

-----Original Message-----
From: aspectj-users-bounces@xxxxxxxxxxx
[mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Wes Isberg
Sent: Saturday, September 30, 2006 12:19 PM
To: aspectj-users@xxxxxxxxxxx
Subject: Re: [aspectj-users] declare parents syntax

Just remember that

  within(XyzType+)

can pick out subtypes outside com.xyz..* that extend
a type in com.xyz..*

You can name the pointcut to reuse it:

  pointcut inScope() : within(com.xyz..*);

then
  before(): something() && inScope() {..}

To address the problem of typo's (i.e., redundancy across
type patterns and pointcuts), try something like

  declare parents : com.xyz..* : implements X;

  declare warning : staticinitialization(X+)
     && !inScope() : "X not in scope";

The latter would also pick out those types not in
com.xyz..*
i.e., the subtypes outside the package.

Wes

On Fri, 29 Sep 2006 11:14:00 -0700
 "Ron Bodkin" <rbodkin@xxxxxxxxxxxxxx> wrote:
Hi Eugene,

It would be great to have a way to reuse type patterns in
AspectJ... that's
something I've advocated for a while. That's how I'd
improve on redundancy.

But if you are using declare parents you could use the
new type in your
pointcut, i.e., use this pointcut execution(* *(..)) &&
within(XyzType+)
instead of execution(* *(..)) && within(com.xyz..*)



-----Original Message-----
From: aspectj-users-bounces@xxxxxxxxxxx
[mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of
Eugene Kuleshov
Sent: Friday, September 29, 2006 11:04 AM
To: aspectj-users@xxxxxxxxxxx
Subject: Re: [aspectj-users] declare parents syntax


  Thanks Ron, I know that. But the thing is that the same
pattern is
used in pointcuts to apply additional aspects to the very
same classes.
Hence a duplication that may lead to some unexpected
typos.

  regards,
  Eugene


Ron Bodkin wrote:
Hi Eugene,

declare parents accepts a type pattern, not a pointcut.
A type pattern
picks
out types, whereas a pointcut picks out join points.
The expression inside
a
within pointcut are is a type pattern.

Here's an example of using declare parents to match a
type pattern, which
is
surely what you wanted to do with within:

declare parents: com.xyz..* implements XyzType;


-----Original Message-----
From: aspectj-users-bounces@xxxxxxxxxxx
[mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of
Eugene Kuleshov
Sent: Thursday, September 28, 2006 12:06 PM
To: aspectj-users@xxxxxxxxxxx
Subject: [aspectj-users] declare parents syntax

Hi,

  I wonder why "declare parents" introduction syntax
does not allow to
use within(*) pointcut expression?

  This limitation lead to significant amount of
duplication in the
aspect code and/or makes xml-based aspect definitions
more verbose. The
only workaround I know is to "bridge" trough annotation
introduction,
but that approach does not work on 1.4 and looks like a
hack.

  I thought I saw that it was possible to use within
pointcuts for this
in some old version of AspectJ but it was removed. I
might be mistaken
though...

  Thanks

  Eugene




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

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

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

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



Back to the top