// The traversals and method for prcessing each traversal. // accessor traversals TraversalDecl { public String getVarString() to TraversalVar { {{ String returnVal = null; }} before TraversalVar {{ //System.out.println("before traversalvar: " + host.get_i().toString()); returnVal = host.get_i().toString(); }} return String {{ returnVal }} } public String getStrategy() to TraversalStrategy { {{ String return_val = null; }} before TraversalStrategy {{ return_val = host.get_s(); }} return String {{ return_val }} } // wrapper for old way of doing things {{ public String processTraversal(ClassGraph cg) { return processTraversal(cg, ""); } }} // phase 2 with multiple class graphs // regular java code goes here {{ public String processTraversal(ClassGraph cg, String filenamePrefix) { String traversalName = getVarString(); String strategy = getStrategy(); return processTraversal(cg, traversalName, strategy, filenamePrefix); } public String processTraversal(ClassGraph cg, String traversalName, String strategy) { return processTraversal(cg, traversalName, strategy, ""); } // the method to process the traversal declaration public String processTraversal(ClassGraph cg, String traversalName, String strategy, String filenamePrefix) { if (TraversalAspectList.debug) System.out.println("Processing " + traversalName + ":" + strategy); try { AspectJTraversal ajt = new AspectJTraversal(cg, traversalName, strategy); //System.out.println(ajt.toString()); // output the traversal to a file String fileName = filenamePrefix +"\\"+ ajt.getAspectName() + ".java"; PrintWriter pw = new PrintWriter(new FileOutputStream(fileName)); pw.print(ajt.toString()); pw.close(); return ajt.toString(); } catch (edu.neu.ccs.demeter.aplib.NoSuchClassGraphNodeException ex) { System.out.println(ex); } catch (FileNotFoundException ex) { System.out.println(ex); } return null; } }} } // the top level traversal to process each of the traversal declarations TraversalAspectList { // Phase 1 where we just processed traversals with 1 class graph public StringBuffer processTraversals(ClassGraph cg) to TraversalDecl { // initialize the returning string buffer {{ StringBuffer return_val = new StringBuffer(); }} before TraversalDecl {{ //AspectJTraversal.debug = true; String traversalName = host.getVarString(); String traversalStrategy = host.getStrategy(); return_val = new StringBuffer(host.processTraversal(cg, traversalName, traversalStrategy)); }} return StringBuffer {{ return_val }} } }