That does not seem right. What do your pointcuts look like? Also, *is* the constructor really defined? I am 100% sure you can intercept constructor calls like this.
Eric > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:aspectj-users- > [EMAIL PROTECTED] On Behalf Of Sarthak Grover > Sent: Sunday, November 26, 2006 7:42 PM > To: [email protected] > Subject: RE: [aspectj-users] Modifying constructors > > Thanks for the advice Eric, was very helpful in understanding the > approach I need to take. > > I tried doing as you suggested but came across another issue: > > I tried the following: > > 1. Car around(String t, int my): CarConstructor(t,my) 2. { > 3. String Color = getColor(); //Obtained this using a simple user > input > 4. return new Car(t,color,my); > 5. } > > The problem I faced in this was the compiler was giving error on Line > 4 that the Constructor Car(String, String , int) was not defined. > > So I created another method Car(String t, String Color, int my) with a > return type of Car (I had to specify a return type, otherwise it gives > an error) > > As a result I ended up having another method which was something like > this: > > public Car Car(String t, String Color, int my) { my_Type = t; //Locally > defined variables my_Color = Color; my_Model = my; return Car(my_Type, > my_Color, my_Model); } > > I don't think I should be returning anything when I am creating a > constructor but am forced to return that type. > > Even with this setup in place, I get the same error message as earlier > that "Constructor Car(String, String, int) is undefined" > > The only way I have been able to compile without errors is by modifying > Line 4 of the first method to be: > > return Car(t, color, my); > > instead of "return new Car(t, color, my)" which fixes the compilation > issues but creates StackOverflow error during runtime (recursive loop > maybe?) > > Again I think I am in a pickle because of a conceptual mistake in > creating and using constructors. > > I think I must've made this as clear as mud so just a brief overview of > what I am trying to achieve here : > > - I originally had a Car constructor with 2 parameters. > > - A hardcoded file output stream in the lines of objOut.writeObject(new > Car("Sedan", 2004); creates these objects and writes them to a file > > - Now I am trying to add a 3rd attribute to this object for which I > need to modify the original constructor and send a new outputstream > such as objOut.writeObject(new Car("Sedan", "Red", 2004); > > Thanks again for your time and feedback > > Regards, > > Sarthak > > > > > ================== > > Date: Mon, 20 Nov 2006 21:09:43 -0500 > From: "Eric Bodden" <[EMAIL PROTECTED]> > Subject: RE: [aspectj-users] Modifying constructors > To: <[email protected]> > > Hello. > > I think the main problem is that you are using an execution pointcut, > plus I don't understand what that is that you write in your advice > body. > > So conceptually you want to intercept the creation of a car and create > the car by invoking another constructor. How does one invoke a > constructor? By using "new". So thy the following, I think this should > work for you. > > pointcut CarConstructor(String Type, int ModelYear): call(Car.new(..)) > && args(Type,ModelYear); > > Car around(String t, int my): CarConstructor(t,my) { > Color = getColor(); //not even sure where you wanna get the > color from > return new Car(t,color,my); > } > > Note that I forward the original arguments. Also note that the around > advice does not "proceed", i.e. the original joinpoint (constructor) is > never called. > > > Eric > > ================== > _______________________________________________ > 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
