hi, Any update please?
Am i putting a wrong qn?/ should i be more clear some where?/ is this not possible at all???/ do we have any work arounds for such scenarios? kindly hlep. On Mon, Jun 22, 2009 at 11:28 PM, Ravi Chandra <ravi....@gmail.com> wrote: > hi, > > Any update on this please. > > *Issue:* > 1. I have a variable defined with annotation > 2, This variable is being assigned to an ArrayList > > *Now, i want to intercept this call *and execute a logic by AOP. In the > interception > 1. I should be able to access the annotated value > 2. Return a new object called MYLIst > > The below mail therad is abt the same, > 1. If i use set(* *List) then i cant access the annotation > 2. If i use the below its (in eclipse) is throwing compilation errors > > pointcut listCut(LIST in) : set(@LIST* (*) * ) && @annotation(in); > > ArrayList around( LIST in) :listCut(in){ > System.out.println("**annotation " + thisJoinPoint + " ann:" > + in.value()); > return new MyList(); > } > > *The java class i want to intercept::* > > public static void main(String[] argv) { > UserAttributes u = new UserAttributes(); > u.alias = new ArrayList(); > } > > *Any ideas where i am going wrong? Please help.* > > Regards, > Ravi > > > ---------- Forwarded message ---------- > From: Ravi Chandra <ravi....@gmail.com> > Date: Sun, Jun 21, 2009 at 7:23 PM > Subject: Re: [aspectj-users] (no subject) > To: aspectj-users@eclipse.org > > > hi, > > That was an intelligent soln. > > But, I have annotations on each of the fields( i didnt mention this > previously) and during the interception by AOP i would like to access the > annotated info also. > > *Original Class:* > public class UserAttributes implements Interceptable { > @IN(3) > private List<String> alias; > > public int getAge() { > return age; > } > > public static void main(String[] argv) { > UserAttributes u = new UserAttributes(); > u.alias = new ArrayList(); > u.children = new HashMap<String, String>(); > } > } > > *and i tried:* > > pointcut annCut(Interceptable m, IN in):target(m) && set(@IN* (*) * ) > && @annotation(in); > > pointcut annListCut(Interceptable m, IN in) : cflow(annCut(m,in)) && > cflow(listCut()) && target(Interceptable+); > > after/ Around (Interceptable m, IN in): annListCut(m,in){ > * //here i should be able to get the fields annotation + return > MYList object* > System.out.println("point cut + annotation is.." + in.value()); > } > > *But this is cutting off * > > * public int* getAge() { > return age; > } > > method also, *which is not intended. * > > Any ideas please.. > > regards, > ravi > > > On Sun, Jun 21, 2009 at 3:40 PM, Simone Gianni <simo...@apache.org> wrote: > >> Hi Ravi, >> you can declare a pointcut around the creation of any ArrayList, returning >> MyArrayList as long as they are assign-compatible. >> >> That means that as long as : >> >> public class MyArrayList extends ArrayList { ... >> >> you can write : >> >> ArrayList around() : call(* ArrayList.new()) { >> return new MyArrayList(); >> } >> >> This will replace do the trick. You can narrow it down to some classes >> using within, withincode etc.. >> >> ArrayList around() : call(* ArrayList.new()) && within(com.mycompany.*) { >> return new MyArrayList(); >> } >> >> And you can add other advice to add parameters : >> >> ArrayList around(int size) : call(* ArrayList.new(int)) && args(size) { >> return new MyArrayList(size); >> } >> >> etc... >> >> In my Apache Magma Lab I use this kind of advice extensively to offer a >> simpler alternative to the factory pattern/dependency injection/context >> pollution. >> >> Hope this helps, >> Simone >> >> >> >> >> >> Ravi Chandra wrote: >> >>> hi, >>> >>> I am trying hard to get a solution to this problem since last 4 days.. >>> but no luck; the issue is as below: >>> >>> I have java classes of this form >>> >>> public class UserAttributes implements Interceptable { >>> private List<String> alias; >>> private void someMethod(){ >>> *alias = new ArrayList(); // point 1* >>> .... etc etc >>> } >>> } >>> >>> Now the problem is : >>> >>> When ever a variable is assigned to new ArrayList() i want it to be >>> changed to new MyArrayList() instead >>> >>> i.e..: the point 1 above changes to an eqvivalent of >>> >>> *alias = new MYArrayList();* >>> >>> I am able to get this done >>> >>> aspect abc { >>> pointcut listCut(Interceptable m, IN in):target(m) && >>> set(java.util.List+ *); >>> after(Interceptable m, IN in):listCut(m,in){ >>> *UserAttributes.setAlias( new MyArrayList());* >>> } >>> } >>> >>> *but the point cut is getting very class specific. *I have abt 1000 >>> classes which have to be modified this way where ever the ArrayList is being >>> used, now with this approach i need to write 1000 files; isnt there a >>> generic way to do this? >>> >>> Any pointers/ help ? please suggest. >>> >>> regards, >>> ravi >>> >>> ------------------------------------------------------------------------ >>> >>> _______________________________________________ >>> aspectj-users mailing list >>> aspectj-users@eclipse.org >>> https://dev.eclipse.org/mailman/listinfo/aspectj-users >>> >>> >> >> >> -- >> Simone Gianni CEO Semeru s.r.l. Apache Committer >> http://www.simonegianni.it/ >> >> _______________________________________________ >> aspectj-users mailing list >> aspectj-users@eclipse.org >> https://dev.eclipse.org/mailman/listinfo/aspectj-users >> > > >
_______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org https://dev.eclipse.org/mailman/listinfo/aspectj-users