import org.aspectj.lang.reflect.FieldSignature; aspect Check { java.util.HashMap map=new java.util.HashMap(); java.util.HashMap map2=new java.util.HashMap(); java.util.HashMap global = new java.util.HashMap(); java.util.Stack method_args = new java.util.Stack(); java.util.Stack return_values = new java.util.Stack(); pointcut callsite(Object caller,Object callee): this(caller) && target(callee) && call(* *(..)) && !within(Check); pointcut inmethodbody(Object a): this(a) && withincode(* *.*(..)) && !within(Check) && call(*.new(..)); after() returning (Object o): get(static * *.*) && !within(Check) { global.put(o,null); } before(Object a,Object b): set(* *.*) && args(b) && this(a) && !within(Check) { if(!map.containsKey(a)) map.put(a,new java.util.HashMap()); java.util.HashMap v = (java.util.HashMap)map.get(a); v.put(((FieldSignature)thisJoinPoint.getSignature()).getName(),b); } // after() returning(Object o): call(* *.*(..)) { // System.out.println(o); // } after(Object o) returning(Object a): inmethodbody(o) { if(!map2.containsKey(o)) map2.put(o,new java.util.Vector()); java.util.Vector v = (java.util.Vector)map2.get(o); v.add(a); } before(): execution(* *.*(..)) { method_args.push(thisJoinPoint.getArgs()); return_values.push(new java.util.HashMap()); } after(): execution(* *.*(..)) { method_args.pop(); return_values.pop(); } after(Object caller,Object callee) returning (Object o): callsite(caller,callee) { java.util.HashMap m=(java.util.HashMap) return_values.peek(); boolean flag=m.containsKey(callee); if(!thisJoinPoint.getSignature().getName().startsWith("get")) m.put(o,null); if(flag) return; if(caller==callee || global.containsKey(callee)) return; Object[] arguments = (Object[])method_args.peek(); for(int i=0; i< arguments.length; i++) { if(callee==arguments[i]) { return; } } if(map.containsKey(caller)) { java.util.Map v = (java.util.Map)map.get(caller); if(v.containsValue(callee)) { return; } // Collection here? } if(map2.containsKey(caller)) { java.util.Vector v = (java.util.Vector)map2.get(caller); for(int i=0;i