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 ClassDef extends Definition {
  protected ClassKeyword_List keywords;
  public ClassKeyword_List get_keywords() { return keywords; }
  public void set_keywords(ClassKeyword_List new_keywords)
    { keywords = new_keywords; }
  protected ParamClassName paramclassname;
  public ParamClassName get_paramclassname() { return paramclassname; }
  public void set_paramclassname(ParamClassName new_paramclassname)
    { paramclassname = new_paramclassname; }
  protected ParseDirective parsedirective;
  public ParseDirective get_parsedirective() { return parsedirective; }
  public void set_parsedirective(ParseDirective new_parsedirective)
    { parsedirective = new_parsedirective; }
  protected ClassParts classparts;
  public ClassParts get_classparts() { return classparts; }
  public void set_classparts(ClassParts new_classparts)
    { classparts = new_classparts; }
  protected ClassMethods classmethods;
  public ClassMethods get_classmethods() { return classmethods; }
  public void set_classmethods(ClassMethods new_classmethods)
    { classmethods = new_classmethods; }
  protected EOFtoken eoftoken;
  public EOFtoken get_eoftoken() { return eoftoken; }
  public void set_eoftoken(EOFtoken new_eoftoken)
    { eoftoken = new_eoftoken; }
  ClassDef() { super(); }
  public ClassDef(ClassKeyword_List keywords, ParamClassName paramclassname, ParseDirective parsedirective, ClassParts classparts, ClassMethods classmethods, EOFtoken eoftoken) {
    super();
    set_keywords(keywords);
    set_paramclassname(paramclassname);
    set_parsedirective(parsedirective);
    set_classparts(classparts);
    set_classmethods(classmethods);
    set_eoftoken(eoftoken);
  }
  public static ClassDef parse(java.io.InputStream in) throws ParseException
    { return new Parser(in)._ClassDef(); }
  public static ClassDef parse(String s) {
    try { return parse(new java.io.ByteArrayInputStream(s.getBytes())); }
    catch (ParseException e) { throw new RuntimeException(e.toString()); }
  }

	public ScopeIdentifier_List getClassMods()
	{
		ScopeIdentifier_List sl = new ScopeIdentifier_List();
		toClassKeyword(new ClassModVisitor(sl));
		return sl;
	}
	  ClassName get_classname() {
    __V_ClassDef_get_classname v0 = new __V_ClassDef_get_classname();
    v0.start();
    toClassName(v0);
    v0.finish();
    return v0.get_return_val();
  }
  void universal_trv0_bef(UniversalVisitor _v_) {
    super.universal_trv0_bef(_v_);
    _v_.before(this);
  }
  void universal_trv0_aft(UniversalVisitor _v_) {
    _v_.after(this);
    super.universal_trv0_aft(_v_);
  }
  void universal_trv0(UniversalVisitor _v_) {
    universal_trv0_bef(_v_);
    _v_.before_keywords(this, keywords);
    keywords.universal_trv0(_v_);
    _v_.after_keywords(this, keywords);
    _v_.before_paramclassname(this, paramclassname);
    paramclassname.universal_trv0(_v_);
    _v_.after_paramclassname(this, paramclassname);
    if (parsedirective != null) {
      _v_.before_parsedirective(this, parsedirective);
    parsedirective.universal_trv0(_v_);
      _v_.after_parsedirective(this, parsedirective);
    }
    _v_.before_classparts(this, classparts);
    classparts.universal_trv0(_v_);
    _v_.after_classparts(this, classparts);
    if (classmethods != null) {
      _v_.before_classmethods(this, classmethods);
    classmethods.universal_trv0(_v_);
      _v_.after_classmethods(this, classmethods);
    }
    if (eoftoken != null) {
      _v_.before_eoftoken(this, eoftoken);
    eoftoken.universal_trv0(_v_);
      _v_.after_eoftoken(this, eoftoken);
    }
    super.universal_trv0(_v_);
    universal_trv0_aft(_v_);
  }
  void toAllSubclasses_Program_trv_bef(ClassNameTranspVisitor cntv, EdgeVisitor aev) {
    super.toAllSubclasses_Program_trv_bef(cntv, aev);
    cntv.before(this);
    aev.before(this);
  }
  void toAllSubclasses_Program_trv_aft(ClassNameTranspVisitor cntv, EdgeVisitor aev) {
    aev.after(this);
    super.toAllSubclasses_Program_trv_aft(cntv, aev);
  }
  void toAllSubclasses_Program_trv(ClassNameTranspVisitor cntv, EdgeVisitor aev) {
    toAllSubclasses_Program_trv_bef(cntv, aev);
    paramclassname.toAllSubclasses_Program_trv(cntv, aev);
    if (parsedirective != null) {
    parsedirective.toAllSubclasses_Program_trv(cntv, aev);
    }
    classparts.toAllSubclasses_Program_trv(cntv, aev);
    if (classmethods != null) {
    classmethods.toAllSubclasses_Program_trv(cntv, aev);
    }
    toAllSubclasses_Program_trv_aft(cntv, aev);
  }
  void checkParents_Program_trv_bef(DummyVisitor dv) {
    super.checkParents_Program_trv_bef(dv);
  }
  void checkParents_Program_trv_aft(DummyVisitor dv) {
    super.checkParents_Program_trv_aft(dv);
  }
  void checkParents_Program_trv(DummyVisitor dv) {
    checkParents_Program_trv_bef(dv);
    classparts.checkParents_Program_trv(dv);
    checkParents_Program_trv_aft(dv);
  }
  public void toClassKeyword(ClassModVisitor v) {
    toClassKeyword_ClassDef_trv(v);
  }
  void toClassKeyword_ClassDef_trv_bef(ClassModVisitor v) {
    super.toClassKeyword_ClassDef_trv_bef(v);
  }
  void toClassKeyword_ClassDef_trv_aft(ClassModVisitor v) {
    super.toClassKeyword_ClassDef_trv_aft(v);
  }
  void toClassKeyword_ClassDef_trv(ClassModVisitor v) {
    toClassKeyword_ClassDef_trv_bef(v);
    keywords.toClassKeyword_ClassDef_trv(v);
    toClassKeyword_ClassDef_trv_aft(v);
  }
  public void toClassName(ClassNameAccessor v) {
    toClassName_ClassDef_trv(v);
  }
  void toClassName_ClassDef_trv_bef(ClassNameAccessor v) {
    super.toClassName_ClassDef_trv_bef(v);
  }
  void toClassName_ClassDef_trv_aft(ClassNameAccessor v) {
    super.toClassName_ClassDef_trv_aft(v);
  }
  void toClassName_ClassDef_trv(ClassNameAccessor v) {
    toClassName_ClassDef_trv_bef(v);
    paramclassname.toClassName_ClassDef_trv(v);
    toClassName_ClassDef_trv_aft(v);
  }
}

