package lawOfDemeter.objectform; import lawOfDemeter.Any; import org.aspectj.lang.JoinPoint; import java.util.*; /** * @authors David H. Lorenz and Pengcheng Wu * @version 0.7, 12/01/02 */ /*** LINE 9 ***---*** DO NOTE MOVE THIS LINE ***---***/ aspect Check { private pointcut IgnoreCalls(): call(* java..*.*(..)); private pointcut IgnoreTargets(): get(static * java..*.*); after() returning(Object o):IgnoreTargets() { ignoredTargets.put(o,o); } after(Object thiz,Object /*[*/target/*]*//**+target+**/): Any.MethodCall(thiz,/*[*/target/*]*//**+target+**/) && !IgnoreCalls() { if (!ignoredTargets.containsKey(/*[*/target/*]*//**+target+**/) && !Pertarget.aspectOf(thiz).contains(/*[*/target/*]*//**+target+**/)) System.out.println( " !! LoD Object Violation !! " + thisJoinPointStaticPart/*[*/ + at(thisJoinPointStaticPart)/*]*/); } private IdentityHashMap ignoredTargets =new IdentityHashMap(); /*[*/ private String at(JoinPoint.StaticPart jp) { return " at " + jp.getSourceLocation(). getFileName() + ":" + jp.getSourceLocation().getLine() + ":" + jp.getSourceLocation().getColumn(); } /*]*/}