// 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 -> Main, s, String {{
    Main it = (Main) history.peek();
    it.set_s(dest);
  }}

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

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

  before -> X, a_list, A_List {{
    X it = (X) history.peek();
    A_List p = new A_List();
    it.set_a_list(p);
    history.push(p);
  }}

  after -> X, a_list, A_List {{
    history.pop();
  }}

  before -> A, ident, Ident {{
    A it = (A) history.peek();
    it.set_ident(dest);
  }}

  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);
  }}

  before -> A_List, first, Nonempty_A_List {{
    A_List it = (A_List) history.peek();
    Nonempty_A_List p = new Nonempty_A_List();
    it.set_first(p);
    history.push(p);
  }}

  after -> A_List, first, Nonempty_A_List {{
    history.pop();
  }}

  before -> Nonempty_A_List, it, A {{
    Nonempty_A_List it = (Nonempty_A_List) history.peek();
    A p = new A();
    it.set_it(p);
    history.push(p);
  }}

  after -> Nonempty_A_List, it, A {{
    history.pop();
  }}

  before -> Nonempty_A_List, next, Nonempty_A_List {{
    Nonempty_A_List it = (Nonempty_A_List) history.peek();
    Nonempty_A_List p = new Nonempty_A_List();
    it.set_next(p);
    history.push(p);
  }}

  after -> Nonempty_A_List, next, Nonempty_A_List {{
    history.pop();
  }}

}