// 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 -> TraversalPaths, tracematch_list, TraceMatch_List {{
    TraversalPaths it = (TraversalPaths) history.peek();
    TraceMatch_List p = new TraceMatch_List();
    it.set_tracematch_list(p);
    history.push(p);
  }}

  after -> TraversalPaths, tracematch_list, TraceMatch_List {{
    history.pop();
  }}

  before -> TraceMatch, decls, VariableDeclaration_CList {{
    TraceMatch it = (TraceMatch) history.peek();
    VariableDeclaration_CList p = new VariableDeclaration_CList();
    it.set_decls(p);
    history.push(p);
  }}

  after -> TraceMatch, decls, VariableDeclaration_CList {{
    history.pop();
  }}

  before -> TraceMatch, SymbolDeclaration, Symbol_List {{
    TraceMatch it = (TraceMatch) history.peek();
    Symbol_List p = new Symbol_List();
    it.set_SymbolDeclaration(p);
    history.push(p);
  }}

  after -> TraceMatch, SymbolDeclaration, Symbol_List {{
    history.pop();
  }}

  before -> TraceMatch, regex, RegEx {{
    TraceMatch it = (TraceMatch) history.peek();
    RegEx p = new RegEx();
    it.set_regex(p);
    history.push(p);
  }}

  after -> TraceMatch, regex, RegEx {{
    history.pop();
  }}

  before -> VariableDeclaration, classname, ClassName {{
    VariableDeclaration it = (VariableDeclaration) history.peek();
    ClassName p = new ClassName();
    it.set_classname(p);
    history.push(p);
  }}

  after -> VariableDeclaration, classname, ClassName {{
    history.pop();
  }}

  before -> VariableDeclaration, variablename, VariableName {{
    VariableDeclaration it = (VariableDeclaration) history.peek();
    VariableName p = new VariableName();
    it.set_variablename(p);
    history.push(p);
  }}

  after -> VariableDeclaration, variablename, VariableName {{
    history.pop();
  }}

  before -> Symbol, name, Name {{
    Symbol it = (Symbol) history.peek();
    Name p = new Name();
    it.set_name(p);
    history.push(p);
  }}

  after -> Symbol, name, Name {{
    history.pop();
  }}

  before -> Symbol, kind, Kind {{
    Symbol it = (Symbol) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_kind((Kind) p);
    history.push(p);
  }}

  after -> Symbol, kind, Kind {{
    history.pop();
  }}

  before -> Symbol, pointcutexp, PointcutExp {{
    Symbol it = (Symbol) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_pointcutexp((PointcutExp) p);
    history.push(p);
  }}

  after -> Symbol, pointcutexp, PointcutExp {{
    history.pop();
  }}

  before -> Call, classname, ClassName {{
    Call it = (Call) history.peek();
    ClassName p = new ClassName();
    it.set_classname(p);
    history.push(p);
  }}

  after -> Call, classname, ClassName {{
    history.pop();
  }}

  before -> Call, methodname, MethodName {{
    Call it = (Call) history.peek();
    MethodName p = new MethodName();
    it.set_methodname(p);
    history.push(p);
  }}

  after -> Call, methodname, MethodName {{
    history.pop();
  }}

  before -> Target, variablename, VariableName {{
    Target it = (Target) history.peek();
    VariableName p = new VariableName();
    it.set_variablename(p);
    history.push(p);
  }}

  after -> Target, variablename, VariableName {{
    history.pop();
  }}

  before -> This, variablename, VariableName {{
    This it = (This) history.peek();
    VariableName p = new VariableName();
    it.set_variablename(p);
    history.push(p);
  }}

  after -> This, variablename, VariableName {{
    history.pop();
  }}

  before -> Compound, op, Op {{
    Compound it = (Compound) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_op((Op) p);
    history.push(p);
  }}

  after -> Compound, op, Op {{
    history.pop();
  }}

  before -> Compound, args, PointcutExp_List {{
    Compound it = (Compound) history.peek();
    PointcutExp_List p = new PointcutExp_List();
    it.set_args(p);
    history.push(p);
  }}

  after -> Compound, args, PointcutExp_List {{
    history.pop();
  }}

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

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

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

  before -> VariableName, ident, Ident {{
    VariableName it = (VariableName) 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 -> TraceMatch_List, first, Nonempty_TraceMatch_List {{
    TraceMatch_List it = (TraceMatch_List) history.peek();
    Nonempty_TraceMatch_List p = new Nonempty_TraceMatch_List();
    it.set_first(p);
    history.push(p);
  }}

  after -> TraceMatch_List, first, Nonempty_TraceMatch_List {{
    history.pop();
  }}

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

  after -> VariableDeclaration_CList, first, Nonempty_VariableDeclaration_CList {{
    history.pop();
  }}

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

  after -> Symbol_List, first, Nonempty_Symbol_List {{
    history.pop();
  }}

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

  after -> PointcutExp_List, first, Nonempty_PointcutExp_List {{
    history.pop();
  }}

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

  after -> Nonempty_TraceMatch_List, it, TraceMatch {{
    history.pop();
  }}

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

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

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

  after -> Nonempty_VariableDeclaration_CList, it, VariableDeclaration {{
    history.pop();
  }}

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

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

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

  after -> Nonempty_Symbol_List, it, Symbol {{
    history.pop();
  }}

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

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

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

  after -> Nonempty_PointcutExp_List, it, PointcutExp {{
    history.pop();
  }}

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

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

}