import edu.neu.ccs.demeter.dj.*; import java.util.*; import edu.neu.ccs.demeter.*; class FlattingVisitor extends Visitor { public FlattingVisitor() { super(); } public static FlattingVisitor parse(java.io.Reader in) throws ParseException { return new Parser(in)._FlattingVisitor(); } public static FlattingVisitor parse(java.io.InputStream in) throws ParseException { return new Parser(in)._FlattingVisitor(); } public static FlattingVisitor parse(String s) { try { return parse(new java.io.StringReader(s)); } catch (ParseException e) { throw new RuntimeException(e.toString()); } } void before(ClassInfo host){ PartInfo_List partList = host.get_partclass(); //find the list of parts ClassInfo_List subList = host.get_subclass(); //find the list of subclasses if(subList != null){ //have subclasses ClassInfo subClass,parentClass; ClassInfo_List dest; java.util.Enumeration en = subList.elements(); while (en.hasMoreElements()){ subClass = (ClassInfo)en.nextElement(); Ident n = subClass.get_name().get_ident(); parentClass = subClass.get_parent(); //Single inheritance checking if(parentClass == null) subClass.set_parent(host); else { System.out.println("Error: Class " + n + " has two super classes: " + parentClass.get_name().get_ident() + " , " + host.get_name().get_ident()); Main.err_num ++; } //Flatting ClassGraph if(partList != null){ PartInfo_List list; list = subClass.get_partclass(); if(list == null){ subClass.set_partclass(partList); // System.out.println(host.get_name().get_ident() + " to " // +subClass.get_name().get_ident() + "copy list"); } else{ java.util.Enumeration enn = partList.elements(); PartInfo pi; while (enn.hasMoreElements()){ pi = (PartInfo)enn.nextElement(); // System.out.println(host.get_name().get_ident() + " to " // + subClass.get_name().get_ident() // + "copy: "+pi.get_partname().get_ident()); list.addElement(pi); } } } } host.set_partclass(null); } } void universal_trv0_bef(UniversalVisitor _v_) { ((UniversalVisitor) _v_).before(this); } void universal_trv0_aft(UniversalVisitor _v_) { ((UniversalVisitor) _v_).after(this); } void universal_trv0(UniversalVisitor _v_) { universal_trv0_bef(_v_); universal_trv0_aft(_v_); } }