Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [aspectj-users] * in type patterns

Yes, you're right that it's embedded. But I'm still confused about what the
eclipse AspectJ book writes on this, that "type patterns in a pointcut that
do not use wildcards are resolved against the set of types visible within
the source file in which the pointcut is declared," and that "type patterns
that don't explicitly refer to types but use wildcards will be matched
against the complete set of types visible to the compiler." (p. 159)

In p3, I use a wildcard in the type pattern, so why doesn't it select from
all available packages? Is the type resolving a different issue?

Jon

-----Original Message-----
From: aspectj-users-bounces@xxxxxxxxxxx
[mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Wes Isberg
Sent: Friday, March 31, 2006 2:58 PM
To: aspectj-users@xxxxxxxxxxx
Subject: Re: [aspectj-users] * in type patterns


> However, when used like this:
> 
> Pointcut p3() : call(public int *SomeClass.*(..));
> 
> what is the meaning of * ? It is not embedded within a sequence of 
> characters, and neither is it used "by itself." The meaning also seems

It is embedded, is it not?  Does it not behave that way?

> 2. Why aren't SomeClass in all packages matched by p3?

The type is fully-qualified in this case.  To match all packages, 
specify *.. as the package prefix:

  call(public int *..*SomeClass.*(..));

The case of * alone is special in picking out any type, regardless of
package.

Wes

> ------------Original Message------------
> From: "Jon S. Baekken" <jbaekken@xxxxxxxxxxxx>
> To: aspectj-users@xxxxxxxxxxx
> Date: Fri, Mar-31-2006 2:33 PM
> Subject: [aspectj-users] * in type patterns
>
> Everybody,
> 
> I'm a little confused about the meaning of the * wildcard used in type 
> patterns. From what I've read, * stands for zero or more occurrences 
> of any character when used by itself. So,
> 
> pointcut p1() : call(public int *.*(..));
> 
> would match a call to any public method returning an in in any class 
> in
> any
> package (visible to the compiler).
> 
> When embedded within a sequence of characters, * stands for zero or
> more
> occurrences of character except the package separator (.), so
> 
> pointcut p2() : call(public int somepackage.*.SomeClass.*(..));
> 
> would match any public method returning an int declared in the class 
> SomeClass in any direct subpackage of somepackage (right?)
> 
> However, when used like this:
> 
> Pointcut p3() : call(public int *SomeClass.*(..));
> 
> what is the meaning of * ? It is not embedded within a sequence of 
> characters, and neither is it used "by itself." The meaning also seems 
> to be neither of those mentioned above. It appears that it matches 
> calls to methods declared in any class whose name ends in "SomeClass", 
> but only those
> classes visible from within p3's source file (which is also strange 
> since I
> thought all types visible to the compiler were considered when using
> wildcards?).
> 
> So to summarize my questions,
> 
> 1. What exactly does the * stand for in p3?
> 2. Why aren't SomeClass in all packages matched by p3?
> 
> Thanks,
> Jon
> 
> http://www.eecs.wsu.edu/~jbaekken/
> 
> 
> _______________________________________________
> 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