True, but com.nested.my.concurrent.*.* will not just match inner classes, but 
also regular classes in direct subpackages, which is why I said that if you 
need to be more specific you can concatenate subconditions with an "or" 
operator. ;-)


Am 02.04.2013 um 17:01 schrieb Andy Clement <andrew.clem...@gmail.com>:

> Or you could use com.nested.my.concurrent.*.* (depending on your needs - 
> Alexanders will choose everything below the prefix, the .*.* is more 
> selective). If you want to you can also combine it with the type category 
> type pattern:
> 
> "com.nested.my.concurrent.*.* && is(InnerType)"
> "com.nested.my.concurrent..* && is(InnerType)"
> 
> cheers,
> Andy
> 
> 
> On 2 April 2013 07:51, Alexander Kriegisch <alexan...@kriegisch.name> wrote:
>>> com.nested.my.concurrent.*
>> 
>> No, this does neither capture inner classes nor classes in subpackages. You 
>> can capture both with
>> 
>>     com.nested.my.concurrent..*
>> 
>> If you need to be more specific, you can still concatenate subconditions 
>> with "||".
>> 
>> 
>> Alexander Kriegisch
>> 
>> Am 02.04.2013 um 16:23 schrieb Jean Andre <jean.an...@intact.net>:
>> 
>>> Hello Andy, 
>>> 
>>> Thank you very much for your answer. I've studied your code. It does not 
>>> work from our side because we do not specify a particular class but all 
>>> classes from a specific packages. We use  "com.nested.my.concurrent.*" 
>>> which means for us, If I do not make a mistake, all classes from this 
>>> package ? and then also the inner classes. But it seems it does not work 
>>> like this. 
>>> 
>>> So the other question, does it mean we have to declare in a separate aspect 
>>> (physical file) to avoid such duplicate mixin because in the code below, 
>>> the class CiaWebThreadFactory has 2 mixins - One from the 
>>> "com.nested.my.concurrent.*" and the second from 
>>> "com.nested.my.concurrent.CiaWebThreadFactory.*" 
>>> 
>>> Then does it means there is  no syntax to targeted class and inner class at 
>>> the same time by specifying only "all.classes.from.this.package.*"  ? 
>>> 
>>> 
>>> @Aspect 
>>> public class LoggingConcurrentBehavior extends LoggingBaseBehavior { 
>>> 
>>>         @DeclareMixin("com.nested.my.concurrent.*") 
>>>         public static Loggable createLoggerDelegate(Object o) { 
>>>                 return new ServantLogger(o.getClass()); 
>>>         } 
>>> 
>>>         @DeclareMixin("com.nested.my.concurrent.CiaWebThreadFactory.*") 
>>>         public static Loggable createLoggerDelegate2(Object o) { 
>>>                 return new ServantLogger(o.getClass()); 
>>>         } 
>>> 
>>> 
>>> Regards, 
>>> 
>>> Jean ANDRÉ 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> De :        Andy Clement <andrew.clem...@gmail.com> 
>>> A :        aspectj-users@eclipse.org, 
>>> Date :        2013-04-01 11:05 
>>> Objet :        Re: [aspectj-users] @DeclareMixin with inner class - Syntax 
>>> ? 
>>> Envoyé par :        aspectj-users-boun...@eclipse.org 
>>> 
>>> 
>>> 
>>> Sorry I didn't reply earlier, I was at eclipsecon. I tried to scaffold your 
>>> situation but it just works for me.  Are you loadtime weaving or compile 
>>> time weaving? Here is my complete code: 
>>> 
>>> === CiaWebThreadFactory.java 
>>> package com.foo.bar; 
>>> 
>>> public class CiaWebThreadFactory { 
>>>   public static void main(String []argv) { 
>>>     new CiaWebThreadGroup().foo(); 
>>>     System.out.println("works"); 
>>>   } 
>>> 
>>>   static class CiaWebThreadGroup { 
>>>     public void foo() {  
>>>       Loggable cwtg = ((Loggable)new CiaWebThreadGroup()); 
>>>       cwtg.log("hello"); 
>>>     } 
>>>   } 
>>> } 
>>> === Loggable.java 
>>> package com.foo.bar; 
>>> interface Loggable { 
>>>   void log(String msg); 
>>> } 
>>> === ServantLogger.java 
>>> package com.foo.bar; 
>>> 
>>> class ServantLogger implements Loggable { 
>>>   public ServantLogger(Class clazz) { 
>>>     System.out.println("ServantLogger for "+clazz.getName()); 
>>>   } 
>>>   public void log(String message) { System.out.println(message);} 
>>> } 
>>> === LoggingConcurrentBehaviour.java 
>>> package com.foo.bar; 
>>> import org.aspectj.lang.annotation.*; 
>>> 
>>> @Aspect 
>>> class LoggingConcurrentBehaviour { 
>>>   //works: 
>>> @DeclareMixin("com.foo.bar.CiaWebThreadFactory.CiaWebThreadGroup") 
>>>   @DeclareMixin("com.foo.bar.CiaWebThreadFactory.*") 
>>>   public static Loggable createLoggerDelegate(Object o) { 
>>>     return new ServantLogger(o.getClass()); 
>>>   } 
>>> } 
>>> === 
>>> 
>>> 
>>> ajc -1.5 *.java -d . -showWeaveInfo 
>>> Mixing interface 'com.foo.bar.Loggable' (LoggingConcurrentBehaviour.java) 
>>> into type 'com.foo.bar.CiaWebThreadFactory$CiaWebThreadGroup' 
>>> (CiaWebThreadFactory.java) 
>>> Type 'com.foo.bar.CiaWebThreadFactory$CiaWebThreadGroup' 
>>> (CiaWebThreadFactory.java) has intertyped method from 
>>> 'com.foo.bar.LoggingConcurrentBehaviour' 
>>> (LoggingConcurrentBehaviour.java:'void 
>>> com.foo.bar.Loggable.log(java.lang.String)') 
>>> 
>>> and then when I run it: 
>>> 
>>> java com.foo.bar.CiaWebThreadFactory 
>>> ServantLogger for com.foo.bar.CiaWebThreadFactory$CiaWebThreadGroup 
>>> hello 
>>> works 
>>> 
>>> In terms of mixin pattern matching I was using: 
>>>  @DeclareMixin("com.foo.bar.CiaWebThreadFactory.*") 
>>> 
>>> and that was fine (as you can see from the weave info messages). 
>>> 
>>> I tried AspectJ 1.7.2 and 1.6.12 - worked on both. 
>>> 
>>> If you can perhaps edit my code to be more representative of your failing 
>>> sample, I could investigate further. I wouldn't be surprised if there were 
>>> inner class problems (I half expected my code to fail) but at the moment 
>>> I'm not having luck finding problems. 
>>> 
>>> cheers 
>>> Andy 
>>> 
>>> 
>>> On 25 March 2013 10:07, Jean Andre <jean.an...@intact.net> wrote: 
>>> Hello, 
>>> 
>>> A quick question, is it possible to declare Mixin (@DeclareMixin) in order 
>>> to have it in inner class ? If yes, we have difficulty to find the right 
>>> syntax. 
>>> We use aspectJ 1.6.12 under WAS 8.0.0.3 
>>> 
>>> Here is our stuff - The mixin is perform well for the class 
>>> CiaWebThreadFactory but not for the inner class. We have tried different 
>>> syntax without any success. 
>>> 
>>> Any help ? - and if we have several inner class, is there a shortcu to 
>>> catch all of them in a single syntax ? 
>>> 
>>> Thank you very much. 
>>> 
>>> 
>>> JA 
>>> 
>>> =========================================== 
>>>          THE ANNOTATED   ASPECT 
>>> =========================================== 
>>> @Aspect 
>>> public class LoggingConcurrentBehavior extends LoggingBaseBehavior { 
>>> 
>>>         @DeclareMixin("com.intact.my.concurrent.*") 
>>>         public static Loggable createLoggerDelegate(Object o) { 
>>>                 return new ServantLogger(o.getClass()); 
>>>         } 
>>> 
>>>  ..... 
>>> 
>>> } 
>>> 
>>> 
>>> package com.intact.my.concurrent; 
>>> 
>>> ==================================================== 
>>>          THE INNER  CLASS TO CATCH WITH ASPECT 
>>> ==================================================== 
>>> 
>>> public final class CiaWebThreadFactory implements ThreadFactory { 
>>>         /** 
>>>          * The name of the thread group. e.g: CiaWebGroup 
>>>          * @see java.lang.ThreadGroup 
>>>          */ 
>>>         private final ThreadGroup threadGroup; 
>>> 
>>>         /** 
>>>         
>>> 
>>>  ..... 
>>> 
>>>         } 
>>> 
>>>         public static final class CiaWebThreadGroup extends ThreadGroup { 
>>>                 public void uncaughtException(Thread t, Throwable e) { 
>>>                         // AspectJ point cut - Please, do not remove - 
>>> Log4J here. 
>>>                 } 
>>>         } 
>>> } 
>>> 
>>> _______________________________________________
>>> aspectj-users mailing list
>>> aspectj-users@eclipse.org
>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>> 
>>> _______________________________________________
>>> aspectj-users mailing list
>>> aspectj-users@eclipse.org
>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>> 
>>> _______________________________________________
>>> aspectj-users mailing list
>>> aspectj-users@eclipse.org
>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>> 
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@eclipse.org
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> 
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@eclipse.org
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
_______________________________________________
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to