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();
  }
/*]*/}

