import demeter.*; class CopyVisitor extends UniversalVisitor implements Cloneable { public CopyVisitor() { super(); } private java.util.Stack history = new java.util.Stack(); public CopyVisitor(Class firstClass) { try { history.push(firstClass.newInstance()); } catch(Exception e) { e.printStackTrace(); } } Object get_copy() { return history.peek(); } public void before_personname(Person source, Ident dest) { Person it = (Person) history.peek(); it.set_personname(dest); } public void before_spouse(Person source, Person dest) { Person it = (Person) history.peek(); Person p = new Person(); it.set_spouse(p); history.push(p); } public void after_spouse(Person source, Person dest) { history.pop(); } public void before_siblings(Person source, Person_NList dest) { Person it = (Person) history.peek(); Person_NList p = new Person_NList(); it.set_siblings(p); history.push(p); } public void after_siblings(Person source, Person_NList dest) { history.pop(); } public void before_indent(PrintVisitor source, int dest) { PrintVisitor it = (PrintVisitor) history.peek(); it.set_indent(dest); } public void before_needSpace(PrintVisitor source, boolean dest) { PrintVisitor it = (PrintVisitor) history.peek(); it.set_needSpace(dest); } public void before_is_equal(EqualVisitor source, boolean dest) { EqualVisitor it = (EqualVisitor) history.peek(); it.set_is_equal(dest); } public void before_indent(DisplayVisitor source, int dest) { DisplayVisitor it = (DisplayVisitor) history.peek(); it.set_indent(dest); } public void before_indent(TraceVisitor source, int dest) { TraceVisitor it = (TraceVisitor) history.peek(); it.set_indent(dest); } public void before_first(Person_NList source, Nonempty_Person_NList dest) { Person_NList it = (Person_NList) history.peek(); Nonempty_Person_NList p = new Nonempty_Person_NList(); it.set_first(p); history.push(p); } public void after_first(Person_NList source, Nonempty_Person_NList dest) { history.pop(); } public void before_it(Nonempty_Person_NList source, Person dest) { Nonempty_Person_NList it = (Nonempty_Person_NList) history.peek(); Person p = new Person(); it.set_it(p); history.push(p); } public void after_it(Nonempty_Person_NList source, Person dest) { history.pop(); } public void before_next(Nonempty_Person_NList source, Nonempty_Person_NList dest) { Nonempty_Person_NList it = (Nonempty_Person_NList) history.peek(); Nonempty_Person_NList p = new Nonempty_Person_NList(); it.set_next(p); history.push(p); } public void after_next(Nonempty_Person_NList source, Nonempty_Person_NList dest) { history.pop(); } void universal_trv0_bef(UniversalVisitor _v_) { super.universal_trv0_bef(_v_); } void universal_trv0_aft(UniversalVisitor _v_) { super.universal_trv0_aft(_v_); } void universal_trv0(UniversalVisitor _v_) { universal_trv0_bef(_v_); Object copy = get_copy(); super.universal_trv0(_v_); universal_trv0_aft(_v_); } }