Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] capturing methods without a call to another method

Hi Nick,
I checked out your suggestion about casts, i get a runtime Error that looks like
this:

prompt:\>ajbrowser HelloWorld.lst
java.lang.VerifyError: (class: de/rohith/PrinterWorld, method:
returnArrayWithCloning signature: ()[Ljava/lang
/Integer;) Incompatible argument to function
        at de.rohith.HelloWorld.main(HelloWorld.java:18)
Exception in thread "main"

I wonder what the reason could be?

And with the warning declaration, aspectj (both the tool and eclipse plug-in)
report all the methods that return <something> and at times those that return
nothing as well. With the signature (public *[] *(..)), it looks like aspectj
even reports main() method of the calling class, atleast in my case it did. Am i
missing something here!? Thanks in advance...

Regards,
Rohith.

----- Original Message ----- 
From: "Nicholas Lesiecki" <ndlesiecki@xxxxxxxxx>
To: <aspectj-users@xxxxxxxxxxx>
Sent: Tuesday, August 17, 2004 6:35 AM
Subject: Re: [aspectj-users] capturing methods without a call to another method


> > The solution you suggested was really helpful, but if i implemented
> > this, it
> > would mean that i have to re-cast the Object[] returned by around
> > advice to its
> > respective type on assignment to a variable/call to the method.
>
> AspectJ performs the cast for you. So the advice below (should) work
> for String[]'s or Integer[]'s or whatever.
>
> >  Is there any way
> > through which i can capture a pointcut like Object.clone() inside
> > another
> > pointcut like my method signature? or if it all it isn't possible, can
> > i atleast
> > list all the methods that match this signature?
>
> Not as far as I know, though there has been discussion about this in
> the past.
>
> > for ex. a method with the
> > signature (*[] *(..))? The problem being, initially i don't want to
> > use Aspects
> > in production environment, so the below method wouldn't fit well.
>
> you can use declare warning execution(*[] *(..))
>
> Hope I've helped,
> Nick
>
> On Aug 16, 2004, at 2:45 AM, Rohith Ajjampur wrote:
>
> > Thankyou Nick,
> > The solution you suggested was really helpful, but if i implemented
> > this, it
> > would mean that i have to re-cast the Object[] returned by around
> > advice to its
> > respective type on assignment to a variable/call to the method. Is
> > there any way
> > through which i can capture a pointcut like Object.clone() inside
> > another
> > pointcut like my method signature? or if it all it isn't possible, can
> > i atleast
> > list all the methods that match this signature? for ex. a method with
> > the
> > signature (*[] *(..))? The problem being, initially i don't want to
> > use Aspects
> > in production environment, so the below method wouldn't fit well.
> >
> > Regards,
> > Rohith.
> >
> > ----- Original Message -----
> > From: "Nicholas Lesiecki" <ndlesiecki@xxxxxxxxx>
> > To: <aspectj-users@xxxxxxxxxxx>
> > Sent: Thursday, August 12, 2004 10:36 PM
> > Subject: Re: [aspectj-users] capturing methods without a call to
> > another method
> >
> >
> >> It's very easy to enforce your policy with around advice:
> >>
> >> //[warning: uncompiled]
> >> Object[] around() : execution(*[] *(..)){
> >> Object[] original = proceed();
> >> return original.clone();
> >> }
> >>
> >> However, this advice runs the risk of double-cloning if the method
> >> already clones the array. Also, a method could allocate a local array
> >> which you might not want cloned...
> >>
> >> As to detection, well, that's a bit more difficult, since you would
> >> have to keep state about whether a given array had had clone called on
> >> it at some point during the cflow of a method. You might be able to do
> >> this with a percflow() aspect, but the question you would want to ask
> >> is: why not just enforce the policy automatically with advice (as
> >> above)?
> >>
> >> Cheers,
> >> Nick
> >>
> >>
> >> On Aug 12, 2004, at 8:30 AM, Rohith Ajjampur wrote:
> >>
> >>> Hello all,
> >>>
> >>> I am trying to implement a policy of cloning an array before retuning
> >>> a refence
> >>> to it in a method across an API, here is my test code with an aspect:
> >>>
> >>> public aspect HelloWorldAspect {
> >>>     pointcut hello(): !within(HelloWorldAspect);
> >>>
> >>>     pointcut method(): execution(*[] *(..));
> >>>
> >>>     pointcut cloning(): call(* java.lang.Object.clone());
> >>>
> >>>     before(): cflow(method()) && cloning() && hello() {
> >>>         print("Before : ", thisEnclosingJoinPointStaticPart);
> >>>     }
> >>>
> >>>     after(): cflow(method())&& cloning() && hello() {
> >>>         print("After : ", thisEnclosingJoinPointStaticPart);
> >>>     }
> >>> }
> >>>
> >>> public class World {
> >>>  private Integer[] intArray = new Integer[2];
> >>>
> >>>     public Integer[] returnArrayWithCloning() {
> >>>      for (int i = 0; i < intArray.length; i++) {
> >>>         intArray[i] = new Integer(i++);
> >>>      }
> >>>      return (Integer[])intArray.clone();
> >>>     }
> >>>
> >>>     public Integer[] returnArrayWithoutCloning() {
> >>>      return intArray;
> >>>     }
> >>> }
> >>>
> >>> With the above pointcuts and advices i get all the calls to the
> >>> method
> >>> World.returnArrayWithCloning(), that is quiet clear, but i would like
> >>> to get a
> >>> list of all the methods that return an array without calling its
> >>> clone() method.
> >>> Please suggest me how to get this result.
> >>>
> >>> Regards,
> >>> Rohith.
> >>>
> >>>
> >>> _______________________________________________
> >>> aspectj-users mailing list
> >>> aspectj-users@xxxxxxxxxxx
> >>> http://dev.eclipse.org/mailman/listinfo/aspectj-users
> >>>
> >>>
> >> Nicholas Lesiecki
> >> Software Craftsman, specializing in J2EE,
> >> Agile Methods, and aspect-oriented programming
> >>
> >> Books:
> >> * Mastering AspectJ: http://tinyurl.com/66vf
> >> * Java Tools for Extreme Programming: http://tinyurl.com/66vt
> >>
> >> Articles on AspectJ:
> >> * http://tinyurl.com/66vu and http://tinyurl.com/66vv
> >>
> >> _______________________________________________
> >> aspectj-users mailing list
> >> aspectj-users@xxxxxxxxxxx
> >> http://dev.eclipse.org/mailman/listinfo/aspectj-users
> >>
> >
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > http://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
> >
> Nicholas Lesiecki
> Software Craftsman, specializing in J2EE,
> Agile Methods, and aspect-oriented programming
>
> Books:
> * Mastering AspectJ: http://tinyurl.com/66vf
> * Java Tools for Extreme Programming: http://tinyurl.com/66vt
>
> Articles on AspectJ:
> * http://tinyurl.com/66vu and http://tinyurl.com/66vv
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>



Back to the top