Replied again (appended to original answer). Hopefully, this resolves your issue.
On Mon, Jul 15, 2013 at 12:27 PM, pai <[email protected]> wrote: > Hi Alex! > > I'm sorry that you think I don't appreciate his answer. > > But actually, I do appreciate for your kind response. > > That's why I think I may not state my questions clear enough for people to > understand clearly. > > It's my mistake. > > It seems my questions was misunderstood. > > I am quite familiar with Java, and that's why I know my questions are > misunderstood. > > Could you spend some time reading my modified questions? > > I'd really thankful for your help! > > > To make long story short: > > Q1: > > The class which I'll add a new constructor to: > > * public class Child { > > public String name = "John"; > > public Child(String desc) { > // TODO Auto-generated constructor stub > } > } * > > The aspectJ code: > > * public aspect MyTest { > public Child.new(String desc, int num) { > System.out.println("Child Name:" + this.name); > } > }* > > If I instantiate the Child with the new constructor: > > * new Child("A child", 5)* > > What's the output? > > What I saw is: > > *Child Name:null* > > Different from what I expected. > > > Q2: > > The class which I'll add a new constructor to: > > * public class Child extends Parent{ > > public String name = "John"; > > public Child(String desc) { > > } > } * > > * public class Parent { > > public void init() { > //.... > } > > }* > > I add a new constructor for the *Child *in my aspect. > * public aspect MyTest { > public Child.new(String desc, int num) { > super.init(); > } > } > * > > Can the code be compiled? > > What I encountered is an thrown exception: > *Exception in thread "main" java.lang.NoSuchMethodError: > com.test2.Child.ajc$superDispatch$com_test2_Child$init()V > at MyTest.ajc$postInterConstructor$MyTest$com_test2_Child(MyTest.aj:19) > at com.test2.Child.<init>(Child.java:1) > at MainProgram.main(MainProgram.java:11)* > > > Thanks for your patience! > > > Alexander Kriegisch-2 wrote > > Hello. > > > > With all due respect: Ramnivas has answered the question before on SO > > quite patiently. So as not to waste any more of his precious time I > > recommend you to > > - read his answer, > > - think again, especially about Q1 and > > - learn some basic Java. > > > > Sorry if it sounds rude, but you seem not to appreciate his answer, which > > is also not very nice. > > > > Regards > > Alexander > > > > > > Am 15.07.2013 um 20:40 schrieb pai < > > > pikapai@ > > > >: > > > >> Hi! thanks for the response. > >> > >> But it seems you have some misunderstanding about my questions. > >> > >> So I made some modifications to make it clear. > >> > >> Thank you for the help :) > >> > >> > >> > >> I am currently applying AspectJ to our project, and I found a behavior > >> which > >> is a bit strange to me. > >> > >> *Q1:* > >> I added a new constructor to my current class with inter-type > >> declaration, > >> and found that the class's member variable is not initialized if the new > >> constructor is used to instantiate my class. > >> > >> For example: > >> > >> The class which I'll add a new constructor to: > >> > >> public class Child { > >> > >> public String name = "John"; > >> > >> public Child(String desc) { > >> // TODO Auto-generated constructor stub > >> } > >> } > >> > >> The aspectJ code: > >> > >> public aspect MyTest { > >> public Child.new(String desc, int num) { > >> System.out.println("Child Name:" + this.name); > >> } > >> } > >> > >> If I instantiate the Child with the new constructor: > >> > >> new Child("A child", 5) > >> > >> the member variable **this.name** is not initialized as will be done > with > >> the original constructor. > >> > >> But, if I call the original constructor: > >> > >> new Child("A child") > >> > >> the member variable **this.name** will be initialized to "John" as > usual > >> > >> The result: > >> > >>> Child Name:null > >> > >> **Is this a limitation of AspectJ? Is there anyway to resolve this > >> issue?** > >> > >> I don't really want to add the code for member variable initialization > to > >> the new constructor. > >> > >> *Q2:* > >> It seems **in the newly added constructor**, **super.method()** can not > >> be > >> correctly resolved. > >> > >> > >> The class which I'll add a new constructor to: > >> > >> public class Child extends Parent{ > >> > >> public String name = "John"; > >> > >> public Child(String desc) { > >> > >> } > >> } > >> > >> **Child** extends **Parent**. **Parent** has a method **init()** > >> > >> public class Parent { > >> > >> public void init() { > >> //.... > >> } > >> > >> } > >> > >> I add a new constructor for the **Child** in my aspect. > >> public aspect MyTest { > >> public Child.new(String desc, int num) { > >> super.init(); > >> } > >> } > >> > >> The above aspect code will trigger an exception. > >> > >> Exception in thread "main" java.lang.NoSuchMethodError: > >> com.test2.Child.ajc$superDispatch$com_test2_Child$init()V > >> at > >> MyTest.ajc$postInterConstructor$MyTest$com_test2_Child(MyTest.aj:19) > >> at com.test2.Child. > > <init> > > (Child.java:1) > >> at MainProgram.main(MainProgram.java:11) > >> > >> My workaround is to define **another method** for my class **Child**, > and > >> indirectly call the super.method() within that method > >> > >> > >> For example, add a new method that calls **super.init()** for **Child** > >> > >> public void Child.initState() > >> { > >> super.init(); > >> } > >> > >> Now, I can call initState() in the newly added constructor like below: > >> > >> public aspect MyTest { > >> public Child.new(String desc, int num) { > >> this.initState(); > >> } > >> } > >> > >> **Is this a limitation of AspectJ? Is this the only way to resolve this > >> issue?** > >> > >> Thank you all for your time :) > >> > >> > >> > >> -- > >> View this message in context: > >> > http://aspectj.2085585.n4.nabble.com/Behaviours-of-new-constructor-added-by-AspectJ-ITD-tp4651015p4651019.html > >> Sent from the AspectJ - users mailing list archive at Nabble.com. > >> _______________________________________________ > >> aspectj-users mailing list > >> > > > aspectj-users@ > > >> https://dev.eclipse.org/mailman/listinfo/aspectj-users > > _______________________________________________ > > aspectj-users mailing list > > > aspectj-users@ > > > https://dev.eclipse.org/mailman/listinfo/aspectj-users > > > Alexander Kriegisch-2 wrote > > Hello. > > > > With all due respect: Ramnivas has answered the question before on SO > > quite patiently. So as not to waste any more of his precious time I > > recommend you to > > - read his answer, > > - think again, especially about Q1 and > > - learn some basic Java. > > > > Sorry if it sounds rude, but you seem not to appreciate his answer, which > > is also not very nice. > > > > Regards > > Alexander > > > > > > Am 15.07.2013 um 20:40 schrieb pai < > > > pikapai@ > > > >: > > > >> Hi! thanks for the response. > >> > >> But it seems you have some misunderstanding about my questions. > >> > >> So I made some modifications to make it clear. > >> > >> Thank you for the help :) > >> > >> > >> > >> I am currently applying AspectJ to our project, and I found a behavior > >> which > >> is a bit strange to me. > >> > >> *Q1:* > >> I added a new constructor to my current class with inter-type > >> declaration, > >> and found that the class's member variable is not initialized if the new > >> constructor is used to instantiate my class. > >> > >> For example: > >> > >> The class which I'll add a new constructor to: > >> > >> public class Child { > >> > >> public String name = "John"; > >> > >> public Child(String desc) { > >> // TODO Auto-generated constructor stub > >> } > >> } > >> > >> The aspectJ code: > >> > >> public aspect MyTest { > >> public Child.new(String desc, int num) { > >> System.out.println("Child Name:" + this.name); > >> } > >> } > >> > >> If I instantiate the Child with the new constructor: > >> > >> new Child("A child", 5) > >> > >> the member variable **this.name** is not initialized as will be done > with > >> the original constructor. > >> > >> But, if I call the original constructor: > >> > >> new Child("A child") > >> > >> the member variable **this.name** will be initialized to "John" as > usual > >> > >> The result: > >> > >>> Child Name:null > >> > >> **Is this a limitation of AspectJ? Is there anyway to resolve this > >> issue?** > >> > >> I don't really want to add the code for member variable initialization > to > >> the new constructor. > >> > >> *Q2:* > >> It seems **in the newly added constructor**, **super.method()** can not > >> be > >> correctly resolved. > >> > >> > >> The class which I'll add a new constructor to: > >> > >> public class Child extends Parent{ > >> > >> public String name = "John"; > >> > >> public Child(String desc) { > >> > >> } > >> } > >> > >> **Child** extends **Parent**. **Parent** has a method **init()** > >> > >> public class Parent { > >> > >> public void init() { > >> //.... > >> } > >> > >> } > >> > >> I add a new constructor for the **Child** in my aspect. > >> public aspect MyTest { > >> public Child.new(String desc, int num) { > >> super.init(); > >> } > >> } > >> > >> The above aspect code will trigger an exception. > >> > >> Exception in thread "main" java.lang.NoSuchMethodError: > >> com.test2.Child.ajc$superDispatch$com_test2_Child$init()V > >> at > >> MyTest.ajc$postInterConstructor$MyTest$com_test2_Child(MyTest.aj:19) > >> at com.test2.Child. > > <init> > > (Child.java:1) > >> at MainProgram.main(MainProgram.java:11) > >> > >> My workaround is to define **another method** for my class **Child**, > and > >> indirectly call the super.method() within that method > >> > >> > >> For example, add a new method that calls **super.init()** for **Child** > >> > >> public void Child.initState() > >> { > >> super.init(); > >> } > >> > >> Now, I can call initState() in the newly added constructor like below: > >> > >> public aspect MyTest { > >> public Child.new(String desc, int num) { > >> this.initState(); > >> } > >> } > >> > >> **Is this a limitation of AspectJ? Is this the only way to resolve this > >> issue?** > >> > >> Thank you all for your time :) > >> > >> > >> > >> -- > >> View this message in context: > >> > http://aspectj.2085585.n4.nabble.com/Behaviours-of-new-constructor-added-by-AspectJ-ITD-tp4651015p4651019.html > >> Sent from the AspectJ - users mailing list archive at Nabble.com. > >> _______________________________________________ > >> aspectj-users mailing list > >> > > > aspectj-users@ > > >> https://dev.eclipse.org/mailman/listinfo/aspectj-users > > _______________________________________________ > > aspectj-users mailing list > > > aspectj-users@ > > > https://dev.eclipse.org/mailman/listinfo/aspectj-users > > > > > > -- > View this message in context: > http://aspectj.2085585.n4.nabble.com/Behaviours-of-new-constructor-added-by-AspectJ-ITD-tp4651015p4651021.html > Sent from the AspectJ - users mailing list archive at Nabble.com. > _______________________________________________ > 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
