Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Modifying constructors

I think I found the problem. I was creating the constructor in the
Aspect class itself rather than in the original Car class. I was under
the impression that when using Aspects, we don't modify the code
internally and instead weave new code around it. Now the program seems
to be working fine!

Is there some way of defining constructors outside their given class
using aspects?

On 11/27/06, Eric Bodden <eric.bodden@xxxxxxxxxxxxxx> wrote:
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: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-
> bounces@xxxxxxxxxxx] On Behalf Of Sarthak Grover
> Sent: Sunday, November 26, 2006 7:42 PM
> To: aspectj-users@xxxxxxxxxxx
> 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" <eric.bodden@xxxxxxxxxxxxxx>
> Subject: RE: [aspectj-users] Modifying constructors
> To: <aspectj-users@xxxxxxxxxxx>
>
> 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
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users



--

Sarthak Grover
Graduate Student
Electrical & Computer Engineering
Cleveland State University


Back to the top