Sorry, it has gotten late here... I totally overlooked the "&& is(InnerType)" 
part. Mea culpa.

Reminder to myself: read more carefully, then answer. And maybe get some sleep.

Alexander Kriegisch


Am 02.04.2013 um 19:35 schrieb Alexander Kriegisch <alexan...@kriegisch.name>:

> 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
_______________________________________________
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to