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

Reply via email to