@Jean: The "||" was not for "is()" (which I had not even noticed, as I said), 
but for combinations of specific package and class name specifiers. Please do 
not mix up my answer with Andy's (which is superior because more precise 
anyway). BTW, I did not test anything, because I am nowhere near a PC (iPad 
only here on the road).

@Andy: I guess it would be nice to include "is()" into the AJ documentation 
beyond 1.6.9 release notes, e.g. developer tutorial or cheat sheets like 
http://www.eclipse.org/aspectj/doc/released/quick5.pdf.

Alexander Kriegisch


Am 02.04.2013 um 20:00 schrieb Jean Andre <jean.an...@intact.net>:

> Thank you very-very much for theses answers and we updated our code according 
> to the new knowledge. Did you test with || is(InnerType) (instead of &&) ? 
> 
> With && is(InnerType), we got only the inner classes. Using OR triggers some 
> compiler errors. Well, from your side, the proposed solutions are what we 
> wanted. ;) 
> 
> Best regards and again thank you. 
> 
> Jean André 
> 
> 
> 
> 
> De :        Alexander Kriegisch <alexan...@kriegisch.name> 
> A :        "aspectj-users@eclipse.org" <aspectj-users@eclipse.org>, 
> Date :        2013-04-02 13:39 
> Objet :        Re: [aspectj-users] @DeclareMixin with inner class - Syntax ? 
> Envoyé par :        aspectj-users-boun...@eclipse.org 
> 
> 
> 
> 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
> 
> _______________________________________________
> 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