Re: [aspectj-users] @DeclareMixin with inner class - Syntax ?

2013-04-02 Thread Alexander Kriegisch
@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 :

> 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  
> A :"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 :
> 
> 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 :
> 
> 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  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 :
> 
> 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  
> 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 ms

Re: [aspectj-users] @DeclareMixin with inner class - Syntax ?

2013-04-02 Thread Jean Andre
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 
A : "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 :

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  
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 :

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  
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

Re: [aspectj-users] @DeclareMixin with inner class - Syntax ?

2013-04-02 Thread Alexander Kriegisch
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 :

> 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 :
> 
>> 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  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 :
>>> 
 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  
 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.

Re: [aspectj-users] @DeclareMixin with inner class - Syntax ?

2013-04-02 Thread Alexander Kriegisch
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 :

> 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  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 :
>> 
>>> 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  
>>> 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

Re: [aspectj-users] AbstractMethodError calling method defined on class receiving ITD of same method

2013-04-02 Thread Andy Clement
I added an error message for this particular situation yesterday.

cheers,
Andy


On 2 April 2013 08:43, Matthew Adams  wrote:

> Hey, Andy, what did you decide to do with this scenario?  Will this just
> remain a StupidUserError, or will a future version of the compiler emit an
> error?  FWIW, I definitely favor the latter.
>
> I readily espouse the  virtue of laziness
>   , and the compiler is a
> great tool with which to keep said laziness lazer-sharp.  :)
>
> -matthew
>
>
>
> --
> View this message in context:
> http://aspectj.2085585.n4.nabble.com/AbstractMethodError-calling-method-defined-on-class-receiving-ITD-of-same-method-tp4650821p4650829.html
> Sent from the AspectJ - users mailing list archive at Nabble.com.
> ___
> 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


Re: [aspectj-users] AbstractMethodError calling method defined on class receiving ITD of same method

2013-04-02 Thread Matthew Adams
Hey, Andy, what did you decide to do with this scenario?  Will this just
remain a StupidUserError, or will a future version of the compiler emit an
error?  FWIW, I definitely favor the latter.

I readily espouse the  virtue of laziness
  , and the compiler is a
great tool with which to keep said laziness lazer-sharp.  :)

-matthew



--
View this message in context: 
http://aspectj.2085585.n4.nabble.com/AbstractMethodError-calling-method-defined-on-class-receiving-ITD-of-same-method-tp4650821p4650829.html
Sent from the AspectJ - users mailing list archive at Nabble.com.
___
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users


Re: [aspectj-users] @DeclareMixin with inner class - Syntax ?

2013-04-02 Thread Andy Clement
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  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 :
>
> 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 
> 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

Re: [aspectj-users] @DeclareMixin with inner class - Syntax ?

2013-04-02 Thread Alexander Kriegisch
> 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 :

> 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  
> 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  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 wit

Re: [aspectj-users] @DeclareMixin with inner class - Syntax ?

2013-04-02 Thread Jean Andre
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 
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  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 WI