import java.util.*;
abstract aspect Back {
  interface Source { Vector getTargets(); }
  interface Target {  } 
  abstract pointcut modifyTargets(Source s,  Target t);
  void around(Source s, Target t): modifyTargets(s,t) {
    Vector targets = s.getTargets();
    int sizebefore = targets.size();
    proceed(s,t);
    int sizeafter = targets.size();
    if (sizebefore<sizeafter)  t.back = s;
    else t.back = null;
  }

  Source Target.back;
  Source Target.getSource() { return back; }
  

}

