Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-dev] Pertypewithin() and inner/nested type

Hi Ramnivas -

You're right about the direct interpretation.

The workaround is to specify on the enclosing class in the
type pattern.  The join points in the nested classes are
still "within" the outermost class.  The problem with this
is that they are confusingly similar:

   pertypewithin(lang15.*)
   pertypewithin(lang15..*)

(See code below; it's great to have ajc working on this!)

Which raises a proposal of Jim's that I'd like to revive 
for the AspectJ 5 release: virtual annotations that 
developers "understand" about classes (but which aren't
attributes):

   @Anonymous
   @Nested
   @Inner
   @Interface

Then you could clearly say

  pertypewithin(lang15..* && !@Nested && !@Interface)

Thanks -
Wes

-------------lang15/PerType.java
package lang15;

aspect PT pertypewithin(lang15.* && !PT) {
	static int INDEX;
	final int index = INDEX++;
	public PT() {
		System.out.println("creating " + toString());
	}
	before() : execution(* *(..)) {
		System.out.println(index + ": " + thisJoinPointStaticPart);
	}
	public String toString() {
		return "PT[" + index + "]";
	}
}

public class PerType {
	public static void main(String[] args) {
		System.out.println("you got " + PT.aspectOf(PerType.class));
		new PerType().new D().m();
		new C().m();
	}
	static void print(String s) { System.out.println(s); }
	void m() {print("PerType.m()"); }
	static class C extends PerType {
		void m() {print("C.m()"); }
	}
	class D extends PerType {
		void m() {print("D.m()"); }
	}
}


> ------------Original Message------------
> From: Ramnivas Laddad <ramnivas@xxxxxxxxxxxxxxx>
> To: aspectj-dev@xxxxxxxxxxx
> Date: Tue, Jan-25-2005 2:20 PM
> Subject: [aspectj-dev] Pertypewithin() and inner/nested type
>
> How is pertypewithin() aspects state is associated with inner and 
> nested 
> types?
> 
> On most occasion (especially logging a la log4j), inner types (but not 
> necessarily nested types -- declared using static) need to share the 
> per-type state with the outermost type. However, a direct 
> interpretation 
> of pertypewithin() -- per type within (those matched by) the type 
> pattern -- will make one think that inner and nested state will have 
> *separate* state than the outer type.
> 
> This issue affects both pertype(Pointcut) or pertypewithin(TypePattern) 
> 
> the same way (I think). Hence a separate email to avoid confusion.
> 
> -Ramnivas
> 
> _______________________________________________
> aspectj-dev mailing list
> aspectj-dev@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-dev
> 




Back to the top