Hi, It is an ordering issue I think - I can recreate it in pure source compilation too if I pass the files in using a particular order. I've raised https://bugs.eclipse.org/bugs/show_bug.cgi?id=376030 to cover it.
cheers, Andy On 3 April 2012 07:04, Dominik Mengelt <[email protected]> wrote: > Hi Andy, > > Thank you so much! > > Unfortunately we have a little ltw vs. source weaving problem. Consider I > have the following setup: > > Source Weaving: > ############## > > package ch.annotation; > import java.lang.annotation.ElementType; > import java.lang.annotation.Retention; > import java.lang.annotation.RetentionPolicy; > import java.lang.annotation.Target; > > @Retention(RetentionPolicy.RUNTIME) > @Target(ElementType.FIELD) > public @interface Anno { > > } > > package ch.aspects; > > import ch.annotation.Anno; > > public aspect TriggerAll { > declare @field : * *.myInt : @Anno; > before(Anno anno) : @annotation(anno) && set(* *.myInt) { > System.out.println("Triggered"); > } > } > > package ch.tests; > > public class MyObject { > public int myInt; > > public int getMyInt() { > return myInt; > } > > public void setMyInt(int myInt) { > this.myInt = myInt; > } > } > > package ch.tests; > > public class Main { > > public static void main(String[] args) { > MyObject mo = new MyObject(); > mo.myInt = 13; > mo.setMyInt(13); > } > } > > This outputs: > Triggered > Triggered > > // two times "Triggered". As expected. > > Now LTW: > ######## > > Infos: > - -javaagent:lib/aspectjweaver.jar is set > - the compiled aspect "TriggerAll.aj" is in the class searchpath (classpath) > packed within a jar file. > > public class MyObject2 { > public int myInt; > > public int getMyInt() { > return myInt; > } > > public void setMyInt(int myInt) { > this.myInt = myInt; > } > } > > public class Main { > > public static void main(String[] args) { > MyObject2 mo = new MyObject2(); > mo.myInt = 13; > mo.setMyInt(13); > } > } > > This outputs: > Triggered > // just one "Triggered" message. And this comes from mo.setMyInt(13). > > So mo.myInt = 13 does not trigger the pointcut! > > Note: It has nothing to do with your recent changes. This happens on AspectJ > 1.6.12. > > Output form the weaving "process": > > [AppClassLoader@5acac268] info AspectJ Weaver Version 1.6.12 built on > Tuesday Oct 18, 2011 at 17:52:06 GMT > [AppClassLoader@5acac268] info register classloader > sun.misc.Launcher$AppClassLoader@5acac268 > [AppClassLoader@5acac268] info using configuration /path/META-INF/aop.xml > [AppClassLoader@5acac268] info using configuration > /other-path/lib/TriggerAll.jar!/META-INF/aop-ajc.xml > [AppClassLoader@5acac268] info register aspect ch.aspects.TriggerAll > [AppClassLoader@5acac268] info weaver operating in reweavable mode. Need to > verify any required types exist. > [AppClassLoader@5acac268] debug weaving 'Main' > [AppClassLoader@5acac268] debug weaving 'MyObject2' > [AppClassLoader@5acac268] weaveinfo 'public int myInt' of type 'MyObject2' > (MyObject2.java) is annotated with @Anno field annotation from > 'ch.aspects.TriggerAll' (TriggerAll.aj:6) > [AppClassLoader@5acac268] weaveinfo Join point 'field-set(int > MyObject2.myInt)' in Type 'MyObject2' (MyObject2.java:11) advised by before > advice from 'ch.aspects.TriggerAll' (TriggerAll.aj:8) > [AppClassLoader@5acac268] debug weaving 'ch.aspects.TriggerAll' > [AppClassLoader@5acac268] info processing reweavable type > ch.aspects.TriggerAll: ch\aspects\TriggerAll.aj > [AppClassLoader@5acac268] debug cannot weave > 'org.aspectj.lang.NoAspectBoundException' > [AppClassLoader@5acac268] debug weaving 'ch.annotation.Anno' > [AppClassLoader@5acac268] debug weaving '$Proxy3' > Triggered > > But again: Thanks very much for you effort, > domi > > > On Mon, Apr 2, 2012 at 11:28 PM, Andy Clement <[email protected]> > wrote: >> >> Ok, implemented under https://bugs.eclipse.org/bugs/show_bug.cgi?id=375881 >> >> Dev build is on the downloads page or here: >> >> http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/dev/aspectj-DEVELOPMENT-20120402142200.jar >> >> It enables you to write declare-annotation segments in the >> concrete-aspect section of aop.xml. Here is one of my testcase XMLs: >> >> <aspectj> >> <aspects> >> <concrete-aspect name="ConjuredUp"> >> <declare-annotation field="* field1" >> annotation="@Annot(someBoolean = false, 'abc' )"/> >> </concrete-aspect> >> </aspects> >> >> <weaver options="-Xreweavable -verbose -XlazyTjp -showWeaveInfo"> >> <include within="Hello6"/> >> </weaver> >> </aspectj> >> >> You can use field or method (to indicate declare @field or declare >> @method), you cannot specify type yet. All annotation value types are >> supported apart from arrays and nested annotations. Notice to avoid >> the need to write double quotes as ", you can use single quotes >> for strings. If you are using a class reference it must either be in >> java.lang or fully qualified. >> >> There is still more error checking code to go in but hopefully you can >> use it as it is now. >> >> cheers, >> Andy >> >> On 1 April 2012 07:51, Dominik Mengelt <[email protected]> wrote: >> > Andy, >> > >> > Thanks for your efforts. It is really appreciated. >> > >> >> I suspect markers wont be enough for you? If so if you can tell me >> >> the types of value (string,int, etc) you need to specify in the >> >> annotation I'll do those first. >> > >> > >> > Thats correct. I need the following types: >> > >> > - string >> > - long >> > - boolean >> > - class >> > >> > It would be great to have a dev / nightly build with the ability to >> > define >> > annotations within the aop.xml >> > >> > thanks again, >> > domi >> > >> > >> > On Fri, Mar 30, 2012 at 8:58 PM, Andy Clement <[email protected]> >> > wrote: >> >> >> >> > So I'm curious if there are currently any plans to implement this >> >> > feature or >> >> > can anybody provide an alternate solution to this problem? >> >> >> >> I didn't have plans but as you are asking for it I've done a bit of >> >> hacking this morning. I can currently add annotations to >> >> fields/methods but only simple marker annotations. >> >> >> >> I can do this >> >> >> >> <declare-annotation method="* foo(..))" annotation="@Marker"/> >> >> >> >> you cannot say >> >> >> >> annotation="@Marker(x=y,z=a)" >> >> >> >> I suspect markers wont be enough for you? If so if you can tell me >> >> the types of value (string,int, etc) you need to specify in the >> >> annotation I'll do those first. (Obviously supporting all of them >> >> would be nice, but not sure i have time to do that right now). >> >> >> >> Also declare @type won't work right now. >> >> >> >> cheers, >> >> Andy >> >> >> >> On 30 March 2012 04:30, Dominik Mengelt <[email protected]> >> >> wrote: >> >> > Hi all, >> >> > >> >> > I'm interested in the possibility to declare field and method >> >> > annotations >> >> > directly on concrete aspects in an aop.xml. Basically I have the same >> >> > "problem / feature request" as Thomas on the following post: >> >> > >> >> > >> >> > http://aspectj.2085585.n4.nabble.com/abstract-quot-declare-method-quot-td3823887.html >> >> > >> >> > What I also found is the following enhancement request from Andrew: >> >> > https://bugs.eclipse.org/bugs/show_bug.cgi?id=359159 >> >> > >> >> > On the end of comment 1 Andrew says: >> >> > >> >> >> "A similar model could be extended to >> >> >> support any declares too (anntation/parents)". >> >> > >> >> > >> >> > So I'm curious if there are currently any plans to implement this >> >> > feature or >> >> > can anybody provide an alternate solution to this problem? >> >> > >> >> > Thanks in advance. >> >> > >> >> > Domi >> >> > >> >> > _______________________________________________ >> >> > aspectj-users mailing list >> >> > [email protected] >> >> > https://dev.eclipse.org/mailman/listinfo/aspectj-users >> >> > >> >> _______________________________________________ >> >> aspectj-users mailing list >> >> [email protected] >> >> https://dev.eclipse.org/mailman/listinfo/aspectj-users >> > >> > >> > >> > _______________________________________________ >> > aspectj-users mailing list >> > [email protected] >> > https://dev.eclipse.org/mailman/listinfo/aspectj-users >> > >> _______________________________________________ >> aspectj-users mailing list >> [email protected] >> https://dev.eclipse.org/mailman/listinfo/aspectj-users > > > > _______________________________________________ > aspectj-users mailing list > [email protected] > https://dev.eclipse.org/mailman/listinfo/aspectj-users > _______________________________________________ aspectj-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/aspectj-users
