package lawOfDemeter.classform;
import java.util.*;
import lawOfDemeter.Any;

/**
 * @authors David H. Lorenz and Pengcheng Wu
 * @version 0.4, 12/19/02
 */

abstract aspect Perscope extends ClassSupplier {
  abstract pointcut Perscope();  
  before() : Any.Execution() {
    st.push(new HashSet());
  }
  before() : Perscope() {
    HashSet aSet = (HashSet) st.peek();
    aSet.addAll(getSuppliers(
      thisEnclosingJoinPointStaticPart,
      thisJoinPointStaticPart));
  }
  after(): Any.Execution() {
    st.pop();
  }

  static boolean contains(Class targetType) {
    HashSet innermost = (HashSet)Perscope.st.peek();
    return innermost.contains(targetType);
  }
  private static Stack st = new Stack();
}

