// This file is automatically generated by DemeterJ.

CopyVisitor {
  {{
    private java.util.Stack history = new java.util.Stack();
    public CopyVisitor(Class firstClass) {
      try {
        history.push(firstClass.newInstance());
      } catch(Exception e) {
        e.printStackTrace();
      }
    }
  }}
  get copy {{ return history.peek(); }}
  return Object {{ get_copy() }}


  before -> A, x, X {{
    A it = (A) history.peek();
    X p = new X();
    it.set_x(p);
    history.push(p);
  }}

  after -> A, x, X {{
    history.pop();
  }}

  before -> A, c, C {{
    A it = (A) history.peek();
    C p = new C();
    it.set_c(p);
    history.push(p);
  }}

  after -> A, c, C {{
    history.pop();
  }}

  before -> A, d, D {{
    A it = (A) history.peek();
    D p = new D();
    it.set_d(p);
    history.push(p);
  }}

  after -> A, d, D {{
    history.pop();
  }}

  before -> X, b, B {{
    X it = (X) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_b((B) p);
    history.push(p);
  }}

  after -> X, b, B {{
    history.pop();
  }}

  before -> F, g, G {{
    F it = (F) history.peek();
    G p = new G();
    it.set_g(p);
    history.push(p);
  }}

  after -> F, g, G {{
    history.pop();
  }}

  before -> F, h, H {{
    F it = (F) history.peek();
    H p = new H();
    it.set_h(p);
    history.push(p);
  }}

  after -> F, h, H {{
    history.pop();
  }}

  before -> PrintVisitor, indent, int {{
    PrintVisitor it = (PrintVisitor) history.peek();
    it.set_indent(dest);
  }}

  before -> PrintVisitor, needSpace, boolean {{
    PrintVisitor it = (PrintVisitor) history.peek();
    it.set_needSpace(dest);
  }}

  before -> SubgraphVisitor, is_equal, boolean {{
    SubgraphVisitor it = (SubgraphVisitor) history.peek();
    it.set_is_equal(dest);
  }}

  before -> EqualVisitor, is_equal, boolean {{
    EqualVisitor it = (EqualVisitor) history.peek();
    it.set_is_equal(dest);
  }}

  before -> DisplayVisitor, indent, int {{
    DisplayVisitor it = (DisplayVisitor) history.peek();
    it.set_indent(dest);
  }}

  before -> TraceVisitor, indent, int {{
    TraceVisitor it = (TraceVisitor) history.peek();
    it.set_indent(dest);
  }}

}