// Check for undefined classes Cd_graph { {{ //Need to keep track of what classes are defined correctly HashSet definedClasses = new HashSet(); // Function which traverses the cg, records defined classes in hashset public void check_undefined(ClassGraph cg) { // Strategy bypasses Construct_ns Strategy sg = new Strategy("from Cd_graph bypassing Construct_ns to Vertex"); TraversalGraph tg = new TraversalGraph(sg,cg); tg.traverse(this, new Visitor() { HashSet hclasses; // First build hashset public void start() { hclasses = new HashSet(); } public void before(Vertex host) { Ident cname = host.get_vertex_name(); hclasses.add(cname); } // Need to return the hashset after traversal public Object getReturnValue() { return hclasses; } }); //end of traversal // See if classes are defined in the hashset Strategy sg2 = new Strategy("from Cd_graph through Construct_ns to Vertex"); TraversalGraph tg2 = new TraversalGraph(sg2,cg); tg2.traverse( this, new Visitor() { public void before(Vertex host){ Ident cname = host.get_vertex_name(); if(!definedClasses.contains(cname)) { System.err.println(" ERROR: Class " + cname + " is not defined. "); } } }); //end of traversal } //end of check_undefined }} }