FlatteningVisitor { {{ void before(Adjacency host) { // System.out.println("Flattening "+ host.getName()); } void after(Adjacency host) { // System.out.println("Flattening of " + host.getName() + " is complete!"); } void before(Construct_ns host) { host.getParts(); host.flatten(); } void before(Alternat_ns host) { host.getParts(); host.flatten(); } }} } PartGatherVisitor { {{ Set partStorage; PartGatherVisitor(Set store) { partStorage = store; } void before(Regular host) { String name = host.get_vertex().get_vertex().get_vertex_name().toString().toLowerCase().intern(); if (partStorage.contains(name)) //throw new RuntimeException("Part " + name + " already exists!"); System.out.println("Part " + name + " already exists!"); partStorage.add(name); } void before(Labeled host) { String name = host.get_label_name().toString().intern(); if (partStorage.contains(name)) //throw new RuntimeException("Part " + name + " already exists!"); System.out.println("Part " + name + " already exists!"); partStorage.add(name); } }} } SubclassGatherVisitor { {{ Set subclassStorage; SubclassGatherVisitor(Set store) { subclassStorage = store; } void before(Vertex host) { String name = host.get_vertex_name().toString().intern(); if (subclassStorage.contains(name)) throw new RuntimeException(); subclassStorage.add(name); } }} } SuperClassResolutionVisitor { {{ String currentAdjName; boolean pass; void before(Adjacency host) { currentAdjName = host.getName(); } void before(Alternat_ns host) { host.resolveSubclasses(currentAdjName); } void after(Adjacency host) { if (pass && host.isMultiInherit()) pass = false; } public Object getReturnValue() { return new Boolean(pass); } public void start() { pass = true; } }} } SuperClassChainResolutionVisitor { {{ Set ignoredClasses = new HashSet(); List cycles = new ArrayList(Cd_graph.adjs.size()); void before (Adjacency host) { if (ignoredClasses.contains(host.getName())) return; List l = host.checkCycle(); if (l != null) { cycles.add(l); Iterator iter = l.iterator(); for (;iter.hasNext();ignoredClasses.add(iter.next())); } } public Object getReturnValue() { return cycles; } }} } ImportVisitor { {{ String packageName; void before(Ident host) { if (packageName == null) { packageName = host.toString(); } else { packageName = packageName + "." + host.toString(); } } void before(ImportAllClasses host) { packageName = packageName + ".*"; } public Object getReturnValue() { return packageName; } }} }