package EDU.neu.ccs.demeter.tools.apstudio.graphedit;
import java.awt.*;
import java.io.*;
import java.util.*;
import EDU.neu.ccs.demeter.*;
import EDU.neu.ccs.demeter.common.tg.*;


import EDU.neu.ccs.demeter.*;
class EqualVisitor extends UniversalVisitor {
  protected boolean is_equal = true ;  public boolean get_is_equal() { return is_equal; }
  public void set_is_equal(boolean new_is_equal)
    { is_equal = new_is_equal; }
  EqualVisitor() { super(); }
  public EqualVisitor(boolean is_equal) {
    super();
    set_is_equal(is_equal);
  }

    private java.util.Stack history = new java.util.Stack();
    public EqualVisitor(Object obj) {
      history.push(obj);
    }
    public void before_pkg(UGraph source, Package dest) {
    if (is_equal) {
      UGraph obj = (UGraph) history.peek();
      history.push(obj.get_pkg());
    }
  }
  public void after_pkg(UGraph source, Package dest) {
    if (is_equal) history.pop();
  }
  public void before_imports(UGraph source, Import_SList dest) {
    if (is_equal) {
      UGraph obj = (UGraph) history.peek();
      history.push(obj.get_imports());
    }
  }
  public void after_imports(UGraph source, Import_SList dest) {
    if (is_equal) history.pop();
  }
  public void before_preamble(UGraph source, JavaCode dest) {
    if (is_equal) {
      UGraph obj = (UGraph) history.peek();
      history.push(obj.get_preamble());
    }
  }
  public void after_preamble(UGraph source, JavaCode dest) {
    if (is_equal) history.pop();
  }
  public void before_vertices(UGraph source, UVertex_List dest) {
    if (is_equal) {
      UGraph obj = (UGraph) history.peek();
      history.push(obj.get_vertices());
    }
  }
  public void after_vertices(UGraph source, UVertex_List dest) {
    if (is_equal) history.pop();
  }
  public void before_edges(UGraph source, UEdge_List dest) {
    if (is_equal) {
      UGraph obj = (UGraph) history.peek();
      history.push(obj.get_edges());
    }
  }
  public void after_edges(UGraph source, UEdge_List dest) {
    if (is_equal) history.pop();
  }
  public void before_firstuid(UGraph source, UID dest) {
    if (is_equal) {
      UGraph obj = (UGraph) history.peek();
      history.push(obj.get_firstuid());
    }
  }
  public void after_firstuid(UGraph source, UID dest) {
    if (is_equal) history.pop();
  }
  public void before(UGraph host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_idToVertexTable().equals(((UGraph) obj).get_idToVertexTable())
      && host.get_idToEdgeTable().equals(((UGraph) obj).get_idToEdgeTable())
      && host.get_nameToIdVertexTable().equals(((UGraph) obj).get_nameToIdVertexTable());  }
  public void before_first(UVertex_List source, Nonempty_UVertex_List dest) {
    if (is_equal) {
      UVertex_List obj = (UVertex_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(UVertex_List source, Nonempty_UVertex_List dest) {
    if (is_equal) history.pop();
  }
  public void before(UVertex_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_vid(UVertex source, UID dest) {
    if (is_equal) {
      UVertex obj = (UVertex) history.peek();
      history.push(obj.get_vid());
    }
  }
  public void after_vid(UVertex source, UID dest) {
    if (is_equal) history.pop();
  }
  public void before_vertexname(UVertex source, UVertexName dest) {
    if (is_equal) {
      UVertex obj = (UVertex) history.peek();
      history.push(obj.get_vertexname());
    }
  }
  public void after_vertexname(UVertex source, UVertexName dest) {
    if (is_equal) history.pop();
  }
  public void before_position(UVertex source, Coordinates dest) {
    if (is_equal) {
      UVertex obj = (UVertex) history.peek();
      history.push(obj.get_position());
    }
  }
  public void after_position(UVertex source, Coordinates dest) {
    if (is_equal) history.pop();
  }
  public void before_incoming(UVertex source, IEdge_List dest) {
    if (is_equal) {
      UVertex obj = (UVertex) history.peek();
      history.push(obj.get_incoming());
    }
  }
  public void after_incoming(UVertex source, IEdge_List dest) {
    if (is_equal) history.pop();
  }
  public void before_outgoing(UVertex source, OEdge_List dest) {
    if (is_equal) {
      UVertex obj = (UVertex) history.peek();
      history.push(obj.get_outgoing());
    }
  }
  public void after_outgoing(UVertex source, OEdge_List dest) {
    if (is_equal) history.pop();
  }
  public void before_vdeco(UVertex source, Decorator dest) {
    if (is_equal) {
      UVertex obj = (UVertex) history.peek();
      history.push(obj.get_vdeco());
    }
  }
  public void after_vdeco(UVertex source, Decorator dest) {
    if (is_equal) history.pop();
  }
  public void before(UVertex host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_inArcIdList().equals(((UVertex) obj).get_inArcIdList())
      && host.get_outArcIdList().equals(((UVertex) obj).get_outArcIdList())
      && host.get_tgv().equals(((UVertex) obj).get_tgv())
      && host.get_persp().equals(((UVertex) obj).get_persp());  }
  public void before_parse(UConstOrAltVertex source, ParseOrNot dest) {
    if (is_equal) {
      UConstOrAltVertex obj = (UConstOrAltVertex) history.peek();
      history.push(obj.get_parse());
    }
  }
  public void after_parse(UConstOrAltVertex source, ParseOrNot dest) {
    if (is_equal) history.pop();
  }
  public void before_keywords(UConstOrAltVertex source, ScopeIdentifier_List dest) {
    if (is_equal) {
      UConstOrAltVertex obj = (UConstOrAltVertex) history.peek();
      history.push(obj.get_keywords());
    }
  }
  public void after_keywords(UConstOrAltVertex source, ScopeIdentifier_List dest) {
    if (is_equal) history.pop();
  }
  public void before(UConstOrAltVertex host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_outEdgeNameList().equals(((UConstOrAltVertex) obj).get_outEdgeNameList());  }
  public void before(ParseOrNot host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(YaParse host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(NopParse host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(UTerm host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(IEdge_List source, Nonempty_IEdge_List dest) {
    if (is_equal) {
      IEdge_List obj = (IEdge_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(IEdge_List source, Nonempty_IEdge_List dest) {
    if (is_equal) history.pop();
  }
  public void before(IEdge_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(OEdge_List source, Nonempty_OEdge_List dest) {
    if (is_equal) {
      OEdge_List obj = (OEdge_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(OEdge_List source, Nonempty_OEdge_List dest) {
    if (is_equal) history.pop();
  }
  public void before(OEdge_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_beFore(UConstVertex source, UBefore dest) {
    if (is_equal) {
      UConstVertex obj = (UConstVertex) history.peek();
      history.push(obj.get_beFore());
    }
  }
  public void after_beFore(UConstVertex source, UBefore dest) {
    if (is_equal) history.pop();
  }
  public void before_afTer(UConstVertex source, UAfter dest) {
    if (is_equal) {
      UConstVertex obj = (UConstVertex) history.peek();
      history.push(obj.get_afTer());
    }
  }
  public void after_afTer(UConstVertex source, UAfter dest) {
    if (is_equal) history.pop();
  }
  public void before(UConstVertex host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(UBefore host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_syntax().equals(((UBefore) obj).get_syntax());  }
  public void before(UAfter host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_syntax().equals(((UAfter) obj).get_syntax());  }
  public void before(UAltVertex host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_keywords(UInterface source, InterfaceModifier_List dest) {
    if (is_equal) {
      UInterface obj = (UInterface) history.peek();
      history.push(obj.get_keywords());
    }
  }
  public void after_keywords(UInterface source, InterfaceModifier_List dest) {
    if (is_equal) history.pop();
  }
  public void before_javacode(UInterface source, JavaCode dest) {
    if (is_equal) {
      UInterface obj = (UInterface) history.peek();
      history.push(obj.get_javacode());
    }
  }
  public void after_javacode(UInterface source, JavaCode dest) {
    if (is_equal) history.pop();
  }
  public void before(UInterface host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(InterfaceModifier_List source, Nonempty_InterfaceModifier_List dest) {
    if (is_equal) {
      InterfaceModifier_List obj = (InterfaceModifier_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(InterfaceModifier_List source, Nonempty_InterfaceModifier_List dest) {
    if (is_equal) history.pop();
  }
  public void before(InterfaceModifier_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(InterfaceModifier host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PublicModifier host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(UTermConstVertex host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(UTermInterface host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(ScopeIdentifier_List source, Nonempty_ScopeIdentifier_List dest) {
    if (is_equal) {
      ScopeIdentifier_List obj = (ScopeIdentifier_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(ScopeIdentifier_List source, Nonempty_ScopeIdentifier_List dest) {
    if (is_equal) history.pop();
  }
  public void before(ScopeIdentifier_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ScopeIdentifier host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PublicIdentifier host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(FinalIdentifier host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(UEdge_List source, Nonempty_UEdge_List dest) {
    if (is_equal) {
      UEdge_List obj = (UEdge_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(UEdge_List source, Nonempty_UEdge_List dest) {
    if (is_equal) history.pop();
  }
  public void before(UEdge_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_eid(UEdge source, UID dest) {
    if (is_equal) {
      UEdge obj = (UEdge) history.peek();
      history.push(obj.get_eid());
    }
  }
  public void after_eid(UEdge source, UID dest) {
    if (is_equal) history.pop();
  }
  public void before_fromVertex(UEdge source, UID dest) {
    if (is_equal) {
      UEdge obj = (UEdge) history.peek();
      history.push(obj.get_fromVertex());
    }
  }
  public void after_fromVertex(UEdge source, UID dest) {
    if (is_equal) history.pop();
  }
  public void before_toVertex(UEdge source, UID dest) {
    if (is_equal) {
      UEdge obj = (UEdge) history.peek();
      history.push(obj.get_toVertex());
    }
  }
  public void after_toVertex(UEdge source, UID dest) {
    if (is_equal) history.pop();
  }
  public void before_edeco(UEdge source, Decorator dest) {
    if (is_equal) {
      UEdge obj = (UEdge) history.peek();
      history.push(obj.get_edeco());
    }
  }
  public void after_edeco(UEdge source, Decorator dest) {
    if (is_equal) history.pop();
  }
  public void before_bendpoint(UEdge source, BendPoint dest) {
    if (is_equal) {
      UEdge obj = (UEdge) history.peek();
      history.push(obj.get_bendpoint());
    }
  }
  public void after_bendpoint(UEdge source, BendPoint dest) {
    if (is_equal) history.pop();
  }
  public void before(UEdge host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_persp().equals(((UEdge) obj).get_persp());  }
  public void before(USuperEdge host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_position(BendPoint source, Coordinates dest) {
    if (is_equal) {
      BendPoint obj = (BendPoint) history.peek();
      history.push(obj.get_position());
    }
  }
  public void after_position(BendPoint source, Coordinates dest) {
    if (is_equal) history.pop();
  }
  public void before(BendPoint host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(UAltEdge host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_tge().equals(((UAltEdge) obj).get_tge());  }
  public void before(UExtendEdge host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_tge().equals(((UExtendEdge) obj).get_tge());  }
  public void before(UImplEdge host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_tge().equals(((UImplEdge) obj).get_tge());  }
  public void before_edgename(UConstEdge source, UEdgeName dest) {
    if (is_equal) {
      UConstEdge obj = (UConstEdge) history.peek();
      history.push(obj.get_edgename());
    }
  }
  public void after_edgename(UConstEdge source, UEdgeName dest) {
    if (is_equal) history.pop();
  }
  public void before_card(UConstEdge source, Cardinality dest) {
    if (is_equal) {
      UConstEdge obj = (UConstEdge) history.peek();
      history.push(obj.get_card());
    }
  }
  public void after_card(UConstEdge source, Cardinality dest) {
    if (is_equal) history.pop();
  }
  public void before_beFore(UConstEdge source, UBefore dest) {
    if (is_equal) {
      UConstEdge obj = (UConstEdge) history.peek();
      history.push(obj.get_beFore());
    }
  }
  public void after_beFore(UConstEdge source, UBefore dest) {
    if (is_equal) history.pop();
  }
  public void before_afTer(UConstEdge source, UAfter dest) {
    if (is_equal) {
      UConstEdge obj = (UConstEdge) history.peek();
      history.push(obj.get_afTer());
    }
  }
  public void after_afTer(UConstEdge source, UAfter dest) {
    if (is_equal) history.pop();
  }
  public void before_keywords(UConstEdge source, PartModifier_List dest) {
    if (is_equal) {
      UConstEdge obj = (UConstEdge) history.peek();
      history.push(obj.get_keywords());
    }
  }
  public void after_keywords(UConstEdge source, PartModifier_List dest) {
    if (is_equal) history.pop();
  }
  public void before(UConstEdge host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_tge().equals(((UConstEdge) obj).get_tge());  }
  public void before_first(PartModifier_List source, Nonempty_PartModifier_List dest) {
    if (is_equal) {
      PartModifier_List obj = (PartModifier_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(PartModifier_List source, Nonempty_PartModifier_List dest) {
    if (is_equal) history.pop();
  }
  public void before(PartModifier_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PartModifier host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(FinalMod host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(StaticMod host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ReadOnlyMod host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PrivateMod host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_lower(Cardinality source, Lower dest) {
    if (is_equal) {
      Cardinality obj = (Cardinality) history.peek();
      history.push(obj.get_lower());
    }
  }
  public void after_lower(Cardinality source, Lower dest) {
    if (is_equal) history.pop();
  }
  public void before_upper(Cardinality source, Upper dest) {
    if (is_equal) {
      Cardinality obj = (Cardinality) history.peek();
      history.push(obj.get_upper());
    }
  }
  public void after_upper(Cardinality source, Upper dest) {
    if (is_equal) history.pop();
  }
  public void before(Cardinality host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Lower host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_l().equals(((Lower) obj).get_l());  }
  public void before(Upper host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_u().equals(((Upper) obj).get_u());  }
  public void before(UID host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_id().equals(((UID) obj).get_id());  }
  public void before(UEdgeName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_name().equals(((UEdgeName) obj).get_name());  }
  public void before(UVertexName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_name().equals(((UVertexName) obj).get_name());  }
  public void before_x(Coordinates source, X dest) {
    if (is_equal) {
      Coordinates obj = (Coordinates) history.peek();
      history.push(obj.get_x());
    }
  }
  public void after_x(Coordinates source, X dest) {
    if (is_equal) history.pop();
  }
  public void before_y(Coordinates source, Y dest) {
    if (is_equal) {
      Coordinates obj = (Coordinates) history.peek();
      history.push(obj.get_y());
    }
  }
  public void after_y(Coordinates source, Y dest) {
    if (is_equal) history.pop();
  }
  public void before(Coordinates host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(X host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_x().equals(((X) obj).get_x());  }
  public void before(Y host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_y().equals(((Y) obj).get_y());  }
  public void before(Decorator host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_travtag().equals(((Decorator) obj).get_travtag())
      && host.get_travtaglist().equals(((Decorator) obj).get_travtaglist());  }
  public void before(UniqueIDGenerator host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_globalimports(Program source, GlobalImports dest) {
    if (is_equal) {
      Program obj = (Program) history.peek();
      history.push(obj.get_globalimports());
    }
  }
  public void after_globalimports(Program source, GlobalImports dest) {
    if (is_equal) history.pop();
  }
  public void before_cg(Program source, ClassGraph dest) {
    if (is_equal) {
      Program obj = (Program) history.peek();
      history.push(obj.get_cg());
    }
  }
  public void after_cg(Program source, ClassGraph dest) {
    if (is_equal) history.pop();
  }
  public void before(Program host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_imports(GlobalImports source, Import_SList dest) {
    if (is_equal) {
      GlobalImports obj = (GlobalImports) history.peek();
      history.push(obj.get_imports());
    }
  }
  public void after_imports(GlobalImports source, Import_SList dest) {
    if (is_equal) history.pop();
  }
  public void before(GlobalImports host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_packagename(Import source, PackageName dest) {
    if (is_equal) {
      Import obj = (Import) history.peek();
      history.push(obj.get_packagename());
    }
  }
  public void after_packagename(Import source, PackageName dest) {
    if (is_equal) history.pop();
  }
  public void before_importallclasses(Import source, ImportAllClasses dest) {
    if (is_equal) {
      Import obj = (Import) history.peek();
      history.push(obj.get_importallclasses());
    }
  }
  public void after_importallclasses(Import source, ImportAllClasses dest) {
    if (is_equal) history.pop();
  }
  public void before(Import host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ImportAllClasses host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_classes(ClassGraph source, ClassGraphEntry_DList dest) {
    if (is_equal) {
      ClassGraph obj = (ClassGraph) history.peek();
      history.push(obj.get_classes());
    }
  }
  public void after_classes(ClassGraph source, ClassGraphEntry_DList dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassGraph host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_defdict().equals(((ClassGraph) obj).get_defdict())
      && host.get_tg().equals(((ClassGraph) obj).get_tg());  }
  public void before(ClassGraphEntry host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Directive host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_parsekeyword(ParseDirective source, ParseKeyword dest) {
    if (is_equal) {
      ParseDirective obj = (ParseDirective) history.peek();
      history.push(obj.get_parsekeyword());
    }
  }
  public void after_parsekeyword(ParseDirective source, ParseKeyword dest) {
    if (is_equal) history.pop();
  }
  public void before(ParseDirective host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_visitorkeyword(VisitorDirective source, VisitorKeyword dest) {
    if (is_equal) {
      VisitorDirective obj = (VisitorDirective) history.peek();
      history.push(obj.get_visitorkeyword());
    }
  }
  public void after_visitorkeyword(VisitorDirective source, VisitorKeyword dest) {
    if (is_equal) history.pop();
  }
  public void before(VisitorDirective host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_pkg(PackageDirective source, Package dest) {
    if (is_equal) {
      PackageDirective obj = (PackageDirective) history.peek();
      history.push(obj.get_pkg());
    }
  }
  public void after_pkg(PackageDirective source, Package dest) {
    if (is_equal) history.pop();
  }
  public void before_localimports(PackageDirective source, LocalImports dest) {
    if (is_equal) {
      PackageDirective obj = (PackageDirective) history.peek();
      history.push(obj.get_localimports());
    }
  }
  public void after_localimports(PackageDirective source, LocalImports dest) {
    if (is_equal) history.pop();
  }
  public void before(PackageDirective host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_packagename(Package source, PackageName dest) {
    if (is_equal) {
      Package obj = (Package) history.peek();
      history.push(obj.get_packagename());
    }
  }
  public void after_packagename(Package source, PackageName dest) {
    if (is_equal) history.pop();
  }
  public void before(Package host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_imports(LocalImports source, Import_SList dest) {
    if (is_equal) {
      LocalImports obj = (LocalImports) history.peek();
      history.push(obj.get_imports());
    }
  }
  public void after_imports(LocalImports source, Import_SList dest) {
    if (is_equal) history.pop();
  }
  public void before(LocalImports host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Definition host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_keywords(ClassDef source, ClassKeyword_List dest) {
    if (is_equal) {
      ClassDef obj = (ClassDef) history.peek();
      history.push(obj.get_keywords());
    }
  }
  public void after_keywords(ClassDef source, ClassKeyword_List dest) {
    if (is_equal) history.pop();
  }
  public void before_paramclassname(ClassDef source, ParamClassName dest) {
    if (is_equal) {
      ClassDef obj = (ClassDef) history.peek();
      history.push(obj.get_paramclassname());
    }
  }
  public void after_paramclassname(ClassDef source, ParamClassName dest) {
    if (is_equal) history.pop();
  }
  public void before_parsedirective(ClassDef source, ParseDirective dest) {
    if (is_equal) {
      ClassDef obj = (ClassDef) history.peek();
      history.push(obj.get_parsedirective());
    }
  }
  public void after_parsedirective(ClassDef source, ParseDirective dest) {
    if (is_equal) history.pop();
  }
  public void before_classparts(ClassDef source, ClassParts dest) {
    if (is_equal) {
      ClassDef obj = (ClassDef) history.peek();
      history.push(obj.get_classparts());
    }
  }
  public void after_classparts(ClassDef source, ClassParts dest) {
    if (is_equal) history.pop();
  }
  public void before_classmethods(ClassDef source, ClassMethods dest) {
    if (is_equal) {
      ClassDef obj = (ClassDef) history.peek();
      history.push(obj.get_classmethods());
    }
  }
  public void after_classmethods(ClassDef source, ClassMethods dest) {
    if (is_equal) history.pop();
  }
  public void before_eoftoken(ClassDef source, EOFtoken dest) {
    if (is_equal) {
      ClassDef obj = (ClassDef) history.peek();
      history.push(obj.get_eoftoken());
    }
  }
  public void after_eoftoken(ClassDef source, EOFtoken dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassDef host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_classname(ParamClassName source, ClassName dest) {
    if (is_equal) {
      ParamClassName obj = (ParamClassName) history.peek();
      history.push(obj.get_classname());
    }
  }
  public void after_classname(ParamClassName source, ClassName dest) {
    if (is_equal) history.pop();
  }
  public void before_parameters(ParamClassName source, ClassName_Commalist dest) {
    if (is_equal) {
      ParamClassName obj = (ParamClassName) history.peek();
      history.push(obj.get_parameters());
    }
  }
  public void after_parameters(ParamClassName source, ClassName_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(ParamClassName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ClassParts host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_parts(ConstOrAltClass source, PartOrSyntax_List dest) {
    if (is_equal) {
      ConstOrAltClass obj = (ConstOrAltClass) history.peek();
      history.push(obj.get_parts());
    }
  }
  public void after_parts(ConstOrAltClass source, PartOrSyntax_List dest) {
    if (is_equal) history.pop();
  }
  public void before_parents(ConstOrAltClass source, ClassParents dest) {
    if (is_equal) {
      ConstOrAltClass obj = (ConstOrAltClass) history.peek();
      history.push(obj.get_parents());
    }
  }
  public void after_parents(ConstOrAltClass source, ClassParents dest) {
    if (is_equal) history.pop();
  }
  public void before(ConstOrAltClass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PartOrSyntax host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_partname(Part source, PartName dest) {
    if (is_equal) {
      Part obj = (Part) history.peek();
      history.push(obj.get_partname());
    }
  }
  public void after_partname(Part source, PartName dest) {
    if (is_equal) history.pop();
  }
  public void before_keywords(Part source, PartKeyword_List dest) {
    if (is_equal) {
      Part obj = (Part) history.peek();
      history.push(obj.get_keywords());
    }
  }
  public void after_keywords(Part source, PartKeyword_List dest) {
    if (is_equal) history.pop();
  }
  public void before_classspec(Part source, ClassSpec dest) {
    if (is_equal) {
      Part obj = (Part) history.peek();
      history.push(obj.get_classspec());
    }
  }
  public void after_classspec(Part source, ClassSpec dest) {
    if (is_equal) history.pop();
  }
  public void before_partinit(Part source, PartInit dest) {
    if (is_equal) {
      Part obj = (Part) history.peek();
      history.push(obj.get_partinit());
    }
  }
  public void after_partinit(Part source, PartInit dest) {
    if (is_equal) history.pop();
  }
  public void before(Part host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_partinitkeyword(PartInit source, PartInitKeyword dest) {
    if (is_equal) {
      PartInit obj = (PartInit) history.peek();
      history.push(obj.get_partinitkeyword());
    }
  }
  public void after_partinitkeyword(PartInit source, PartInitKeyword dest) {
    if (is_equal) history.pop();
  }
  public void before_javacode(PartInit source, JavaCode dest) {
    if (is_equal) {
      PartInit obj = (PartInit) history.peek();
      history.push(obj.get_javacode());
    }
  }
  public void after_javacode(PartInit source, JavaCode dest) {
    if (is_equal) history.pop();
  }
  public void before(PartInit host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_locallookahead(OptionalPart source, LocalLookahead dest) {
    if (is_equal) {
      OptionalPart obj = (OptionalPart) history.peek();
      history.push(obj.get_locallookahead());
    }
  }
  public void after_locallookahead(OptionalPart source, LocalLookahead dest) {
    if (is_equal) history.pop();
  }
  public void before_part(OptionalPart source, Part_Sandwich dest) {
    if (is_equal) {
      OptionalPart obj = (OptionalPart) history.peek();
      history.push(obj.get_part());
    }
  }
  public void after_part(OptionalPart source, Part_Sandwich dest) {
    if (is_equal) history.pop();
  }
  public void before(OptionalPart host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_superclasses(ClassParents source, Superclasses dest) {
    if (is_equal) {
      ClassParents obj = (ClassParents) history.peek();
      history.push(obj.get_superclasses());
    }
  }
  public void after_superclasses(ClassParents source, Superclasses dest) {
    if (is_equal) history.pop();
  }
  public void before_interfaces(ClassParents source, Interfaces dest) {
    if (is_equal) {
      ClassParents obj = (ClassParents) history.peek();
      history.push(obj.get_interfaces());
    }
  }
  public void after_interfaces(ClassParents source, Interfaces dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassParents host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_extendskeyword(Superclasses source, ExtendsKeyword dest) {
    if (is_equal) {
      Superclasses obj = (Superclasses) history.peek();
      history.push(obj.get_extendskeyword());
    }
  }
  public void after_extendskeyword(Superclasses source, ExtendsKeyword dest) {
    if (is_equal) history.pop();
  }
  public void before_superclasses(Superclasses source, Superclass_Commalist dest) {
    if (is_equal) {
      Superclasses obj = (Superclasses) history.peek();
      history.push(obj.get_superclasses());
    }
  }
  public void after_superclasses(Superclasses source, Superclass_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Superclasses host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_classspec(Superclass source, ClassSpec dest) {
    if (is_equal) {
      Superclass obj = (Superclass) history.peek();
      history.push(obj.get_classspec());
    }
  }
  public void after_classspec(Superclass source, ClassSpec dest) {
    if (is_equal) history.pop();
  }
  public void before(Superclass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_implementskeyword(Interfaces source, ImplementsKeyword dest) {
    if (is_equal) {
      Interfaces obj = (Interfaces) history.peek();
      history.push(obj.get_implementskeyword());
    }
  }
  public void after_implementskeyword(Interfaces source, ImplementsKeyword dest) {
    if (is_equal) history.pop();
  }
  public void before_interfaces(Interfaces source, Interface_Commalist dest) {
    if (is_equal) {
      Interfaces obj = (Interfaces) history.peek();
      history.push(obj.get_interfaces());
    }
  }
  public void after_interfaces(Interfaces source, Interface_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Interfaces host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_classspec(Interface source, ClassSpec dest) {
    if (is_equal) {
      Interface obj = (Interface) history.peek();
      history.push(obj.get_classspec());
    }
  }
  public void after_classspec(Interface source, ClassSpec dest) {
    if (is_equal) history.pop();
  }
  public void before(Interface host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ConstructionClass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_subclasses(AlternationClass source, Subclass_Barlist dest) {
    if (is_equal) {
      AlternationClass obj = (AlternationClass) history.peek();
      history.push(obj.get_subclasses());
    }
  }
  public void after_subclasses(AlternationClass source, Subclass_Barlist dest) {
    if (is_equal) history.pop();
  }
  public void before_commonkeyword(AlternationClass source, CommonKeyword dest) {
    if (is_equal) {
      AlternationClass obj = (AlternationClass) history.peek();
      history.push(obj.get_commonkeyword());
    }
  }
  public void after_commonkeyword(AlternationClass source, CommonKeyword dest) {
    if (is_equal) history.pop();
  }
  public void before(AlternationClass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_locallookahead(Subclass source, LocalLookahead dest) {
    if (is_equal) {
      Subclass obj = (Subclass) history.peek();
      history.push(obj.get_locallookahead());
    }
  }
  public void after_locallookahead(Subclass source, LocalLookahead dest) {
    if (is_equal) history.pop();
  }
  public void before_classspec(Subclass source, ClassSpec dest) {
    if (is_equal) {
      Subclass obj = (Subclass) history.peek();
      history.push(obj.get_classspec());
    }
  }
  public void after_classspec(Subclass source, ClassSpec dest) {
    if (is_equal) history.pop();
  }
  public void before(Subclass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_lookaheadkeyword(LocalLookahead source, LookaheadKeyword dest) {
    if (is_equal) {
      LocalLookahead obj = (LocalLookahead) history.peek();
      history.push(obj.get_lookaheadkeyword());
    }
  }
  public void after_lookaheadkeyword(LocalLookahead source, LookaheadKeyword dest) {
    if (is_equal) history.pop();
  }
  public void before_javacode(LocalLookahead source, JavaCode dest) {
    if (is_equal) {
      LocalLookahead obj = (LocalLookahead) history.peek();
      history.push(obj.get_javacode());
    }
  }
  public void after_javacode(LocalLookahead source, JavaCode dest) {
    if (is_equal) history.pop();
  }
  public void before(LocalLookahead host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_sandwiched(RepetitionClass source, RepeatedPart_Sandwich dest) {
    if (is_equal) {
      RepetitionClass obj = (RepetitionClass) history.peek();
      history.push(obj.get_sandwiched());
    }
  }
  public void after_sandwiched(RepetitionClass source, RepeatedPart_Sandwich dest) {
    if (is_equal) history.pop();
  }
  public void before(RepetitionClass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_nonempty(RepeatedPart source, ClassSpec dest) {
    if (is_equal) {
      RepeatedPart obj = (RepeatedPart) history.peek();
      history.push(obj.get_nonempty());
    }
  }
  public void after_nonempty(RepeatedPart source, ClassSpec dest) {
    if (is_equal) history.pop();
  }
  public void before_locallookahead(RepeatedPart source, LocalLookahead dest) {
    if (is_equal) {
      RepeatedPart obj = (RepeatedPart) history.peek();
      history.push(obj.get_locallookahead());
    }
  }
  public void after_locallookahead(RepeatedPart source, LocalLookahead dest) {
    if (is_equal) history.pop();
  }
  public void before_repeated(RepeatedPart source, ClassSpec_Sandwich dest) {
    if (is_equal) {
      RepeatedPart obj = (RepeatedPart) history.peek();
      history.push(obj.get_repeated());
    }
  }
  public void after_repeated(RepeatedPart source, ClassSpec_Sandwich dest) {
    if (is_equal) history.pop();
  }
  public void before(RepeatedPart host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_classname(ClassSpec source, ClassName dest) {
    if (is_equal) {
      ClassSpec obj = (ClassSpec) history.peek();
      history.push(obj.get_classname());
    }
  }
  public void after_classname(ClassSpec source, ClassName dest) {
    if (is_equal) history.pop();
  }
  public void before_actual_parameters(ClassSpec source, ClassSpec_Commalist dest) {
    if (is_equal) {
      ClassSpec obj = (ClassSpec) history.peek();
      history.push(obj.get_actual_parameters());
    }
  }
  public void after_actual_parameters(ClassSpec source, ClassSpec_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassSpec host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Syntax host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PlainSyntax host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_string().equals(((PlainSyntax) obj).get_string());  }
  public void before(PrintCommand host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PrintIndent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PrintUnindent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PrintSkip host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PrintSpace host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(EOFtoken host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_behavior(ProgramBehavior source, Behavior_DList dest) {
    if (is_equal) {
      ProgramBehavior obj = (ProgramBehavior) history.peek();
      history.push(obj.get_behavior());
    }
  }
  public void after_behavior(ProgramBehavior source, Behavior_DList dest) {
    if (is_equal) history.pop();
  }
  public void before(ProgramBehavior host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Behavior host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_strategyname(StrategyDefinition source, StrategyName dest) {
    if (is_equal) {
      StrategyDefinition obj = (StrategyDefinition) history.peek();
      history.push(obj.get_strategyname());
    }
  }
  public void after_strategyname(StrategyDefinition source, StrategyName dest) {
    if (is_equal) history.pop();
  }
  public void before_exp(StrategyDefinition source, StrategyExpression dest) {
    if (is_equal) {
      StrategyDefinition obj = (StrategyDefinition) history.peek();
      history.push(obj.get_exp());
    }
  }
  public void after_exp(StrategyDefinition source, StrategyExpression dest) {
    if (is_equal) history.pop();
  }
  public void before(StrategyDefinition host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(StrategyExpression host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_edges(StrategyGraph source, SGEdge_SList dest) {
    if (is_equal) {
      StrategyGraph obj = (StrategyGraph) history.peek();
      history.push(obj.get_edges());
    }
  }
  public void after_edges(StrategyGraph source, SGEdge_SList dest) {
    if (is_equal) history.pop();
  }
  public void before_sources(StrategyGraph source, ClassGlobSpec dest) {
    if (is_equal) {
      StrategyGraph obj = (StrategyGraph) history.peek();
      history.push(obj.get_sources());
    }
  }
  public void after_sources(StrategyGraph source, ClassGlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before_sourceEdges(StrategyGraph source, Integer_NList dest) {
    if (is_equal) {
      StrategyGraph obj = (StrategyGraph) history.peek();
      history.push(obj.get_sourceEdges());
    }
  }
  public void after_sourceEdges(StrategyGraph source, Integer_NList dest) {
    if (is_equal) history.pop();
  }
  public void before_targets(StrategyGraph source, ClassGlobSpec dest) {
    if (is_equal) {
      StrategyGraph obj = (StrategyGraph) history.peek();
      history.push(obj.get_targets());
    }
  }
  public void after_targets(StrategyGraph source, ClassGlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before(StrategyGraph host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_edgeVec().equals(((StrategyGraph) obj).get_edgeVec());  }
  public void before_source(SGEdge source, ClassGlobSpec dest) {
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      history.push(obj.get_source());
    }
  }
  public void after_source(SGEdge source, ClassGlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before_dest(SGEdge source, ClassGlobSpec dest) {
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      history.push(obj.get_dest());
    }
  }
  public void after_dest(SGEdge source, ClassGlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before_constraint(SGEdge source, NegativeConstraint dest) {
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      history.push(obj.get_constraint());
    }
  }
  public void after_constraint(SGEdge source, NegativeConstraint dest) {
    if (is_equal) history.pop();
  }
  public void before(SGEdge host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_constraint(PathDirective source, NegativeConstraint dest) {
    if (is_equal) {
      PathDirective obj = (PathDirective) history.peek();
      history.push(obj.get_constraint());
    }
  }
  public void after_constraint(PathDirective source, NegativeConstraint dest) {
    if (is_equal) history.pop();
  }
  public void before_segments(PathDirective source, PathSegment_List dest) {
    if (is_equal) {
      PathDirective obj = (PathDirective) history.peek();
      history.push(obj.get_segments());
    }
  }
  public void after_segments(PathDirective source, PathSegment_List dest) {
    if (is_equal) history.pop();
  }
  public void before_targetdirective(PathDirective source, TargetDirective dest) {
    if (is_equal) {
      PathDirective obj = (PathDirective) history.peek();
      history.push(obj.get_targetdirective());
    }
  }
  public void after_targetdirective(PathDirective source, TargetDirective dest) {
    if (is_equal) history.pop();
  }
  public void before(PathDirective host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_node(PathSegment source, PositiveConstraint dest) {
    if (is_equal) {
      PathSegment obj = (PathSegment) history.peek();
      history.push(obj.get_node());
    }
  }
  public void after_node(PathSegment source, PositiveConstraint dest) {
    if (is_equal) history.pop();
  }
  public void before_constraint(PathSegment source, NegativeConstraint dest) {
    if (is_equal) {
      PathSegment obj = (PathSegment) history.peek();
      history.push(obj.get_constraint());
    }
  }
  public void after_constraint(PathSegment source, NegativeConstraint dest) {
    if (is_equal) history.pop();
  }
  public void before(PathSegment host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_glob(Constraint source, GlobSpec dest) {
    if (is_equal) {
      Constraint obj = (Constraint) history.peek();
      history.push(obj.get_glob());
    }
  }
  public void after_glob(Constraint source, GlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before(Constraint host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PositiveConstraint host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Through host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Via host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(NegativeConstraint host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Bypassing host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(OnlyThrough host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_targets(TargetDirective source, ClassGlobSpec dest) {
    if (is_equal) {
      TargetDirective obj = (TargetDirective) history.peek();
      history.push(obj.get_targets());
    }
  }
  public void after_targets(TargetDirective source, ClassGlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before(TargetDirective host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(To host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ToStop host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_strategyname(StrategyVariable source, StrategyName dest) {
    if (is_equal) {
      StrategyVariable obj = (StrategyVariable) history.peek();
      history.push(obj.get_strategyname());
    }
  }
  public void after_strategyname(StrategyVariable source, StrategyName dest) {
    if (is_equal) history.pop();
  }
  public void before(StrategyVariable host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_args(CompoundStrategy source, StrategyExpression_Commalist dest) {
    if (is_equal) {
      CompoundStrategy obj = (CompoundStrategy) history.peek();
      history.push(obj.get_args());
    }
  }
  public void after_args(CompoundStrategy source, StrategyExpression_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(CompoundStrategy host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Join host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Merge host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Intersect host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(GlobSpec host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_glob(OneGlob source, Glob dest) {
    if (is_equal) {
      OneGlob obj = (OneGlob) history.peek();
      history.push(obj.get_glob());
    }
  }
  public void after_glob(OneGlob source, Glob dest) {
    if (is_equal) history.pop();
  }
  public void before(OneGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_globs(GlobSet source, Glob_Commalist dest) {
    if (is_equal) {
      GlobSet obj = (GlobSet) history.peek();
      history.push(obj.get_globs());
    }
  }
  public void after_globs(GlobSet source, Glob_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(GlobSet host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Glob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(EdgeGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_name(ClassGlob source, ClassNameGlob dest) {
    if (is_equal) {
      ClassGlob obj = (ClassGlob) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(ClassGlob source, ClassNameGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_source(PartGlob source, SourceGlob dest) {
    if (is_equal) {
      PartGlob obj = (PartGlob) history.peek();
      history.push(obj.get_source());
    }
  }
  public void after_source(PartGlob source, SourceGlob dest) {
    if (is_equal) history.pop();
  }
  public void before_name(PartGlob source, PartNameGlob dest) {
    if (is_equal) {
      PartGlob obj = (PartGlob) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(PartGlob source, PartNameGlob dest) {
    if (is_equal) history.pop();
  }
  public void before_dest(PartGlob source, DestGlob dest) {
    if (is_equal) {
      PartGlob obj = (PartGlob) history.peek();
      history.push(obj.get_dest());
    }
  }
  public void after_dest(PartGlob source, DestGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(PartGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_source(SubclassGlob source, SourceGlob dest) {
    if (is_equal) {
      SubclassGlob obj = (SubclassGlob) history.peek();
      history.push(obj.get_source());
    }
  }
  public void after_source(SubclassGlob source, SourceGlob dest) {
    if (is_equal) history.pop();
  }
  public void before_dest(SubclassGlob source, DestGlob dest) {
    if (is_equal) {
      SubclassGlob obj = (SubclassGlob) history.peek();
      history.push(obj.get_dest());
    }
  }
  public void after_dest(SubclassGlob source, DestGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(SubclassGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_source(SuperclassGlob source, SourceGlob dest) {
    if (is_equal) {
      SuperclassGlob obj = (SuperclassGlob) history.peek();
      history.push(obj.get_source());
    }
  }
  public void after_source(SuperclassGlob source, SourceGlob dest) {
    if (is_equal) history.pop();
  }
  public void before_dest(SuperclassGlob source, DestGlob dest) {
    if (is_equal) {
      SuperclassGlob obj = (SuperclassGlob) history.peek();
      history.push(obj.get_dest());
    }
  }
  public void after_dest(SuperclassGlob source, DestGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(SuperclassGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_name(SourceGlob source, ClassNameGlob dest) {
    if (is_equal) {
      SourceGlob obj = (SourceGlob) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(SourceGlob source, ClassNameGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(SourceGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_name(DestGlob source, ClassNameGlob dest) {
    if (is_equal) {
      DestGlob obj = (DestGlob) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(DestGlob source, ClassNameGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(DestGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ClassNameGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_classname(ClassNameExact source, ClassName dest) {
    if (is_equal) {
      ClassNameExact obj = (ClassNameExact) history.peek();
      history.push(obj.get_classname());
    }
  }
  public void after_classname(ClassNameExact source, ClassName dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassNameExact host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(AnyClass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PartNameGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_partname(PartNameExact source, PartName dest) {
    if (is_equal) {
      PartNameExact obj = (PartNameExact) history.peek();
      history.push(obj.get_partname());
    }
  }
  public void after_partname(PartNameExact source, PartName dest) {
    if (is_equal) history.pop();
  }
  public void before(PartNameExact host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(AnyPart host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ClassGlobSpec host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_classglob(OneClassGlob source, ClassGlob dest) {
    if (is_equal) {
      OneClassGlob obj = (OneClassGlob) history.peek();
      history.push(obj.get_classglob());
    }
  }
  public void after_classglob(OneClassGlob source, ClassGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(OneClassGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_globs(ClassGlobSet source, ClassGlob_Commalist dest) {
    if (is_equal) {
      ClassGlobSet obj = (ClassGlobSet) history.peek();
      history.push(obj.get_globs());
    }
  }
  public void after_globs(ClassGlobSet source, ClassGlob_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassGlobSet host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_classes(ClassBehavior source, ClassGlobSpec dest) {
    if (is_equal) {
      ClassBehavior obj = (ClassBehavior) history.peek();
      history.push(obj.get_classes());
    }
  }
  public void after_classes(ClassBehavior source, ClassGlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before_methods(ClassBehavior source, ClassMethods dest) {
    if (is_equal) {
      ClassBehavior obj = (ClassBehavior) history.peek();
      history.push(obj.get_methods());
    }
  }
  public void after_methods(ClassBehavior source, ClassMethods dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassBehavior host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_methods(ClassMethods source, Method_SList dest) {
    if (is_equal) {
      ClassMethods obj = (ClassMethods) history.peek();
      history.push(obj.get_methods());
    }
  }
  public void after_methods(ClassMethods source, Method_SList dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassMethods host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_wrapperdict().equals(((ClassMethods) obj).get_wrapperdict());  }
  public void before_globs(HostSet source, GlobSet dest) {
    if (is_equal) {
      HostSet obj = (HostSet) history.peek();
      history.push(obj.get_globs());
    }
  }
  public void after_globs(HostSet source, GlobSet dest) {
    if (is_equal) history.pop();
  }
  public void before(HostSet host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_exactHosts().equals(((HostSet) obj).get_exactHosts())
      && host.get_partnames().equals(((HostSet) obj).get_partnames());  }
  public void before(Method host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_name(TraversalDef source, TraversalName dest) {
    if (is_equal) {
      TraversalDef obj = (TraversalDef) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(TraversalDef source, TraversalName dest) {
    if (is_equal) history.pop();
  }
  public void before_parms(TraversalDef source, TraversalParms dest) {
    if (is_equal) {
      TraversalDef obj = (TraversalDef) history.peek();
      history.push(obj.get_parms());
    }
  }
  public void after_parms(TraversalDef source, TraversalParms dest) {
    if (is_equal) history.pop();
  }
  public void before_strat(TraversalDef source, StrategyExpression dest) {
    if (is_equal) {
      TraversalDef obj = (TraversalDef) history.peek();
      history.push(obj.get_strat());
    }
  }
  public void after_strat(TraversalDef source, StrategyExpression dest) {
    if (is_equal) history.pop();
  }
  public void before(TraversalDef host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_visitors(TraversalParms source, Visitor_Commalist dest) {
    if (is_equal) {
      TraversalParms obj = (TraversalParms) history.peek();
      history.push(obj.get_visitors());
    }
  }
  public void after_visitors(TraversalParms source, Visitor_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(TraversalParms host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_classname(Visitor source, ClassName dest) {
    if (is_equal) {
      Visitor obj = (Visitor) history.peek();
      history.push(obj.get_classname());
    }
  }
  public void after_classname(Visitor source, ClassName dest) {
    if (is_equal) history.pop();
  }
  public void before_visitorname(Visitor source, VisitorName dest) {
    if (is_equal) {
      Visitor obj = (Visitor) history.peek();
      history.push(obj.get_visitorname());
    }
  }
  public void after_visitorname(Visitor source, VisitorName dest) {
    if (is_equal) history.pop();
  }
  public void before(Visitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_methodsignature(MethodDef source, MethodSignature dest) {
    if (is_equal) {
      MethodDef obj = (MethodDef) history.peek();
      history.push(obj.get_methodsignature());
    }
  }
  public void after_methodsignature(MethodDef source, MethodSignature dest) {
    if (is_equal) history.pop();
  }
  public void before_methodbody(MethodDef source, MethodBody dest) {
    if (is_equal) {
      MethodDef obj = (MethodDef) history.peek();
      history.push(obj.get_methodbody());
    }
  }
  public void after_methodbody(MethodDef source, MethodBody dest) {
    if (is_equal) history.pop();
  }
  public void before(MethodDef host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_keywords(MethodSignature source, MethodKeyword_List dest) {
    if (is_equal) {
      MethodSignature obj = (MethodSignature) history.peek();
      history.push(obj.get_keywords());
    }
  }
  public void after_keywords(MethodSignature source, MethodKeyword_List dest) {
    if (is_equal) history.pop();
  }
  public void before_returnType(MethodSignature source, JavaType dest) {
    if (is_equal) {
      MethodSignature obj = (MethodSignature) history.peek();
      history.push(obj.get_returnType());
    }
  }
  public void after_returnType(MethodSignature source, JavaType dest) {
    if (is_equal) history.pop();
  }
  public void before_name(MethodSignature source, MethodName dest) {
    if (is_equal) {
      MethodSignature obj = (MethodSignature) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(MethodSignature source, MethodName dest) {
    if (is_equal) history.pop();
  }
  public void before_parms(MethodSignature source, MethodParm_Commalist dest) {
    if (is_equal) {
      MethodSignature obj = (MethodSignature) history.peek();
      history.push(obj.get_parms());
    }
  }
  public void after_parms(MethodSignature source, MethodParm_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before_throwsclause(MethodSignature source, Throws dest) {
    if (is_equal) {
      MethodSignature obj = (MethodSignature) history.peek();
      history.push(obj.get_throwsclause());
    }
  }
  public void after_throwsclause(MethodSignature source, Throws dest) {
    if (is_equal) history.pop();
  }
  public void before(MethodSignature host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(MethodKeyword host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PublicMethod host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ProtectedMethod host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PrivateMethod host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(StaticMethod host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(FinalMethod host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(AbstractMethod host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_type(MethodParm source, JavaType dest) {
    if (is_equal) {
      MethodParm obj = (MethodParm) history.peek();
      history.push(obj.get_type());
    }
  }
  public void after_type(MethodParm source, JavaType dest) {
    if (is_equal) history.pop();
  }
  public void before_array1(MethodParm source, ArraySpec_List dest) {
    if (is_equal) {
      MethodParm obj = (MethodParm) history.peek();
      history.push(obj.get_array1());
    }
  }
  public void after_array1(MethodParm source, ArraySpec_List dest) {
    if (is_equal) history.pop();
  }
  public void before_name(MethodParm source, ParmName dest) {
    if (is_equal) {
      MethodParm obj = (MethodParm) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(MethodParm source, ParmName dest) {
    if (is_equal) history.pop();
  }
  public void before_array2(MethodParm source, ArraySpec_List dest) {
    if (is_equal) {
      MethodParm obj = (MethodParm) history.peek();
      history.push(obj.get_array2());
    }
  }
  public void after_array2(MethodParm source, ArraySpec_List dest) {
    if (is_equal) history.pop();
  }
  public void before(MethodParm host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ArraySpec host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_exceptions(Throws source, ClassName_Commalist dest) {
    if (is_equal) {
      Throws obj = (Throws) history.peek();
      history.push(obj.get_exceptions());
    }
  }
  public void after_exceptions(Throws source, ClassName_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Throws host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(MethodBody host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_javacode(VerbatimMethodBody source, JavaCode dest) {
    if (is_equal) {
      VerbatimMethodBody obj = (VerbatimMethodBody) history.peek();
      history.push(obj.get_javacode());
    }
  }
  public void after_javacode(VerbatimMethodBody source, JavaCode dest) {
    if (is_equal) history.pop();
  }
  public void before(VerbatimMethodBody host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_trv(AdaptiveMethodBody source, TraversalExpression dest) {
    if (is_equal) {
      AdaptiveMethodBody obj = (AdaptiveMethodBody) history.peek();
      history.push(obj.get_trv());
    }
  }
  public void after_trv(AdaptiveMethodBody source, TraversalExpression dest) {
    if (is_equal) history.pop();
  }
  public void before_vis(AdaptiveMethodBody source, VisitorExpression dest) {
    if (is_equal) {
      AdaptiveMethodBody obj = (AdaptiveMethodBody) history.peek();
      history.push(obj.get_vis());
    }
  }
  public void after_vis(AdaptiveMethodBody source, VisitorExpression dest) {
    if (is_equal) history.pop();
  }
  public void before(AdaptiveMethodBody host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(NoMethodBody host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(TraversalExpression host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_equals(TraversalRef source, Equals dest) {
    if (is_equal) {
      TraversalRef obj = (TraversalRef) history.peek();
      history.push(obj.get_equals());
    }
  }
  public void after_equals(TraversalRef source, Equals dest) {
    if (is_equal) history.pop();
  }
  public void before_name(TraversalRef source, TraversalName dest) {
    if (is_equal) {
      TraversalRef obj = (TraversalRef) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(TraversalRef source, TraversalName dest) {
    if (is_equal) history.pop();
  }
  public void before(TraversalRef host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Equals host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_strat(TraversalSpec source, StrategyExpression dest) {
    if (is_equal) {
      TraversalSpec obj = (TraversalSpec) history.peek();
      history.push(obj.get_strat());
    }
  }
  public void after_strat(TraversalSpec source, StrategyExpression dest) {
    if (is_equal) history.pop();
  }
  public void before(TraversalSpec host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(VisitorExpression host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(VisitorRef host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_visitorClasses(WithVisitorRef source, ClassName_Commalist dest) {
    if (is_equal) {
      WithVisitorRef obj = (WithVisitorRef) history.peek();
      history.push(obj.get_visitorClasses());
    }
  }
  public void after_visitorClasses(WithVisitorRef source, ClassName_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(WithVisitorRef host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_visitorClasses(ParenVisitorRef source, ClassName_Commalist dest) {
    if (is_equal) {
      ParenVisitorRef obj = (ParenVisitorRef) history.peek();
      history.push(obj.get_visitorClasses());
    }
  }
  public void after_visitorClasses(ParenVisitorRef source, ClassName_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(ParenVisitorRef host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_methods(VisitorSpec source, ClassMethods dest) {
    if (is_equal) {
      VisitorSpec obj = (VisitorSpec) history.peek();
      history.push(obj.get_methods());
    }
  }
  public void after_methods(VisitorSpec source, ClassMethods dest) {
    if (is_equal) history.pop();
  }
  public void before(VisitorSpec host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_kind(Wrapper source, WrapperKind dest) {
    if (is_equal) {
      Wrapper obj = (Wrapper) history.peek();
      history.push(obj.get_kind());
    }
  }
  public void after_kind(Wrapper source, WrapperKind dest) {
    if (is_equal) history.pop();
  }
  public void before_hosts(Wrapper source, HostSpec dest) {
    if (is_equal) {
      Wrapper obj = (Wrapper) history.peek();
      history.push(obj.get_hosts());
    }
  }
  public void after_hosts(Wrapper source, HostSpec dest) {
    if (is_equal) history.pop();
  }
  public void before_javacode(Wrapper source, JavaCode dest) {
    if (is_equal) {
      Wrapper obj = (Wrapper) history.peek();
      history.push(obj.get_javacode());
    }
  }
  public void after_javacode(Wrapper source, JavaCode dest) {
    if (is_equal) history.pop();
  }
  public void before(Wrapper host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(WrapperKind host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Before host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Around host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(After host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(HostSpec host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_partname(Accessor source, PartName dest) {
    if (is_equal) {
      Accessor obj = (Accessor) history.peek();
      history.push(obj.get_partname());
    }
  }
  public void after_partname(Accessor source, PartName dest) {
    if (is_equal) history.pop();
  }
  public void before_javacode(Accessor source, JavaCode dest) {
    if (is_equal) {
      Accessor obj = (Accessor) history.peek();
      history.push(obj.get_javacode());
    }
  }
  public void after_javacode(Accessor source, JavaCode dest) {
    if (is_equal) history.pop();
  }
  public void before(Accessor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Getter host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Setter host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_javacode(Constructor source, JavaCode dest) {
    if (is_equal) {
      Constructor obj = (Constructor) history.peek();
      history.push(obj.get_javacode());
    }
  }
  public void after_javacode(Constructor source, JavaCode dest) {
    if (is_equal) history.pop();
  }
  public void before(Constructor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_javacode(Start source, JavaCode dest) {
    if (is_equal) {
      Start obj = (Start) history.peek();
      history.push(obj.get_javacode());
    }
  }
  public void after_javacode(Start source, JavaCode dest) {
    if (is_equal) history.pop();
  }
  public void before(Start host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_javacode(Finish source, JavaCode dest) {
    if (is_equal) {
      Finish obj = (Finish) history.peek();
      history.push(obj.get_javacode());
    }
  }
  public void after_javacode(Finish source, JavaCode dest) {
    if (is_equal) history.pop();
  }
  public void before(Finish host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_type(ReturnValue source, JavaType dest) {
    if (is_equal) {
      ReturnValue obj = (ReturnValue) history.peek();
      history.push(obj.get_type());
    }
  }
  public void after_type(ReturnValue source, JavaType dest) {
    if (is_equal) history.pop();
  }
  public void before_exp(ReturnValue source, JavaCode dest) {
    if (is_equal) {
      ReturnValue obj = (ReturnValue) history.peek();
      history.push(obj.get_exp());
    }
  }
  public void after_exp(ReturnValue source, JavaCode dest) {
    if (is_equal) history.pop();
  }
  public void before(ReturnValue host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_javacode(Verbatim source, JavaCode dest) {
    if (is_equal) {
      Verbatim obj = (Verbatim) history.peek();
      history.push(obj.get_javacode());
    }
  }
  public void after_javacode(Verbatim source, JavaCode dest) {
    if (is_equal) history.pop();
  }
  public void before(Verbatim host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(PackageName source, Nonempty_PackageName dest) {
    if (is_equal) {
      PackageName obj = (PackageName) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(PackageName source, Nonempty_PackageName dest) {
    if (is_equal) history.pop();
  }
  public void before(PackageName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_name(ClassName source, Name dest) {
    if (is_equal) {
      ClassName obj = (ClassName) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(ClassName source, Name dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_name(PartName source, IdentOrKeyword dest) {
    if (is_equal) {
      PartName obj = (PartName) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(PartName source, IdentOrKeyword dest) {
    if (is_equal) history.pop();
  }
  public void before(PartName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_name(TraversalName source, Name dest) {
    if (is_equal) {
      TraversalName obj = (TraversalName) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(TraversalName source, Name dest) {
    if (is_equal) history.pop();
  }
  public void before(TraversalName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_name(VisitorName source, Name dest) {
    if (is_equal) {
      VisitorName obj = (VisitorName) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(VisitorName source, Name dest) {
    if (is_equal) history.pop();
  }
  public void before(VisitorName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(MethodName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_name().equals(((MethodName) obj).get_name());  }
  public void before(ParmName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_name().equals(((ParmName) obj).get_name());  }
  public void before(StrategyName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_name().equals(((StrategyName) obj).get_name());  }
  public void before_type(JavaType source, Name dest) {
    if (is_equal) {
      JavaType obj = (JavaType) history.peek();
      history.push(obj.get_type());
    }
  }
  public void after_type(JavaType source, Name dest) {
    if (is_equal) history.pop();
  }
  public void before(JavaType host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(JavaCode host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_code().equals(((JavaCode) obj).get_code());  }
  public void before_first(Name source, Nonempty_Name dest) {
    if (is_equal) {
      Name obj = (Name) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Name source, Nonempty_Name dest) {
    if (is_equal) history.pop();
  }
  public void before(Name host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(IdentOrKeyword host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ParseIdent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(NoParseIdent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(VisitorsIdent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(EndVisitorsIdent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(VisitorIdent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(NotParsedIdent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(DerivedIdent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(InitIdent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(CommonIdent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(LookaheadIdent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(OtherIdent host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_id().equals(((OtherIdent) obj).get_id());  }
  public void before(ParseKeyword host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(DoParse host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(DoParseWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(DoParseWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(DontParse host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(DontParseWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(DontParseWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(VisitorKeyword host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(BeginVisitors host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(BeginVisitorsWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(BeginVisitorsWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(EndVisitors host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(EndVisitorsWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(EndVisitorsWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ClassKeyword host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PublicClass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PublicClassWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PublicClassWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(FinalClass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(FinalClassWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(FinalClassWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(InterfaceClass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(InterfaceClassWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(InterfaceClassWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(VisitorClass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(VisitorClassWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(VisitorClassWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(NotParsedClass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(NotParsedClassWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(NotParsedClassWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PartKeyword host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(FinalPart host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(FinalPartWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(FinalPartWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(StaticPart host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(StaticPartWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(StaticPartWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ReadOnlyPart host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ReadOnlyPartWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ReadOnlyPartWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PrivatePart host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PrivatePartWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PrivatePartWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(DerivedPart host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(DerivedPartWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(DerivedPartWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PartInitKeyword host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PartInitKeywordWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PartInitKeywordWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ExtendsKeyword host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ExtendsKeywordWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ExtendsKeywordWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ImplementsKeyword host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ImplementsKeywordWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ImplementsKeywordWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(CommonKeyword host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(CommonWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(CommonWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(LookaheadKeyword host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(LookaheadKeywordWithoutStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(LookaheadKeywordWithStars host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_methodname(TraversalMethodName source, MethodName dest) {
    if (is_equal) {
      TraversalMethodName obj = (TraversalMethodName) history.peek();
      history.push(obj.get_methodname());
    }
  }
  public void after_methodname(TraversalMethodName source, MethodName dest) {
    if (is_equal) history.pop();
  }
  public void before(TraversalMethodName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ClassType host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_is_con() == ((ClassType) obj).get_is_con()
      && host.get_is_alt() == ((ClassType) obj).get_is_alt()
      && host.get_is_rep() == ((ClassType) obj).get_is_rep()
      && host.get_is_public() == ((ClassType) obj).get_is_public()
      && host.get_is_final() == ((ClassType) obj).get_is_final()
      && host.get_is_interface() == ((ClassType) obj).get_is_interface()
      && host.get_is_not_parsed() == ((ClassType) obj).get_is_not_parsed()
      && host.get_is_visitor() == ((ClassType) obj).get_is_visitor();  }
  public void before(PartType host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_is_final() == ((PartType) obj).get_is_final()
      && host.get_is_static() == ((PartType) obj).get_is_static()
      && host.get_is_derived() == ((PartType) obj).get_is_derived()
      && host.get_has_getter() == ((PartType) obj).get_has_getter()
      && host.get_has_setter() == ((PartType) obj).get_has_setter();  }
  public void before_first(Parts source, Nonempty_Parts dest) {
    if (is_equal) {
      Parts obj = (Parts) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Parts source, Nonempty_Parts dest) {
    if (is_equal) history.pop();
  }
  public void before(Parts host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_ugraph(PlacementVisitor source, UGraph dest) {
    if (is_equal) {
      PlacementVisitor obj = (PlacementVisitor) history.peek();
      history.push(obj.get_ugraph());
    }
  }
  public void after_ugraph(PlacementVisitor source, UGraph dest) {
    if (is_equal) history.pop();
  }
  public void before(PlacementVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(EdgeDistinctionVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_edgetype().equals(((EdgeDistinctionVisitor) obj).get_edgetype());  }
  public void before_cn(ClassNameRetVisitor source, ClassName dest) {
    if (is_equal) {
      ClassNameRetVisitor obj = (ClassNameRetVisitor) history.peek();
      history.push(obj.get_cn());
    }
  }
  public void after_cn(ClassNameRetVisitor source, ClassName dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassNameRetVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_pcn(ClassNameTranspVisitor source, ParamClassName dest) {
    if (is_equal) {
      ClassNameTranspVisitor obj = (ClassNameTranspVisitor) history.peek();
      history.push(obj.get_pcn());
    }
  }
  public void after_pcn(ClassNameTranspVisitor source, ParamClassName dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassNameTranspVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_edv(EdgeVisitor source, EdgeDistinctionVisitor dest) {
    if (is_equal) {
      EdgeVisitor obj = (EdgeVisitor) history.peek();
      history.push(obj.get_edv());
    }
  }
  public void after_edv(EdgeVisitor source, EdgeDistinctionVisitor dest) {
    if (is_equal) history.pop();
  }
  public void before_cntv(EdgeVisitor source, ClassNameTranspVisitor dest) {
    if (is_equal) {
      EdgeVisitor obj = (EdgeVisitor) history.peek();
      history.push(obj.get_cntv());
    }
  }
  public void after_cntv(EdgeVisitor source, ClassNameTranspVisitor dest) {
    if (is_equal) history.pop();
  }
  public void before_ugraph(EdgeVisitor source, UGraph dest) {
    if (is_equal) {
      EdgeVisitor obj = (EdgeVisitor) history.peek();
      history.push(obj.get_ugraph());
    }
  }
  public void after_ugraph(EdgeVisitor source, UGraph dest) {
    if (is_equal) history.pop();
  }
  public void before(EdgeVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_thegraph(VertexReadingVisitor source, UGraph dest) {
    if (is_equal) {
      VertexReadingVisitor obj = (VertexReadingVisitor) history.peek();
      history.push(obj.get_thegraph());
    }
  }
  public void after_thegraph(VertexReadingVisitor source, UGraph dest) {
    if (is_equal) history.pop();
  }
  public void before(VertexReadingVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_graphstring().equals(((VertexReadingVisitor) obj).get_graphstring())
      && host.get_lookupvid().equals(((VertexReadingVisitor) obj).get_lookupvid())
      && host.get_uppervalue().equals(((VertexReadingVisitor) obj).get_uppervalue());  }
  public void before_thegraph(EdgeReadingVisitor source, UGraph dest) {
    if (is_equal) {
      EdgeReadingVisitor obj = (EdgeReadingVisitor) history.peek();
      history.push(obj.get_thegraph());
    }
  }
  public void after_thegraph(EdgeReadingVisitor source, UGraph dest) {
    if (is_equal) history.pop();
  }
  public void before(EdgeReadingVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_graphstring().equals(((EdgeReadingVisitor) obj).get_graphstring())
      && host.get_commonstring().equals(((EdgeReadingVisitor) obj).get_commonstring())
      && host.get_lookupvid().equals(((EdgeReadingVisitor) obj).get_lookupvid())
      && host.get_fromtype().equals(((EdgeReadingVisitor) obj).get_fromtype())
      && host.get_pipeswitch().equals(((EdgeReadingVisitor) obj).get_pipeswitch())
      && host.get_listswitch().equals(((EdgeReadingVisitor) obj).get_listswitch());  }
  public void before_elements(ReadVertexVisitor source, VertexContainer dest) {
    if (is_equal) {
      ReadVertexVisitor obj = (ReadVertexVisitor) history.peek();
      history.push(obj.get_elements());
    }
  }
  public void after_elements(ReadVertexVisitor source, VertexContainer dest) {
    if (is_equal) history.pop();
  }
  public void before(ReadVertexVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(VertexContainer host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_construction().equals(((VertexContainer) obj).get_construction())
      && host.get_alternation().equals(((VertexContainer) obj).get_alternation())
      && host.get_termination().equals(((VertexContainer) obj).get_termination());  }
  public void before_elements(ReadEdgeVisitor source, EdgeContainer dest) {
    if (is_equal) {
      ReadEdgeVisitor obj = (ReadEdgeVisitor) history.peek();
      history.push(obj.get_elements());
    }
  }
  public void after_elements(ReadEdgeVisitor source, EdgeContainer dest) {
    if (is_equal) history.pop();
  }
  public void before(ReadEdgeVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(EdgeContainer host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_construction().equals(((EdgeContainer) obj).get_construction())
      && host.get_alternation().equals(((EdgeContainer) obj).get_alternation());  }
  public void before(Main host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(CountingVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_total().equals(((CountingVisitor) obj).get_total());  }
  public void before(superInitVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(InitVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(HashCreateVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ListVectorVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_sv().equals(((ListVectorVisitor) obj).get_sv())
      && host.get_dv().equals(((ListVectorVisitor) obj).get_dv())
      && host.get_bv().equals(((ListVectorVisitor) obj).get_bv());  }
  public void before_duid(DecoCollectVisitor source, UID dest) {
    if (is_equal) {
      DecoCollectVisitor obj = (DecoCollectVisitor) history.peek();
      history.push(obj.get_duid());
    }
  }
  public void after_duid(DecoCollectVisitor source, UID dest) {
    if (is_equal) history.pop();
  }
  public void before(DecoCollectVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_v().equals(((DecoCollectVisitor) obj).get_v());  }
  public void before(tostopVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(RepClassSpecVisitor source, Name dest) {
    if (is_equal) {
      RepClassSpecVisitor obj = (RepClassSpecVisitor) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(RepClassSpecVisitor source, Name dest) {
    if (is_equal) history.pop();
  }
  public void before_inner(RepClassSpecVisitor source, Name dest) {
    if (is_equal) {
      RepClassSpecVisitor obj = (RepClassSpecVisitor) history.peek();
      history.push(obj.get_inner());
    }
  }
  public void after_inner(RepClassSpecVisitor source, Name dest) {
    if (is_equal) history.pop();
  }
  public void before(RepClassSpecVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_pos(PlaceVertexVisitor source, Coordinates dest) {
    if (is_equal) {
      PlaceVertexVisitor obj = (PlaceVertexVisitor) history.peek();
      history.push(obj.get_pos());
    }
  }
  public void after_pos(PlaceVertexVisitor source, Coordinates dest) {
    if (is_equal) history.pop();
  }
  public void before(PlaceVertexVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_vtable().equals(((PlaceVertexVisitor) obj).get_vtable())
      && host.get_etable().equals(((PlaceVertexVisitor) obj).get_etable());  }
  public void before_uce(SomeClassSpecVisitor source, UConstEdge dest) {
    if (is_equal) {
      SomeClassSpecVisitor obj = (SomeClassSpecVisitor) history.peek();
      history.push(obj.get_uce());
    }
  }
  public void after_uce(SomeClassSpecVisitor source, UConstEdge dest) {
    if (is_equal) history.pop();
  }
  public void before(SomeClassSpecVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_il(IntModVisitor source, InterfaceModifier_List dest) {
    if (is_equal) {
      IntModVisitor obj = (IntModVisitor) history.peek();
      history.push(obj.get_il());
    }
  }
  public void after_il(IntModVisitor source, InterfaceModifier_List dest) {
    if (is_equal) history.pop();
  }
  public void before(IntModVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_sl(ClassModVisitor source, ScopeIdentifier_List dest) {
    if (is_equal) {
      ClassModVisitor obj = (ClassModVisitor) history.peek();
      history.push(obj.get_sl());
    }
  }
  public void after_sl(ClassModVisitor source, ScopeIdentifier_List dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassModVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_pl(PartModVisitor source, PartModifier_List dest) {
    if (is_equal) {
      PartModVisitor obj = (PartModVisitor) history.peek();
      history.push(obj.get_pl());
    }
  }
  public void after_pl(PartModVisitor source, PartModifier_List dest) {
    if (is_equal) history.pop();
  }
  public void before(PartModVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(cdStringVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_return_val().equals(((cdStringVisitor) obj).get_return_val());  }
  public void before(ConstVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_vtable().equals(((ConstVisitor) obj).get_vtable())
      && host.get_etable().equals(((ConstVisitor) obj).get_etable());  }
  public void before(AltVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_vtable().equals(((AltVisitor) obj).get_vtable())
      && host.get_etable().equals(((AltVisitor) obj).get_etable());  }
  public void before(IntVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_vtable().equals(((IntVisitor) obj).get_vtable())
      && host.get_etable().equals(((IntVisitor) obj).get_etable());  }
  public void before(ClassGlobVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_sg(SourceEdgeCollector source, StrategyGraph dest) {
    if (is_equal) {
      SourceEdgeCollector obj = (SourceEdgeCollector) history.peek();
      history.push(obj.get_sg());
    }
  }
  public void after_sg(SourceEdgeCollector source, StrategyGraph dest) {
    if (is_equal) history.pop();
  }
  public void before_edges(SourceEdgeCollector source, Integer_NList dest) {
    if (is_equal) {
      SourceEdgeCollector obj = (SourceEdgeCollector) history.peek();
      history.push(obj.get_edges());
    }
  }
  public void after_edges(SourceEdgeCollector source, Integer_NList dest) {
    if (is_equal) history.pop();
  }
  public void before(SourceEdgeCollector host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(ClassNameAccessor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(GlobVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_glob(GlobMatcher source, Glob dest) {
    if (is_equal) {
      GlobMatcher obj = (GlobMatcher) history.peek();
      history.push(obj.get_glob());
    }
  }
  public void after_glob(GlobMatcher source, Glob dest) {
    if (is_equal) history.pop();
  }
  public void before(GlobMatcher host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_found_one() == ((GlobMatcher) obj).get_found_one();  }
  public void before_spec(GlobCollector source, GlobSet dest) {
    if (is_equal) {
      GlobCollector obj = (GlobCollector) history.peek();
      history.push(obj.get_spec());
    }
  }
  public void after_spec(GlobCollector source, GlobSet dest) {
    if (is_equal) history.pop();
  }
  public void before(GlobCollector host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_spec(ClassGlobCollector source, ClassGlobSet dest) {
    if (is_equal) {
      ClassGlobCollector obj = (ClassGlobCollector) history.peek();
      history.push(obj.get_spec());
    }
  }
  public void after_spec(ClassGlobCollector source, ClassGlobSet dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassGlobCollector host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_spec(EdgeGlobCollector source, GlobSet dest) {
    if (is_equal) {
      EdgeGlobCollector obj = (EdgeGlobCollector) history.peek();
      history.push(obj.get_spec());
    }
  }
  public void after_spec(EdgeGlobCollector source, GlobSet dest) {
    if (is_equal) history.pop();
  }
  public void before(EdgeGlobCollector host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_spec(OutgoingEdgeSpecConvertor source, GlobSet dest) {
    if (is_equal) {
      OutgoingEdgeSpecConvertor obj = (OutgoingEdgeSpecConvertor) history.peek();
      history.push(obj.get_spec());
    }
  }
  public void after_spec(OutgoingEdgeSpecConvertor source, GlobSet dest) {
    if (is_equal) history.pop();
  }
  public void before(OutgoingEdgeSpecConvertor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(SGEdgeMatcher host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_c().equals(((SGEdgeMatcher) obj).get_c())
      && host.get_index() == ((SGEdgeMatcher) obj).get_index()
      && host.get_return_val().equals(((SGEdgeMatcher) obj).get_return_val());  }
  public void before(TGVertexCollector host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_tg().equals(((TGVertexCollector) obj).get_tg());  }
  public void before_s(TGEdgeGlobMaker source, ClassName dest) {
    if (is_equal) {
      TGEdgeGlobMaker obj = (TGEdgeGlobMaker) history.peek();
      history.push(obj.get_s());
    }
  }
  public void after_s(TGEdgeGlobMaker source, ClassName dest) {
    if (is_equal) history.pop();
  }
  public void before_d(TGEdgeGlobMaker source, ClassName dest) {
    if (is_equal) {
      TGEdgeGlobMaker obj = (TGEdgeGlobMaker) history.peek();
      history.push(obj.get_d());
    }
  }
  public void after_d(TGEdgeGlobMaker source, ClassName dest) {
    if (is_equal) history.pop();
  }
  public void before_cl(TGEdgeGlobMaker source, ClassName dest) {
    if (is_equal) {
      TGEdgeGlobMaker obj = (TGEdgeGlobMaker) history.peek();
      history.push(obj.get_cl());
    }
  }
  public void after_cl(TGEdgeGlobMaker source, ClassName dest) {
    if (is_equal) history.pop();
  }
  public void before_name(TGEdgeGlobMaker source, PartName dest) {
    if (is_equal) {
      TGEdgeGlobMaker obj = (TGEdgeGlobMaker) history.peek();
      history.push(obj.get_name());
    }
  }
  public void after_name(TGEdgeGlobMaker source, PartName dest) {
    if (is_equal) history.pop();
  }
  public void before_return_val(TGEdgeGlobMaker source, Glob dest) {
    if (is_equal) {
      TGEdgeGlobMaker obj = (TGEdgeGlobMaker) history.peek();
      history.push(obj.get_return_val());
    }
  }
  public void after_return_val(TGEdgeGlobMaker source, Glob dest) {
    if (is_equal) history.pop();
  }
  public void before(TGEdgeGlobMaker host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(TGCreateVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_g().equals(((TGCreateVisitor) obj).get_g())
      && host.get_vtable().equals(((TGCreateVisitor) obj).get_vtable());  }
  public void before(TGUpdateVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(SaveGraphVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_graphString().equals(((SaveGraphVisitor) obj).get_graphString());  }
  public void before(SelectMarkedVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_bflag() == ((SelectMarkedVisitor) obj).get_bflag()
      && host.get_cflag() == ((SelectMarkedVisitor) obj).get_cflag()
      && host.get_anyEdgeflag() == ((SelectMarkedVisitor) obj).get_anyEdgeflag()
      && host.get_graphString().equals(((SelectMarkedVisitor) obj).get_graphString())
      && host.get_ioeString().equals(((SelectMarkedVisitor) obj).get_ioeString());  }
  public void before(SGraphCollector host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_names().equals(((SGraphCollector) obj).get_names())
      && host.get_graphs().equals(((SGraphCollector) obj).get_graphs());  }
  public void before(VecVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_names().equals(((VecVisitor) obj).get_names());  }
  public void before(StringVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_name().equals(((StringVisitor) obj).get_name());  }
  public void before(DummyVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PrintVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_indent() == ((PrintVisitor) obj).get_indent()
      && host.get_needSpace() == ((PrintVisitor) obj).get_needSpace();  }
  public void before(CopyVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(EqualVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_is_equal() == ((EqualVisitor) obj).get_is_equal();  }
  public void before(DisplayVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_indent() == ((DisplayVisitor) obj).get_indent();  }
  public void before(TraceVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_indent() == ((TraceVisitor) obj).get_indent();  }
  public void before(UniversalVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(Import_SList source, Nonempty_Import_SList dest) {
    if (is_equal) {
      Import_SList obj = (Import_SList) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Import_SList source, Nonempty_Import_SList dest) {
    if (is_equal) history.pop();
  }
  public void before(Import_SList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(ClassGraphEntry_DList source, Nonempty_ClassGraphEntry_DList dest) {
    if (is_equal) {
      ClassGraphEntry_DList obj = (ClassGraphEntry_DList) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(ClassGraphEntry_DList source, Nonempty_ClassGraphEntry_DList dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassGraphEntry_DList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(ClassKeyword_List source, Nonempty_ClassKeyword_List dest) {
    if (is_equal) {
      ClassKeyword_List obj = (ClassKeyword_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(ClassKeyword_List source, Nonempty_ClassKeyword_List dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassKeyword_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(ClassName_Commalist source, Nonempty_ClassName_Commalist dest) {
    if (is_equal) {
      ClassName_Commalist obj = (ClassName_Commalist) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(ClassName_Commalist source, Nonempty_ClassName_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassName_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(PartOrSyntax_List source, Nonempty_PartOrSyntax_List dest) {
    if (is_equal) {
      PartOrSyntax_List obj = (PartOrSyntax_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(PartOrSyntax_List source, Nonempty_PartOrSyntax_List dest) {
    if (is_equal) history.pop();
  }
  public void before(PartOrSyntax_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(PartKeyword_List source, Nonempty_PartKeyword_List dest) {
    if (is_equal) {
      PartKeyword_List obj = (PartKeyword_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(PartKeyword_List source, Nonempty_PartKeyword_List dest) {
    if (is_equal) history.pop();
  }
  public void before(PartKeyword_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(Part_Sandwich source, Syntax_List dest) {
    if (is_equal) {
      Part_Sandwich obj = (Part_Sandwich) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Part_Sandwich source, Syntax_List dest) {
    if (is_equal) history.pop();
  }
  public void before_inner(Part_Sandwich source, Part dest) {
    if (is_equal) {
      Part_Sandwich obj = (Part_Sandwich) history.peek();
      history.push(obj.get_inner());
    }
  }
  public void after_inner(Part_Sandwich source, Part dest) {
    if (is_equal) history.pop();
  }
  public void before_second(Part_Sandwich source, Syntax_List dest) {
    if (is_equal) {
      Part_Sandwich obj = (Part_Sandwich) history.peek();
      history.push(obj.get_second());
    }
  }
  public void after_second(Part_Sandwich source, Syntax_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Part_Sandwich host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(Superclass_Commalist source, Nonempty_Superclass_Commalist dest) {
    if (is_equal) {
      Superclass_Commalist obj = (Superclass_Commalist) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Superclass_Commalist source, Nonempty_Superclass_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Superclass_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(Interface_Commalist source, Nonempty_Interface_Commalist dest) {
    if (is_equal) {
      Interface_Commalist obj = (Interface_Commalist) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Interface_Commalist source, Nonempty_Interface_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Interface_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(Subclass_Barlist source, Nonempty_Subclass_Barlist dest) {
    if (is_equal) {
      Subclass_Barlist obj = (Subclass_Barlist) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Subclass_Barlist source, Nonempty_Subclass_Barlist dest) {
    if (is_equal) history.pop();
  }
  public void before(Subclass_Barlist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(RepeatedPart_Sandwich source, Syntax_List dest) {
    if (is_equal) {
      RepeatedPart_Sandwich obj = (RepeatedPart_Sandwich) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(RepeatedPart_Sandwich source, Syntax_List dest) {
    if (is_equal) history.pop();
  }
  public void before_inner(RepeatedPart_Sandwich source, RepeatedPart dest) {
    if (is_equal) {
      RepeatedPart_Sandwich obj = (RepeatedPart_Sandwich) history.peek();
      history.push(obj.get_inner());
    }
  }
  public void after_inner(RepeatedPart_Sandwich source, RepeatedPart dest) {
    if (is_equal) history.pop();
  }
  public void before_second(RepeatedPart_Sandwich source, Syntax_List dest) {
    if (is_equal) {
      RepeatedPart_Sandwich obj = (RepeatedPart_Sandwich) history.peek();
      history.push(obj.get_second());
    }
  }
  public void after_second(RepeatedPart_Sandwich source, Syntax_List dest) {
    if (is_equal) history.pop();
  }
  public void before(RepeatedPart_Sandwich host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(ClassSpec_Sandwich source, Syntax_List dest) {
    if (is_equal) {
      ClassSpec_Sandwich obj = (ClassSpec_Sandwich) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(ClassSpec_Sandwich source, Syntax_List dest) {
    if (is_equal) history.pop();
  }
  public void before_inner(ClassSpec_Sandwich source, ClassSpec dest) {
    if (is_equal) {
      ClassSpec_Sandwich obj = (ClassSpec_Sandwich) history.peek();
      history.push(obj.get_inner());
    }
  }
  public void after_inner(ClassSpec_Sandwich source, ClassSpec dest) {
    if (is_equal) history.pop();
  }
  public void before_second(ClassSpec_Sandwich source, Syntax_List dest) {
    if (is_equal) {
      ClassSpec_Sandwich obj = (ClassSpec_Sandwich) history.peek();
      history.push(obj.get_second());
    }
  }
  public void after_second(ClassSpec_Sandwich source, Syntax_List dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassSpec_Sandwich host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(Syntax_List source, Nonempty_Syntax_List dest) {
    if (is_equal) {
      Syntax_List obj = (Syntax_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Syntax_List source, Nonempty_Syntax_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Syntax_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(ClassSpec_Commalist source, Nonempty_ClassSpec_Commalist dest) {
    if (is_equal) {
      ClassSpec_Commalist obj = (ClassSpec_Commalist) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(ClassSpec_Commalist source, Nonempty_ClassSpec_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassSpec_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(Behavior_DList source, Nonempty_Behavior_DList dest) {
    if (is_equal) {
      Behavior_DList obj = (Behavior_DList) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Behavior_DList source, Nonempty_Behavior_DList dest) {
    if (is_equal) history.pop();
  }
  public void before(Behavior_DList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    if (is_equal) {
      SGEdge_SList obj = (SGEdge_SList) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    if (is_equal) history.pop();
  }
  public void before(SGEdge_SList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(Integer_NList source, Nonempty_Integer_NList dest) {
    if (is_equal) {
      Integer_NList obj = (Integer_NList) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Integer_NList source, Nonempty_Integer_NList dest) {
    if (is_equal) history.pop();
  }
  public void before(Integer_NList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(PathSegment_List source, Nonempty_PathSegment_List dest) {
    if (is_equal) {
      PathSegment_List obj = (PathSegment_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(PathSegment_List source, Nonempty_PathSegment_List dest) {
    if (is_equal) history.pop();
  }
  public void before(PathSegment_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(StrategyExpression_Commalist source, Nonempty_StrategyExpression_Commalist dest) {
    if (is_equal) {
      StrategyExpression_Commalist obj = (StrategyExpression_Commalist) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(StrategyExpression_Commalist source, Nonempty_StrategyExpression_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(StrategyExpression_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    if (is_equal) {
      Glob_Commalist obj = (Glob_Commalist) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Glob_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    if (is_equal) {
      ClassGlob_Commalist obj = (ClassGlob_Commalist) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassGlob_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(Method_SList source, Nonempty_Method_SList dest) {
    if (is_equal) {
      Method_SList obj = (Method_SList) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Method_SList source, Nonempty_Method_SList dest) {
    if (is_equal) history.pop();
  }
  public void before(Method_SList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(Visitor_Commalist source, Nonempty_Visitor_Commalist dest) {
    if (is_equal) {
      Visitor_Commalist obj = (Visitor_Commalist) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Visitor_Commalist source, Nonempty_Visitor_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Visitor_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(MethodKeyword_List source, Nonempty_MethodKeyword_List dest) {
    if (is_equal) {
      MethodKeyword_List obj = (MethodKeyword_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(MethodKeyword_List source, Nonempty_MethodKeyword_List dest) {
    if (is_equal) history.pop();
  }
  public void before(MethodKeyword_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(MethodParm_Commalist source, Nonempty_MethodParm_Commalist dest) {
    if (is_equal) {
      MethodParm_Commalist obj = (MethodParm_Commalist) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(MethodParm_Commalist source, Nonempty_MethodParm_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(MethodParm_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_first(ArraySpec_List source, Nonempty_ArraySpec_List dest) {
    if (is_equal) {
      ArraySpec_List obj = (ArraySpec_List) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(ArraySpec_List source, Nonempty_ArraySpec_List dest) {
    if (is_equal) history.pop();
  }
  public void before(ArraySpec_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_UVertex_List source, UVertex dest) {
    if (is_equal) {
      Nonempty_UVertex_List obj = (Nonempty_UVertex_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_UVertex_List source, UVertex dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_UVertex_List source, Nonempty_UVertex_List dest) {
    if (is_equal) {
      Nonempty_UVertex_List obj = (Nonempty_UVertex_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_UVertex_List source, Nonempty_UVertex_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_UVertex_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_IEdge_List source, UID dest) {
    if (is_equal) {
      Nonempty_IEdge_List obj = (Nonempty_IEdge_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_IEdge_List source, UID dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_IEdge_List source, Nonempty_IEdge_List dest) {
    if (is_equal) {
      Nonempty_IEdge_List obj = (Nonempty_IEdge_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_IEdge_List source, Nonempty_IEdge_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_IEdge_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_OEdge_List source, UID dest) {
    if (is_equal) {
      Nonempty_OEdge_List obj = (Nonempty_OEdge_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_OEdge_List source, UID dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_OEdge_List source, Nonempty_OEdge_List dest) {
    if (is_equal) {
      Nonempty_OEdge_List obj = (Nonempty_OEdge_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_OEdge_List source, Nonempty_OEdge_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_OEdge_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_InterfaceModifier_List source, InterfaceModifier dest) {
    if (is_equal) {
      Nonempty_InterfaceModifier_List obj = (Nonempty_InterfaceModifier_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_InterfaceModifier_List source, InterfaceModifier dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_InterfaceModifier_List source, Nonempty_InterfaceModifier_List dest) {
    if (is_equal) {
      Nonempty_InterfaceModifier_List obj = (Nonempty_InterfaceModifier_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_InterfaceModifier_List source, Nonempty_InterfaceModifier_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_InterfaceModifier_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_ScopeIdentifier_List source, ScopeIdentifier dest) {
    if (is_equal) {
      Nonempty_ScopeIdentifier_List obj = (Nonempty_ScopeIdentifier_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_ScopeIdentifier_List source, ScopeIdentifier dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_ScopeIdentifier_List source, Nonempty_ScopeIdentifier_List dest) {
    if (is_equal) {
      Nonempty_ScopeIdentifier_List obj = (Nonempty_ScopeIdentifier_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_ScopeIdentifier_List source, Nonempty_ScopeIdentifier_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_ScopeIdentifier_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_UEdge_List source, UEdge dest) {
    if (is_equal) {
      Nonempty_UEdge_List obj = (Nonempty_UEdge_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_UEdge_List source, UEdge dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_UEdge_List source, Nonempty_UEdge_List dest) {
    if (is_equal) {
      Nonempty_UEdge_List obj = (Nonempty_UEdge_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_UEdge_List source, Nonempty_UEdge_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_UEdge_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_PartModifier_List source, PartModifier dest) {
    if (is_equal) {
      Nonempty_PartModifier_List obj = (Nonempty_PartModifier_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_PartModifier_List source, PartModifier dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_PartModifier_List source, Nonempty_PartModifier_List dest) {
    if (is_equal) {
      Nonempty_PartModifier_List obj = (Nonempty_PartModifier_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_PartModifier_List source, Nonempty_PartModifier_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_PartModifier_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_PackageName source, IdentOrKeyword dest) {
    if (is_equal) {
      Nonempty_PackageName obj = (Nonempty_PackageName) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_PackageName source, IdentOrKeyword dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_PackageName source, Nonempty_PackageName dest) {
    if (is_equal) {
      Nonempty_PackageName obj = (Nonempty_PackageName) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_PackageName source, Nonempty_PackageName dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_PackageName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_next(Nonempty_Name source, Nonempty_Name dest) {
    if (is_equal) {
      Nonempty_Name obj = (Nonempty_Name) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Name source, Nonempty_Name dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Name host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_it().equals(((Nonempty_Name) obj).get_it());  }
  public void before_it(Nonempty_Parts source, Part dest) {
    if (is_equal) {
      Nonempty_Parts obj = (Nonempty_Parts) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_Parts source, Part dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Parts source, Nonempty_Parts dest) {
    if (is_equal) {
      Nonempty_Parts obj = (Nonempty_Parts) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Parts source, Nonempty_Parts dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Parts host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_Import_SList source, Import dest) {
    if (is_equal) {
      Nonempty_Import_SList obj = (Nonempty_Import_SList) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_Import_SList source, Import dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Import_SList source, Nonempty_Import_SList dest) {
    if (is_equal) {
      Nonempty_Import_SList obj = (Nonempty_Import_SList) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Import_SList source, Nonempty_Import_SList dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Import_SList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_ClassGraphEntry_DList source, ClassGraphEntry dest) {
    if (is_equal) {
      Nonempty_ClassGraphEntry_DList obj = (Nonempty_ClassGraphEntry_DList) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_ClassGraphEntry_DList source, ClassGraphEntry dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_ClassGraphEntry_DList source, Nonempty_ClassGraphEntry_DList dest) {
    if (is_equal) {
      Nonempty_ClassGraphEntry_DList obj = (Nonempty_ClassGraphEntry_DList) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_ClassGraphEntry_DList source, Nonempty_ClassGraphEntry_DList dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_ClassGraphEntry_DList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_ClassKeyword_List source, ClassKeyword dest) {
    if (is_equal) {
      Nonempty_ClassKeyword_List obj = (Nonempty_ClassKeyword_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_ClassKeyword_List source, ClassKeyword dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_ClassKeyword_List source, Nonempty_ClassKeyword_List dest) {
    if (is_equal) {
      Nonempty_ClassKeyword_List obj = (Nonempty_ClassKeyword_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_ClassKeyword_List source, Nonempty_ClassKeyword_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_ClassKeyword_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_ClassName_Commalist source, ClassName dest) {
    if (is_equal) {
      Nonempty_ClassName_Commalist obj = (Nonempty_ClassName_Commalist) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_ClassName_Commalist source, ClassName dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_ClassName_Commalist source, Nonempty_ClassName_Commalist dest) {
    if (is_equal) {
      Nonempty_ClassName_Commalist obj = (Nonempty_ClassName_Commalist) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_ClassName_Commalist source, Nonempty_ClassName_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_ClassName_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_PartOrSyntax_List source, PartOrSyntax dest) {
    if (is_equal) {
      Nonempty_PartOrSyntax_List obj = (Nonempty_PartOrSyntax_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_PartOrSyntax_List source, PartOrSyntax dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_PartOrSyntax_List source, Nonempty_PartOrSyntax_List dest) {
    if (is_equal) {
      Nonempty_PartOrSyntax_List obj = (Nonempty_PartOrSyntax_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_PartOrSyntax_List source, Nonempty_PartOrSyntax_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_PartOrSyntax_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_PartKeyword_List source, PartKeyword dest) {
    if (is_equal) {
      Nonempty_PartKeyword_List obj = (Nonempty_PartKeyword_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_PartKeyword_List source, PartKeyword dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_PartKeyword_List source, Nonempty_PartKeyword_List dest) {
    if (is_equal) {
      Nonempty_PartKeyword_List obj = (Nonempty_PartKeyword_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_PartKeyword_List source, Nonempty_PartKeyword_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_PartKeyword_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_Superclass_Commalist source, Superclass dest) {
    if (is_equal) {
      Nonempty_Superclass_Commalist obj = (Nonempty_Superclass_Commalist) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_Superclass_Commalist source, Superclass dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Superclass_Commalist source, Nonempty_Superclass_Commalist dest) {
    if (is_equal) {
      Nonempty_Superclass_Commalist obj = (Nonempty_Superclass_Commalist) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Superclass_Commalist source, Nonempty_Superclass_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Superclass_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_Interface_Commalist source, Interface dest) {
    if (is_equal) {
      Nonempty_Interface_Commalist obj = (Nonempty_Interface_Commalist) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_Interface_Commalist source, Interface dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Interface_Commalist source, Nonempty_Interface_Commalist dest) {
    if (is_equal) {
      Nonempty_Interface_Commalist obj = (Nonempty_Interface_Commalist) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Interface_Commalist source, Nonempty_Interface_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Interface_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_Subclass_Barlist source, Subclass dest) {
    if (is_equal) {
      Nonempty_Subclass_Barlist obj = (Nonempty_Subclass_Barlist) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_Subclass_Barlist source, Subclass dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Subclass_Barlist source, Nonempty_Subclass_Barlist dest) {
    if (is_equal) {
      Nonempty_Subclass_Barlist obj = (Nonempty_Subclass_Barlist) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Subclass_Barlist source, Nonempty_Subclass_Barlist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Subclass_Barlist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_Syntax_List source, Syntax dest) {
    if (is_equal) {
      Nonempty_Syntax_List obj = (Nonempty_Syntax_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_Syntax_List source, Syntax dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Syntax_List source, Nonempty_Syntax_List dest) {
    if (is_equal) {
      Nonempty_Syntax_List obj = (Nonempty_Syntax_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Syntax_List source, Nonempty_Syntax_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Syntax_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_ClassSpec_Commalist source, ClassSpec dest) {
    if (is_equal) {
      Nonempty_ClassSpec_Commalist obj = (Nonempty_ClassSpec_Commalist) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_ClassSpec_Commalist source, ClassSpec dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_ClassSpec_Commalist source, Nonempty_ClassSpec_Commalist dest) {
    if (is_equal) {
      Nonempty_ClassSpec_Commalist obj = (Nonempty_ClassSpec_Commalist) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_ClassSpec_Commalist source, Nonempty_ClassSpec_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_ClassSpec_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_Behavior_DList source, Behavior dest) {
    if (is_equal) {
      Nonempty_Behavior_DList obj = (Nonempty_Behavior_DList) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_Behavior_DList source, Behavior dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Behavior_DList source, Nonempty_Behavior_DList dest) {
    if (is_equal) {
      Nonempty_Behavior_DList obj = (Nonempty_Behavior_DList) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Behavior_DList source, Nonempty_Behavior_DList dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Behavior_DList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_SGEdge_SList source, SGEdge dest) {
    if (is_equal) {
      Nonempty_SGEdge_SList obj = (Nonempty_SGEdge_SList) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_SGEdge_SList source, SGEdge dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    if (is_equal) {
      Nonempty_SGEdge_SList obj = (Nonempty_SGEdge_SList) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_SGEdge_SList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_next(Nonempty_Integer_NList source, Nonempty_Integer_NList dest) {
    if (is_equal) {
      Nonempty_Integer_NList obj = (Nonempty_Integer_NList) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Integer_NList source, Nonempty_Integer_NList dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Integer_NList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_it().equals(((Nonempty_Integer_NList) obj).get_it());  }
  public void before_it(Nonempty_PathSegment_List source, PathSegment dest) {
    if (is_equal) {
      Nonempty_PathSegment_List obj = (Nonempty_PathSegment_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_PathSegment_List source, PathSegment dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_PathSegment_List source, Nonempty_PathSegment_List dest) {
    if (is_equal) {
      Nonempty_PathSegment_List obj = (Nonempty_PathSegment_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_PathSegment_List source, Nonempty_PathSegment_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_PathSegment_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_StrategyExpression_Commalist source, StrategyExpression dest) {
    if (is_equal) {
      Nonempty_StrategyExpression_Commalist obj = (Nonempty_StrategyExpression_Commalist) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_StrategyExpression_Commalist source, StrategyExpression dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_StrategyExpression_Commalist source, Nonempty_StrategyExpression_Commalist dest) {
    if (is_equal) {
      Nonempty_StrategyExpression_Commalist obj = (Nonempty_StrategyExpression_Commalist) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_StrategyExpression_Commalist source, Nonempty_StrategyExpression_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_StrategyExpression_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_Glob_Commalist source, Glob dest) {
    if (is_equal) {
      Nonempty_Glob_Commalist obj = (Nonempty_Glob_Commalist) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_Glob_Commalist source, Glob dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    if (is_equal) {
      Nonempty_Glob_Commalist obj = (Nonempty_Glob_Commalist) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Glob_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_ClassGlob_Commalist source, ClassGlob dest) {
    if (is_equal) {
      Nonempty_ClassGlob_Commalist obj = (Nonempty_ClassGlob_Commalist) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_ClassGlob_Commalist source, ClassGlob dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    if (is_equal) {
      Nonempty_ClassGlob_Commalist obj = (Nonempty_ClassGlob_Commalist) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_ClassGlob_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_Method_SList source, Method dest) {
    if (is_equal) {
      Nonempty_Method_SList obj = (Nonempty_Method_SList) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_Method_SList source, Method dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Method_SList source, Nonempty_Method_SList dest) {
    if (is_equal) {
      Nonempty_Method_SList obj = (Nonempty_Method_SList) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Method_SList source, Nonempty_Method_SList dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Method_SList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_Visitor_Commalist source, Visitor dest) {
    if (is_equal) {
      Nonempty_Visitor_Commalist obj = (Nonempty_Visitor_Commalist) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_Visitor_Commalist source, Visitor dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Visitor_Commalist source, Nonempty_Visitor_Commalist dest) {
    if (is_equal) {
      Nonempty_Visitor_Commalist obj = (Nonempty_Visitor_Commalist) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Visitor_Commalist source, Nonempty_Visitor_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Visitor_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_MethodKeyword_List source, MethodKeyword dest) {
    if (is_equal) {
      Nonempty_MethodKeyword_List obj = (Nonempty_MethodKeyword_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_MethodKeyword_List source, MethodKeyword dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_MethodKeyword_List source, Nonempty_MethodKeyword_List dest) {
    if (is_equal) {
      Nonempty_MethodKeyword_List obj = (Nonempty_MethodKeyword_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_MethodKeyword_List source, Nonempty_MethodKeyword_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_MethodKeyword_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_MethodParm_Commalist source, MethodParm dest) {
    if (is_equal) {
      Nonempty_MethodParm_Commalist obj = (Nonempty_MethodParm_Commalist) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_MethodParm_Commalist source, MethodParm dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_MethodParm_Commalist source, Nonempty_MethodParm_Commalist dest) {
    if (is_equal) {
      Nonempty_MethodParm_Commalist obj = (Nonempty_MethodParm_Commalist) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_MethodParm_Commalist source, Nonempty_MethodParm_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_MethodParm_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_it(Nonempty_ArraySpec_List source, ArraySpec dest) {
    if (is_equal) {
      Nonempty_ArraySpec_List obj = (Nonempty_ArraySpec_List) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_ArraySpec_List source, ArraySpec dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_ArraySpec_List source, Nonempty_ArraySpec_List dest) {
    if (is_equal) {
      Nonempty_ArraySpec_List obj = (Nonempty_ArraySpec_List) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_ArraySpec_List source, Nonempty_ArraySpec_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_ArraySpec_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  boolean get_return_val() { return is_equal ; }
  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_);
    super.universal_trv0(_v_);
    universal_trv0_aft(_v_);
  }
}

