Cd_graph { void print() to * (PrintVisitor); } Cd_graph { (@ public static final Strategy sCdGraphAlt = new Strategy("from Cd_graph through Neighbors to Alternat_ns"); public static final Strategy sCdGraphTerm = new Strategy("from Cd_graph through Alternat_ns to Normal"); private boolean proceedToInherCycle = false; private boolean cycle_pass = false; public void undefinedClasses(){ System.out.println("-------Running Undefined Class Check--------"); TraversalGraph tg1 = new TraversalGraph("from Cd_graph bypassing Neighbors to Vertex", Main.cg1); TraversalGraph tg2 = new TraversalGraph("from Cd_graph through Neighbors to Vertex", Main.cg1); VertexVisitor v1 = new VertexVisitor(); VertexVisitor v2 = new VertexVisitor(); tg1.traverse(this, v1); HashSet leftNodes = (HashSet) v1.getReturnValue(); tg2.traverse(this, v2); HashSet rightNodes = (HashSet) v2.getReturnValue(); Iterator i_right = rightNodes.iterator(); boolean pass = true; while (i_right.hasNext()) { Ident id = (Ident) i_right.next(); if (!leftNodes.contains(id)) { System.out.println("*** Error *** Class "+id.toString()+" is not defined in the cd"); pass = false; } } if (pass) System.out.println("Undefined Class Check pass."); } public void setAllParents() { System.out.println("------Assigning parents for each class------"); TraversalGraph tg = new TraversalGraph("from Cd_graph to Adjacency", Main.cg1); SetParentVisitor spv = new SetParentVisitor(); tg.traverse(this, spv); System.out.println("***Parents Assigned***"); } public void uniqueParts() { System.out.println("---------Running Unique Part Check----------"); String s = "from Cd_graph to Construct_ns"; TraversalGraph tg = new TraversalGraph(s, Main.cg1); HelpVisitor hv = new HelpVisitor(); tg.traverse(this, hv); if (hv.isPassed()) { System.out.println("Unique Part Check pass."); } } public void flatten() { System.out.println("------Flattening the Cd_graph Object-------"); System.out.println("***Before Flattening***"); Main.m.print(); System.out.println("\n\n***Start Flattening***"); TraversalGraph tg = new TraversalGraph("from Cd_graph to Adjacency", Main.cg1); FlattenVisitor fv = new FlattenVisitor(); tg.traverse(this, fv); tg.traverse(this, new RemoveCommonVisitor()); System.out.println("\n***Flattening Done***"); System.out.println("\n***After Flattening***"); Main.m.print();System.out.println(); } public void singleInher() { System.out.println("----------Single Inheritance Check----------"); TraversalGraph tg = new TraversalGraph("from Cd_graph to Adjacency", Main.cg1); InherVisitor iv = new InherVisitor(); tg.traverse(this, iv); if (iv.isPass()) { System.out.println("Single Inheritance Check pass."); proceedToInherCycle = true; } } public void inherCycle() { System.out.println("----------Inheritance Cycle Check-----------"); TraversalGraph tg = new TraversalGraph("from Cd_graph to Adjacency", Main.cg1); CheckCycleVisitor ccv = new CheckCycleVisitor(); tg.traverse(this, ccv); if (ccv.isPass()) { System.out.println("Inheritance Cycle Check pass"); set_cycle_pass(true); } } boolean doInherCycle() { return proceedToInherCycle; } void set_cycle_pass(boolean b) { cycle_pass = b; } boolean get_cycle_pass() { return cycle_pass; } public void bufferRule() { System.out.println("---------Terminal Buffer Rule Check----------"); TraversalGraph tg = new TraversalGraph("from Cd_graph to Adjacency", Main.cg1); AdjVisitor av = new AdjVisitor(); tg.traverse(this, av); if (av.isPass()) System.out.println("Terminal Buffer Rule Check pass"); } @) }//end Cd_graph Main { (@ public static ClassGraph cg1; public static ClassGraph cgT; public static ClassGraph cgP; public static Cd_graph m; public static void main(String args[]) throws Exception { m = Cd_graph.parse(System.in); cgT = new ClassGraph(true,false); cg1 = new MyClassGraph(Main.cgT, "from Cd_graph bypassing {->*,myparent,* , ->*,parents,* , ->*,tail,*} to *"); cgP = new MyClassGraph(Main.cgT, "from Cd_graph bypassing {->*,tail,*} to *"); //m.display(); // Assignning parents to all classes m.setAllParents(); // Single Inheritance Check m.singleInher(); // Inheritance Cycle Check if (m.doInherCycle()) { m.inherCycle(); if (m.get_cycle_pass()) { // Flattening the Cd_graph object m.flatten(); // Then do unique parts check m.uniqueParts(); } else System.out.println("Fix the Inheritance Cyle before proceeding to Flattening and Unique Parts Check"); } else System.out.println("Fix the multiple inheritance before proceeding to Inheritance Cycle Check"); //undefined classes check m.undefinedClasses(); // Terminal Buffer Rule m.bufferRule(); System.out.println(); //System.out.println(cg1); } @) }