package CSU670_Plugin.gen;
import edu.neu.ccs.demeter.dj.*;
import edu.neu.ccs.demeter.aplib.cd.ClassDefVisitor;
import edu.neu.ccs.demeter.aplib.cd.ClassDef;
import java.io.*;
import java.util.*;
import edu.neu.ccs.demeter.*;
class CopyVisitor extends UniversalVisitor {
  public CopyVisitor() {
    super();
  }

    private java.util.Stack history = new java.util.Stack();
    public CopyVisitor(Class firstClass) {
      try {
        history.push(firstClass.newInstance());
      } catch(Exception e) {
        e.printStackTrace();
      }
    }
  
  public Object get_copy() { return history.peek(); }
  Object get_return_val() { return get_copy() ; }
  public void before_aspects(AspectFile source, Aspects dest) {
    AspectFile it = (AspectFile) history.peek();
    Aspects p = new Aspects();
    it.set_aspects(p);
    history.push(p);
  }
  public void after_aspects(AspectFile source, Aspects dest) {
    history.pop();
  }
  public void before_aspectbody(Aspect source, AspectBody dest) {
    Aspect it = (Aspect) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_aspectbody((AspectBody) p);
    history.push(p);
  }
  public void after_aspectbody(Aspect source, AspectBody dest) {
    history.pop();
  }
  public void before_aspectname(AspectCD source, AspectName dest) {
    AspectCD it = (AspectCD) history.peek();
    AspectName p = new AspectName();
    it.set_aspectname(p);
    history.push(p);
  }
  public void after_aspectname(AspectCD source, AspectName dest) {
    history.pop();
  }
  public void before_cdbody(AspectCD source, CDBody dest) {
    AspectCD it = (AspectCD) history.peek();
    CDBody p = new CDBody();
    it.set_cdbody(p);
    history.push(p);
  }
  public void after_cdbody(AspectCD source, CDBody dest) {
    history.pop();
  }
  public void before_aspectname(AspectTV source, AspectName dest) {
    AspectTV it = (AspectTV) history.peek();
    AspectName p = new AspectName();
    it.set_aspectname(p);
    history.push(p);
  }
  public void after_aspectname(AspectTV source, AspectName dest) {
    history.pop();
  }
  public void before_tvbody(AspectTV source, TVBody dest) {
    AspectTV it = (AspectTV) history.peek();
    TVBody p = new TVBody();
    it.set_tvbody(p);
    history.push(p);
  }
  public void after_tvbody(AspectTV source, TVBody dest) {
    history.pop();
  }
  public void before_tvdeclarations(TVBody source, TVDeclarations dest) {
    TVBody it = (TVBody) history.peek();
    TVDeclarations p = new TVDeclarations();
    it.set_tvdeclarations(p);
    history.push(p);
  }
  public void after_tvdeclarations(TVBody source, TVDeclarations dest) {
    history.pop();
  }
  public void before_tvdeclarationbody(TVDeclaration source, TVDeclarationBody dest) {
    TVDeclaration it = (TVDeclaration) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_tvdeclarationbody((TVDeclarationBody) p);
    history.push(p);
  }
  public void after_tvdeclarationbody(TVDeclaration source, TVDeclarationBody dest) {
    history.pop();
  }
  public void before_decchosenbody(DecChosen source, DecChosenBody dest) {
    DecChosen it = (DecChosen) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_decchosenbody((DecChosenBody) p);
    history.push(p);
  }
  public void after_decchosenbody(DecChosen source, DecChosenBody dest) {
    history.pop();
  }
  public void before_ident(ChosenSelector source, Ident dest) {
    ChosenSelector it = (ChosenSelector) history.peek();
    it.set_ident(dest);
  }
  public void before_ident(ChosenCD source, Ident dest) {
    ChosenCD it = (ChosenCD) history.peek();
    it.set_ident(dest);
  }
  public void before_decname(DecStrategy source, DecName dest) {
    DecStrategy it = (DecStrategy) history.peek();
    DecName p = new DecName();
    it.set_decname(p);
    history.push(p);
  }
  public void after_decname(DecStrategy source, DecName dest) {
    history.pop();
  }
  public void before_strategyexpression(DecStrategy source, StrategyExpression dest) {
    DecStrategy it = (DecStrategy) history.peek();
    StrategyExpression p = new StrategyExpression();
    it.set_strategyexpression(p);
    history.push(p);
  }
  public void after_strategyexpression(DecStrategy source, StrategyExpression dest) {
    history.pop();
  }
  public void before_nodesubsetname(DecNodeSet source, NodeSubsetName dest) {
    DecNodeSet it = (DecNodeSet) history.peek();
    NodeSubsetName p = new NodeSubsetName();
    it.set_nodesubsetname(p);
    history.push(p);
  }
  public void after_nodesubsetname(DecNodeSet source, NodeSubsetName dest) {
    history.pop();
  }
  public void before_decnodesetbody(DecNodeSet source, DecNodeSetBody dest) {
    DecNodeSet it = (DecNodeSet) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_decnodesetbody((DecNodeSetBody) p);
    history.push(p);
  }
  public void after_decnodesetbody(DecNodeSet source, DecNodeSetBody dest) {
    history.pop();
  }
  public void before_ident(NodeSubsetName source, Ident dest) {
    NodeSubsetName it = (NodeSubsetName) history.peek();
    it.set_ident(dest);
  }
  public void before_op(BCompound source, BinaryOp dest) {
    BCompound it = (BCompound) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_op((BinaryOp) p);
    history.push(p);
  }
  public void after_op(BCompound source, BinaryOp dest) {
    history.pop();
  }
  public void before_args(BCompound source, DecNodeSetBody_PCList dest) {
    BCompound it = (BCompound) history.peek();
    DecNodeSetBody_PCList p = new DecNodeSetBody_PCList();
    it.set_args(p);
    history.push(p);
  }
  public void after_args(BCompound source, DecNodeSetBody_PCList dest) {
    history.pop();
  }
  public void before_op(UCompound source, UnaryOp dest) {
    UCompound it = (UCompound) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_op((UnaryOp) p);
    history.push(p);
  }
  public void after_op(UCompound source, UnaryOp dest) {
    history.pop();
  }
  public void before_arg(UCompound source, DecNodeSetBody dest) {
    UCompound it = (UCompound) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_arg((DecNodeSetBody) p);
    history.push(p);
  }
  public void after_arg(UCompound source, DecNodeSetBody dest) {
    history.pop();
  }
  public void before_items(ClassNameSet source, ClassName_BCList dest) {
    ClassNameSet it = (ClassNameSet) history.peek();
    ClassName_BCList p = new ClassName_BCList();
    it.set_items(p);
    history.push(p);
  }
  public void after_items(ClassNameSet source, ClassName_BCList dest) {
    history.pop();
  }
  public void before_decname(GraphNodes source, DecName dest) {
    GraphNodes it = (GraphNodes) history.peek();
    DecName p = new DecName();
    it.set_decname(p);
    history.push(p);
  }
  public void after_decname(GraphNodes source, DecName dest) {
    history.pop();
  }
  public void before_classnameprefix(GraphNodeRegExp source, ClassNamePrefix dest) {
    GraphNodeRegExp it = (GraphNodeRegExp) history.peek();
    ClassNamePrefix p = new ClassNamePrefix();
    it.set_classnameprefix(p);
    history.push(p);
  }
  public void after_classnameprefix(GraphNodeRegExp source, ClassNamePrefix dest) {
    history.pop();
  }
  public void before_wildcard(GraphNodeRegExp source, WildCard dest) {
    GraphNodeRegExp it = (GraphNodeRegExp) history.peek();
    WildCard p = new WildCard();
    it.set_wildcard(p);
    history.push(p);
  }
  public void after_wildcard(GraphNodeRegExp source, WildCard dest) {
    history.pop();
  }
  public void before_ident(AspectName source, Ident dest) {
    AspectName it = (AspectName) history.peek();
    it.set_ident(dest);
  }
  public void before_ident(ClassNamePrefix source, Ident dest) {
    ClassNamePrefix it = (ClassNamePrefix) history.peek();
    it.set_ident(dest);
  }
  public void before_ident(DecName source, Ident dest) {
    DecName it = (DecName) history.peek();
    it.set_ident(dest);
  }
  public void before_text(CDBody source, Text dest) {
    CDBody it = (CDBody) history.peek();
    it.set_text(dest);
  }
  public void before_aspect_list(Aspects source, Aspect_List dest) {
    Aspects it = (Aspects) history.peek();
    Aspect_List p = new Aspect_List();
    it.set_aspect_list(p);
    history.push(p);
  }
  public void after_aspect_list(Aspects source, Aspect_List dest) {
    history.pop();
  }
  public void before_tvdeclaration_list(TVDeclarations source, TVDeclaration_List dest) {
    TVDeclarations it = (TVDeclarations) history.peek();
    TVDeclaration_List p = new TVDeclaration_List();
    it.set_tvdeclaration_list(p);
    history.push(p);
  }
  public void after_tvdeclaration_list(TVDeclarations source, TVDeclaration_List dest) {
    history.pop();
  }
  public void before_strategy(StrategyExpression source, Strategy dest) {
    StrategyExpression it = (StrategyExpression) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_strategy((Strategy) p);
    history.push(p);
  }
  public void after_strategy(StrategyExpression source, Strategy dest) {
    history.pop();
  }
  public void before_parsedNameMap(SimpleStrategy source, NameMap dest) {
    SimpleStrategy it = (SimpleStrategy) history.peek();
    NameMap p = new NameMap();
    it.set_parsedNameMap(p);
    history.push(p);
  }
  public void after_parsedNameMap(SimpleStrategy source, NameMap dest) {
    history.pop();
  }
  public void before_edges(StrategyGraph source, SGEdge_SList dest) {
    StrategyGraph it = (StrategyGraph) history.peek();
    SGEdge_SList p = new SGEdge_SList();
    it.set_edges(p);
    history.push(p);
  }
  public void after_edges(StrategyGraph source, SGEdge_SList dest) {
    history.pop();
  }
  public void before_sourcemarker(SGEdge source, SourceMarker dest) {
    SGEdge it = (SGEdge) history.peek();
    SourceMarker p = new SourceMarker();
    it.set_sourcemarker(p);
    history.push(p);
  }
  public void after_sourcemarker(SGEdge source, SourceMarker dest) {
    history.pop();
  }
  public void before_source(SGEdge source, GlobSpec dest) {
    SGEdge it = (SGEdge) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_source((GlobSpec) p);
    history.push(p);
  }
  public void after_source(SGEdge source, GlobSpec dest) {
    history.pop();
  }
  public void before_targetmarker(SGEdge source, TargetMarker dest) {
    SGEdge it = (SGEdge) history.peek();
    TargetMarker p = new TargetMarker();
    it.set_targetmarker(p);
    history.push(p);
  }
  public void after_targetmarker(SGEdge source, TargetMarker dest) {
    history.pop();
  }
  public void before_target(SGEdge source, GlobSpec dest) {
    SGEdge it = (SGEdge) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_target((GlobSpec) p);
    history.push(p);
  }
  public void after_target(SGEdge source, GlobSpec dest) {
    history.pop();
  }
  public void before_constraint(SGEdge source, NegativeConstraint dest) {
    SGEdge it = (SGEdge) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_constraint((NegativeConstraint) p);
    history.push(p);
  }
  public void after_constraint(SGEdge source, NegativeConstraint dest) {
    history.pop();
  }
  public void before_source(PathDirective source, SourceDirective dest) {
    PathDirective it = (PathDirective) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_source((SourceDirective) p);
    history.push(p);
  }
  public void after_source(PathDirective source, SourceDirective dest) {
    history.pop();
  }
  public void before_constraint(PathDirective source, NegativeConstraint dest) {
    PathDirective it = (PathDirective) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_constraint((NegativeConstraint) p);
    history.push(p);
  }
  public void after_constraint(PathDirective source, NegativeConstraint dest) {
    history.pop();
  }
  public void before_segments(PathDirective source, PathSegment_List dest) {
    PathDirective it = (PathDirective) history.peek();
    PathSegment_List p = new PathSegment_List();
    it.set_segments(p);
    history.push(p);
  }
  public void after_segments(PathDirective source, PathSegment_List dest) {
    history.pop();
  }
  public void before_target(PathDirective source, TargetDirective dest) {
    PathDirective it = (PathDirective) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_target((TargetDirective) p);
    history.push(p);
  }
  public void after_target(PathDirective source, TargetDirective dest) {
    history.pop();
  }
  public void before_sources(SourceDirective source, ClassGlobSpec dest) {
    SourceDirective it = (SourceDirective) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_sources((ClassGlobSpec) p);
    history.push(p);
  }
  public void after_sources(SourceDirective source, ClassGlobSpec dest) {
    history.pop();
  }
  public void before_node(PathSegment source, PositiveConstraint dest) {
    PathSegment it = (PathSegment) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_node((PositiveConstraint) p);
    history.push(p);
  }
  public void after_node(PathSegment source, PositiveConstraint dest) {
    history.pop();
  }
  public void before_constraint(PathSegment source, NegativeConstraint dest) {
    PathSegment it = (PathSegment) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_constraint((NegativeConstraint) p);
    history.push(p);
  }
  public void after_constraint(PathSegment source, NegativeConstraint dest) {
    history.pop();
  }
  public void before_glob(Constraint source, GlobSpec dest) {
    Constraint it = (Constraint) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_glob((GlobSpec) p);
    history.push(p);
  }
  public void after_glob(Constraint source, GlobSpec dest) {
    history.pop();
  }
  public void before_targets(TargetDirective source, ClassGlobSpec dest) {
    TargetDirective it = (TargetDirective) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_targets((ClassGlobSpec) p);
    history.push(p);
  }
  public void after_targets(TargetDirective source, ClassGlobSpec dest) {
    history.pop();
  }
  public void before_first(StrategyCombination source, Strategy dest) {
    StrategyCombination it = (StrategyCombination) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_first((Strategy) p);
    history.push(p);
  }
  public void after_first(StrategyCombination source, Strategy dest) {
    history.pop();
  }
  public void before_rest(StrategyCombination source, Strategy_Commalist dest) {
    StrategyCombination it = (StrategyCombination) history.peek();
    Strategy_Commalist p = new Strategy_Commalist();
    it.set_rest(p);
    history.push(p);
  }
  public void after_rest(StrategyCombination source, Strategy_Commalist dest) {
    history.pop();
  }
  public void before_ident(StrategyReference source, Ident dest) {
    StrategyReference it = (StrategyReference) history.peek();
    it.set_ident(dest);
  }
  public void before_bindings(NameMap source, NameBinding_Commalist dest) {
    NameMap it = (NameMap) history.peek();
    NameBinding_Commalist p = new NameBinding_Commalist();
    it.set_bindings(p);
    history.push(p);
  }
  public void after_bindings(NameMap source, NameBinding_Commalist dest) {
    history.pop();
  }
  public void before_sgName(NameBinding source, Name dest) {
    NameBinding it = (NameBinding) history.peek();
    Name p = new Name();
    it.set_sgName(p);
    history.push(p);
  }
  public void after_sgName(NameBinding source, Name dest) {
    history.pop();
  }
  public void before_cgNames(NameBinding source, ClassGlobSpec dest) {
    NameBinding it = (NameBinding) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_cgNames((ClassGlobSpec) p);
    history.push(p);
  }
  public void after_cgNames(NameBinding source, ClassGlobSpec dest) {
    history.pop();
  }
  public void before_glob(OneGlob source, Glob dest) {
    OneGlob it = (OneGlob) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_glob((Glob) p);
    history.push(p);
  }
  public void after_glob(OneGlob source, Glob dest) {
    history.pop();
  }
  public void before_globs(GlobSet source, Glob_Commalist dest) {
    GlobSet it = (GlobSet) history.peek();
    Glob_Commalist p = new Glob_Commalist();
    it.set_globs(p);
    history.push(p);
  }
  public void after_globs(GlobSet source, Glob_Commalist dest) {
    history.pop();
  }
  public void before_name(ClassGlob source, ClassNameGlob dest) {
    ClassGlob it = (ClassGlob) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_name((ClassNameGlob) p);
    history.push(p);
  }
  public void after_name(ClassGlob source, ClassNameGlob dest) {
    history.pop();
  }
  public void before_source(PartGlob source, SourceGlob dest) {
    PartGlob it = (PartGlob) history.peek();
    SourceGlob p = new SourceGlob();
    it.set_source(p);
    history.push(p);
  }
  public void after_source(PartGlob source, SourceGlob dest) {
    history.pop();
  }
  public void before_name(PartGlob source, PartNameGlob dest) {
    PartGlob it = (PartGlob) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_name((PartNameGlob) p);
    history.push(p);
  }
  public void after_name(PartGlob source, PartNameGlob dest) {
    history.pop();
  }
  public void before_target(PartGlob source, TargetGlob dest) {
    PartGlob it = (PartGlob) history.peek();
    TargetGlob p = new TargetGlob();
    it.set_target(p);
    history.push(p);
  }
  public void after_target(PartGlob source, TargetGlob dest) {
    history.pop();
  }
  public void before_source(SubclassGlob source, SourceGlob dest) {
    SubclassGlob it = (SubclassGlob) history.peek();
    SourceGlob p = new SourceGlob();
    it.set_source(p);
    history.push(p);
  }
  public void after_source(SubclassGlob source, SourceGlob dest) {
    history.pop();
  }
  public void before_target(SubclassGlob source, TargetGlob dest) {
    SubclassGlob it = (SubclassGlob) history.peek();
    TargetGlob p = new TargetGlob();
    it.set_target(p);
    history.push(p);
  }
  public void after_target(SubclassGlob source, TargetGlob dest) {
    history.pop();
  }
  public void before_source(SuperclassGlob source, SourceGlob dest) {
    SuperclassGlob it = (SuperclassGlob) history.peek();
    SourceGlob p = new SourceGlob();
    it.set_source(p);
    history.push(p);
  }
  public void after_source(SuperclassGlob source, SourceGlob dest) {
    history.pop();
  }
  public void before_target(SuperclassGlob source, TargetGlob dest) {
    SuperclassGlob it = (SuperclassGlob) history.peek();
    TargetGlob p = new TargetGlob();
    it.set_target(p);
    history.push(p);
  }
  public void after_target(SuperclassGlob source, TargetGlob dest) {
    history.pop();
  }
  public void before_name(SourceGlob source, ClassNameGlob dest) {
    SourceGlob it = (SourceGlob) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_name((ClassNameGlob) p);
    history.push(p);
  }
  public void after_name(SourceGlob source, ClassNameGlob dest) {
    history.pop();
  }
  public void before_name(TargetGlob source, ClassNameGlob dest) {
    TargetGlob it = (TargetGlob) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_name((ClassNameGlob) p);
    history.push(p);
  }
  public void after_name(TargetGlob source, ClassNameGlob dest) {
    history.pop();
  }
  public void before_classname(ClassNameExact source, ClassName dest) {
    ClassNameExact it = (ClassNameExact) history.peek();
    ClassName p = new ClassName();
    it.set_classname(p);
    history.push(p);
  }
  public void after_classname(ClassNameExact source, ClassName dest) {
    history.pop();
  }
  public void before_partname(PartNameExact source, PartName dest) {
    PartNameExact it = (PartNameExact) history.peek();
    PartName p = new PartName();
    it.set_partname(p);
    history.push(p);
  }
  public void after_partname(PartNameExact source, PartName dest) {
    history.pop();
  }
  public void before_classglob(OneClassGlob source, ClassGlob dest) {
    OneClassGlob it = (OneClassGlob) history.peek();
    ClassGlob p = new ClassGlob();
    it.set_classglob(p);
    history.push(p);
  }
  public void after_classglob(OneClassGlob source, ClassGlob dest) {
    history.pop();
  }
  public void before_globs(ClassGlobSet source, ClassGlob_Commalist dest) {
    ClassGlobSet it = (ClassGlobSet) history.peek();
    ClassGlob_Commalist p = new ClassGlob_Commalist();
    it.set_globs(p);
    history.push(p);
  }
  public void after_globs(ClassGlobSet source, ClassGlob_Commalist dest) {
    history.pop();
  }
  public void before_name(ClassName source, Name dest) {
    ClassName it = (ClassName) history.peek();
    Name p = new Name();
    it.set_name(p);
    history.push(p);
  }
  public void after_name(ClassName source, Name dest) {
    history.pop();
  }
  public void before_name(PartName source, Ident dest) {
    PartName it = (PartName) history.peek();
    it.set_name(dest);
  }
  public void before_first(Name source, Nonempty_Name dest) {
    Name it = (Name) history.peek();
    Nonempty_Name p = new Nonempty_Name();
    it.set_first(p);
    history.push(p);
  }
  public void after_first(Name source, Nonempty_Name dest) {
    history.pop();
  }
  public void before_indent(PrintVisitor source, int dest) {
    PrintVisitor it = (PrintVisitor) history.peek();
    it.set_indent(dest);
  }
  public void before_needSpace(PrintVisitor source, boolean dest) {
    PrintVisitor it = (PrintVisitor) history.peek();
    it.set_needSpace(dest);
  }
  public void before_is_equal(SubgraphVisitor source, boolean dest) {
    SubgraphVisitor it = (SubgraphVisitor) history.peek();
    it.set_is_equal(dest);
  }
  public void before_is_equal(EqualVisitor source, boolean dest) {
    EqualVisitor it = (EqualVisitor) history.peek();
    it.set_is_equal(dest);
  }
  public void before_indent(DisplayVisitor source, int dest) {
    DisplayVisitor it = (DisplayVisitor) history.peek();
    it.set_indent(dest);
  }
  public void before_indent(TraceVisitor source, int dest) {
    TraceVisitor it = (TraceVisitor) history.peek();
    it.set_indent(dest);
  }
  public void before_first(DecNodeSetBody_PCList source, Nonempty_DecNodeSetBody_PCList dest) {
    DecNodeSetBody_PCList it = (DecNodeSetBody_PCList) history.peek();
    Nonempty_DecNodeSetBody_PCList p = new Nonempty_DecNodeSetBody_PCList();
    it.set_first(p);
    history.push(p);
  }
  public void after_first(DecNodeSetBody_PCList source, Nonempty_DecNodeSetBody_PCList dest) {
    history.pop();
  }
  public void before_first(ClassName_BCList source, Nonempty_ClassName_BCList dest) {
    ClassName_BCList it = (ClassName_BCList) history.peek();
    Nonempty_ClassName_BCList p = new Nonempty_ClassName_BCList();
    it.set_first(p);
    history.push(p);
  }
  public void after_first(ClassName_BCList source, Nonempty_ClassName_BCList dest) {
    history.pop();
  }
  public void before_first(Aspect_List source, Nonempty_Aspect_List dest) {
    Aspect_List it = (Aspect_List) history.peek();
    Nonempty_Aspect_List p = new Nonempty_Aspect_List();
    it.set_first(p);
    history.push(p);
  }
  public void after_first(Aspect_List source, Nonempty_Aspect_List dest) {
    history.pop();
  }
  public void before_first(TVDeclaration_List source, Nonempty_TVDeclaration_List dest) {
    TVDeclaration_List it = (TVDeclaration_List) history.peek();
    Nonempty_TVDeclaration_List p = new Nonempty_TVDeclaration_List();
    it.set_first(p);
    history.push(p);
  }
  public void after_first(TVDeclaration_List source, Nonempty_TVDeclaration_List dest) {
    history.pop();
  }
  public void before_first(SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    SGEdge_SList it = (SGEdge_SList) history.peek();
    Nonempty_SGEdge_SList p = new Nonempty_SGEdge_SList();
    it.set_first(p);
    history.push(p);
  }
  public void after_first(SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    history.pop();
  }
  public void before_first(PathSegment_List source, Nonempty_PathSegment_List dest) {
    PathSegment_List it = (PathSegment_List) history.peek();
    Nonempty_PathSegment_List p = new Nonempty_PathSegment_List();
    it.set_first(p);
    history.push(p);
  }
  public void after_first(PathSegment_List source, Nonempty_PathSegment_List dest) {
    history.pop();
  }
  public void before_first(Strategy_Commalist source, Nonempty_Strategy_Commalist dest) {
    Strategy_Commalist it = (Strategy_Commalist) history.peek();
    Nonempty_Strategy_Commalist p = new Nonempty_Strategy_Commalist();
    it.set_first(p);
    history.push(p);
  }
  public void after_first(Strategy_Commalist source, Nonempty_Strategy_Commalist dest) {
    history.pop();
  }
  public void before_first(NameBinding_Commalist source, Nonempty_NameBinding_Commalist dest) {
    NameBinding_Commalist it = (NameBinding_Commalist) history.peek();
    Nonempty_NameBinding_Commalist p = new Nonempty_NameBinding_Commalist();
    it.set_first(p);
    history.push(p);
  }
  public void after_first(NameBinding_Commalist source, Nonempty_NameBinding_Commalist dest) {
    history.pop();
  }
  public void before_first(Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    Glob_Commalist it = (Glob_Commalist) history.peek();
    Nonempty_Glob_Commalist p = new Nonempty_Glob_Commalist();
    it.set_first(p);
    history.push(p);
  }
  public void after_first(Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    history.pop();
  }
  public void before_first(ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    ClassGlob_Commalist it = (ClassGlob_Commalist) history.peek();
    Nonempty_ClassGlob_Commalist p = new Nonempty_ClassGlob_Commalist();
    it.set_first(p);
    history.push(p);
  }
  public void after_first(ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    history.pop();
  }
  public void before_it(Nonempty_Name source, Ident dest) {
    Nonempty_Name it = (Nonempty_Name) history.peek();
    it.set_it(dest);
  }
  public void before_next(Nonempty_Name source, Nonempty_Name dest) {
    Nonempty_Name it = (Nonempty_Name) history.peek();
    Nonempty_Name p = new Nonempty_Name();
    it.set_next(p);
    history.push(p);
  }
  public void after_next(Nonempty_Name source, Nonempty_Name dest) {
    history.pop();
  }
  public void before_it(Nonempty_DecNodeSetBody_PCList source, DecNodeSetBody dest) {
    Nonempty_DecNodeSetBody_PCList it = (Nonempty_DecNodeSetBody_PCList) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_it((DecNodeSetBody) p);
    history.push(p);
  }
  public void after_it(Nonempty_DecNodeSetBody_PCList source, DecNodeSetBody dest) {
    history.pop();
  }
  public void before_next(Nonempty_DecNodeSetBody_PCList source, Nonempty_DecNodeSetBody_PCList dest) {
    Nonempty_DecNodeSetBody_PCList it = (Nonempty_DecNodeSetBody_PCList) history.peek();
    Nonempty_DecNodeSetBody_PCList p = new Nonempty_DecNodeSetBody_PCList();
    it.set_next(p);
    history.push(p);
  }
  public void after_next(Nonempty_DecNodeSetBody_PCList source, Nonempty_DecNodeSetBody_PCList dest) {
    history.pop();
  }
  public void before_it(Nonempty_ClassName_BCList source, ClassName dest) {
    Nonempty_ClassName_BCList it = (Nonempty_ClassName_BCList) history.peek();
    ClassName p = new ClassName();
    it.set_it(p);
    history.push(p);
  }
  public void after_it(Nonempty_ClassName_BCList source, ClassName dest) {
    history.pop();
  }
  public void before_next(Nonempty_ClassName_BCList source, Nonempty_ClassName_BCList dest) {
    Nonempty_ClassName_BCList it = (Nonempty_ClassName_BCList) history.peek();
    Nonempty_ClassName_BCList p = new Nonempty_ClassName_BCList();
    it.set_next(p);
    history.push(p);
  }
  public void after_next(Nonempty_ClassName_BCList source, Nonempty_ClassName_BCList dest) {
    history.pop();
  }
  public void before_it(Nonempty_Aspect_List source, Aspect dest) {
    Nonempty_Aspect_List it = (Nonempty_Aspect_List) history.peek();
    Aspect p = new Aspect();
    it.set_it(p);
    history.push(p);
  }
  public void after_it(Nonempty_Aspect_List source, Aspect dest) {
    history.pop();
  }
  public void before_next(Nonempty_Aspect_List source, Nonempty_Aspect_List dest) {
    Nonempty_Aspect_List it = (Nonempty_Aspect_List) history.peek();
    Nonempty_Aspect_List p = new Nonempty_Aspect_List();
    it.set_next(p);
    history.push(p);
  }
  public void after_next(Nonempty_Aspect_List source, Nonempty_Aspect_List dest) {
    history.pop();
  }
  public void before_it(Nonempty_TVDeclaration_List source, TVDeclaration dest) {
    Nonempty_TVDeclaration_List it = (Nonempty_TVDeclaration_List) history.peek();
    TVDeclaration p = new TVDeclaration();
    it.set_it(p);
    history.push(p);
  }
  public void after_it(Nonempty_TVDeclaration_List source, TVDeclaration dest) {
    history.pop();
  }
  public void before_next(Nonempty_TVDeclaration_List source, Nonempty_TVDeclaration_List dest) {
    Nonempty_TVDeclaration_List it = (Nonempty_TVDeclaration_List) history.peek();
    Nonempty_TVDeclaration_List p = new Nonempty_TVDeclaration_List();
    it.set_next(p);
    history.push(p);
  }
  public void after_next(Nonempty_TVDeclaration_List source, Nonempty_TVDeclaration_List dest) {
    history.pop();
  }
  public void before_it(Nonempty_SGEdge_SList source, SGEdge dest) {
    Nonempty_SGEdge_SList it = (Nonempty_SGEdge_SList) history.peek();
    SGEdge p = new SGEdge();
    it.set_it(p);
    history.push(p);
  }
  public void after_it(Nonempty_SGEdge_SList source, SGEdge dest) {
    history.pop();
  }
  public void before_next(Nonempty_SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    Nonempty_SGEdge_SList it = (Nonempty_SGEdge_SList) history.peek();
    Nonempty_SGEdge_SList p = new Nonempty_SGEdge_SList();
    it.set_next(p);
    history.push(p);
  }
  public void after_next(Nonempty_SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    history.pop();
  }
  public void before_it(Nonempty_PathSegment_List source, PathSegment dest) {
    Nonempty_PathSegment_List it = (Nonempty_PathSegment_List) history.peek();
    PathSegment p = new PathSegment();
    it.set_it(p);
    history.push(p);
  }
  public void after_it(Nonempty_PathSegment_List source, PathSegment dest) {
    history.pop();
  }
  public void before_next(Nonempty_PathSegment_List source, Nonempty_PathSegment_List dest) {
    Nonempty_PathSegment_List it = (Nonempty_PathSegment_List) history.peek();
    Nonempty_PathSegment_List p = new Nonempty_PathSegment_List();
    it.set_next(p);
    history.push(p);
  }
  public void after_next(Nonempty_PathSegment_List source, Nonempty_PathSegment_List dest) {
    history.pop();
  }
  public void before_it(Nonempty_Strategy_Commalist source, Strategy dest) {
    Nonempty_Strategy_Commalist it = (Nonempty_Strategy_Commalist) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_it((Strategy) p);
    history.push(p);
  }
  public void after_it(Nonempty_Strategy_Commalist source, Strategy dest) {
    history.pop();
  }
  public void before_next(Nonempty_Strategy_Commalist source, Nonempty_Strategy_Commalist dest) {
    Nonempty_Strategy_Commalist it = (Nonempty_Strategy_Commalist) history.peek();
    Nonempty_Strategy_Commalist p = new Nonempty_Strategy_Commalist();
    it.set_next(p);
    history.push(p);
  }
  public void after_next(Nonempty_Strategy_Commalist source, Nonempty_Strategy_Commalist dest) {
    history.pop();
  }
  public void before_it(Nonempty_NameBinding_Commalist source, NameBinding dest) {
    Nonempty_NameBinding_Commalist it = (Nonempty_NameBinding_Commalist) history.peek();
    NameBinding p = new NameBinding();
    it.set_it(p);
    history.push(p);
  }
  public void after_it(Nonempty_NameBinding_Commalist source, NameBinding dest) {
    history.pop();
  }
  public void before_next(Nonempty_NameBinding_Commalist source, Nonempty_NameBinding_Commalist dest) {
    Nonempty_NameBinding_Commalist it = (Nonempty_NameBinding_Commalist) history.peek();
    Nonempty_NameBinding_Commalist p = new Nonempty_NameBinding_Commalist();
    it.set_next(p);
    history.push(p);
  }
  public void after_next(Nonempty_NameBinding_Commalist source, Nonempty_NameBinding_Commalist dest) {
    history.pop();
  }
  public void before_it(Nonempty_Glob_Commalist source, Glob dest) {
    Nonempty_Glob_Commalist it = (Nonempty_Glob_Commalist) history.peek();
    Class c = dest.getClass();
    Object p = null;
    try {
      p = c.newInstance();
    } catch(Exception e) {
      e.printStackTrace();
    }
    it.set_it((Glob) p);
    history.push(p);
  }
  public void after_it(Nonempty_Glob_Commalist source, Glob dest) {
    history.pop();
  }
  public void before_next(Nonempty_Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    Nonempty_Glob_Commalist it = (Nonempty_Glob_Commalist) history.peek();
    Nonempty_Glob_Commalist p = new Nonempty_Glob_Commalist();
    it.set_next(p);
    history.push(p);
  }
  public void after_next(Nonempty_Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    history.pop();
  }
  public void before_it(Nonempty_ClassGlob_Commalist source, ClassGlob dest) {
    Nonempty_ClassGlob_Commalist it = (Nonempty_ClassGlob_Commalist) history.peek();
    ClassGlob p = new ClassGlob();
    it.set_it(p);
    history.push(p);
  }
  public void after_it(Nonempty_ClassGlob_Commalist source, ClassGlob dest) {
    history.pop();
  }
  public void before_next(Nonempty_ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    Nonempty_ClassGlob_Commalist it = (Nonempty_ClassGlob_Commalist) history.peek();
    Nonempty_ClassGlob_Commalist p = new Nonempty_ClassGlob_Commalist();
    it.set_next(p);
    history.push(p);
  }
  public void after_next(Nonempty_ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    history.pop();
  }
  void universal_trv0_bef(UniversalVisitor _v_) {
    super.universal_trv0_bef(_v_);
  }

  void universal_trv0_aft(UniversalVisitor _v_) {
    super.universal_trv0_aft(_v_);
  }

  void universal_trv0(UniversalVisitor _v_) {
    universal_trv0_bef(_v_);
    Object copy = get_copy();
    super.universal_trv0(_v_);
    universal_trv0_aft(_v_);
  }

}
