import edu.neu.ccs.demeter.dj.*; import java.util.*; import java.lang.reflect.*; import edu.neu.ccs.demeter.*; class Cd_graph { protected GlobalImports globalimports; public GlobalImports get_globalimports() { return globalimports; } public void set_globalimports(GlobalImports new_globalimports) { globalimports = new_globalimports; } protected Adjacency_Nlist adjacencies; public Adjacency_Nlist get_adjacencies() { return adjacencies; } public void set_adjacencies(Adjacency_Nlist new_adjacencies) { adjacencies = new_adjacencies; } public Cd_graph() { super(); } public Cd_graph(GlobalImports globalimports, Adjacency_Nlist adjacencies) { super(); set_globalimports(globalimports); set_adjacencies(adjacencies); } public static Cd_graph parse(java.io.Reader in) throws ParseException { return new Parser(in)._Cd_graph(); } public static Cd_graph parse(java.io.InputStream in) throws ParseException { return new Parser(in)._Cd_graph(); } public static Cd_graph parse(String s) { try { return parse(new java.io.StringReader(s)); } catch (ParseException e) { throw new RuntimeException(e.toString()); } } static Map adjs = new HashMap(); static Set definedClasses = new HashSet(); static List cErrors; public static final String bypassed = " bypassing {Strategy, TraversalGraph, ClassGraph, String, Map} "; public static final Strategy allAdjsStrategy = new Strategy("{Cd_graph -> Adjacency}"); public static final Strategy importStrategy = new Strategy("{GlobalImports -> Import}"); public static final Strategy superClassResolutionStrategy = new Strategy("{Cd_graph -> Alternat_ns}" + bypassed); public static final Strategy superClassChainResolutionStrategy = new Strategy("{Cd_graph -> Adjacency}"); public static final Strategy flatteningStrategy = new Strategy("from Cd_graph through Adjacency" + bypassed + "to Neighbors_wc"); public final TraversalGraph flatteningGraph = new TraversalGraph(flatteningStrategy, Main.cg); void initialize() { TraversalGraph tgA = new TraversalGraph(allAdjsStrategy, Main.cg); Iterator iter = tgA.asList(this).iterator(); Adjacency adj; for(;iter.hasNext();) { adj = (Adjacency)iter.next(); definedClasses.add(adj.getName().intern()); adjs.put(adj.getName(), adj); } TraversalGraph tgI = new TraversalGraph(importStrategy, Main.cg); iter = tgI.gather(get_globalimports()).iterator(); String s; for (;iter.hasNext();) { s = iter.next().toString(); if (s.endsWith(".*")) { ClassFinder.addPackage(s.substring(0, s.length()-2)); } else { ClassFinder.addClass(s.substring(s.lastIndexOf(".")+1)); } } } static Set undefinedParts = new HashSet(); boolean hasUndefinedParts() { TraversalGraph tgA = new TraversalGraph(allAdjsStrategy, Main.cg); Iterator iter = tgA.asList(this).iterator(); Adjacency adj; for (;iter.hasNext();) { adj = (Adjacency) iter.next(); adj.hasUndefinedParts(); } return undefinedParts.size()>0; } boolean resolveSuperClassStructure() { TraversalGraph tg = new TraversalGraph(superClassResolutionStrategy, Main.cg); SuperClassResolutionVisitor scrv = new SuperClassResolutionVisitor(); tg.traverse(this, scrv); return ((Boolean)scrv.getReturnValue()).booleanValue(); } boolean hasSuperCycle() { TraversalGraph tg = new TraversalGraph(superClassChainResolutionStrategy, Main.cg); SuperClassChainResolutionVisitor sccrv = new SuperClassChainResolutionVisitor(); tg.traverse(this, sccrv); cErrors = (List)sccrv.getReturnValue(); return cErrors.size()>0; } List getCycleErrors() { return cErrors; } void flatten() { flatteningGraph.traverse(this, new FlatteningVisitor()); } void display() { DisplayVisitor v0 = new DisplayVisitor(); v0.start(); __trav_display(v0); v0.finish(); } 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_); ((UniversalVisitor) _v_).before_globalimports(this, globalimports); globalimports.universal_trv0(_v_); ((UniversalVisitor) _v_).after_globalimports(this, globalimports); ((UniversalVisitor) _v_).before_adjacencies(this, adjacencies); adjacencies.universal_trv0(_v_); ((UniversalVisitor) _v_).after_adjacencies(this, adjacencies); universal_trv0_aft(_v_); } public void __trav_display(DisplayVisitor __v0) { __trav_display_Cd_graph_trv(__v0); } void __trav_display_Cd_graph_trv_bef(DisplayVisitor __v0) { ((DisplayVisitor) __v0).before(this); } void __trav_display_Cd_graph_trv_aft(DisplayVisitor __v0) { ((DisplayVisitor) __v0).after(this); } void __trav_display_Cd_graph_trv(DisplayVisitor __v0) { __trav_display_Cd_graph_trv_bef(__v0); ((DisplayVisitor) __v0).before_globalimports(this, globalimports); globalimports.__trav_display_Cd_graph_trv(__v0); ((UniversalVisitor) __v0).after_globalimports(this, globalimports); ((DisplayVisitor) __v0).before_adjacencies(this, adjacencies); adjacencies.__trav_display_Cd_graph_trv(__v0); ((UniversalVisitor) __v0).after_adjacencies(this, adjacencies); __trav_display_Cd_graph_trv_aft(__v0); } }