package lawOfDemeter.objectform; import lawOfDemeter.Any; /** * @authors David H. Lorenz and Pengcheng Wu * @version 0.4, 11/08/02 */ public aspect Perthis extends ObjectSupplier perthis(Any.ConstructorExecution()) { before(Object target): // direct parts Any.Set(target) { Perthis.aspectOf(target).addAll(thisJoinPoint.getArgs()); } after(Object thiz,Object target): // check Any.MethodCall(thiz,target) { if (!Global.globalPreferred.contains(target) && !Perthis.aspectOf(thiz). contains(target)) System.out.println(" !! LoD Object Violation !! " + thisJoinPointStaticPart+at(thisJoinPointStaticPart)); } public boolean contains(Object target) { return super.contains(target) || Percflow.aspectOf().contains(target); } protected String at(org.aspectj.lang.JoinPoint.StaticPart jp) { return " at " + jp.getSourceLocation().getFileName() + ":" + jp.getSourceLocation().getLine() + ":" + jp.getSourceLocation().getColumn(); } }