package grafos; import java.io.File; import java.util.ArrayList; import java.util.List; import com.github.javaparser.JavaParser; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.Node; import com.github.javaparser.ast.comments.Comment; import com.github.javaparser.ast.visitor.VoidVisitor; public class Transformador { public static void main(String[] args) throws Exception { // Ruta del fichero con el programa que vamos a transformar String ruta = "./src/test/res/ejemplos/Test_1"; // Abrimos el fichero original (un ".java") File original = new File(ruta + ".java"); // Parseamos el fichero original. Se crea una unidad de compilaciĆ³n (un AST). CompilationUnit cu = JavaParser.parse(original); quitarComentarios(cu); // Recorremos el AST List arcos = new ArrayList(); VoidVisitor> visitador = new Visitador(); visitador.visit(cu,arcos); // Imprimimos el CFG del programa String dotInfo = imprimirGrafo(arcos); // Generamos un PDF con el CFG del programa System.out.print("\nGenerando PDF..."); GraphViz gv=new GraphViz(); gv.addln(gv.start_graph()); gv.add(dotInfo); gv.addln(gv.end_graph()); String type = "pdf"; // String type = "gif"; // gv.increaseDpi(); gv.decreaseDpi(); gv.decreaseDpi(); gv.decreaseDpi(); gv.decreaseDpi(); File destino_CFG = new File(ruta + "_CFG."+ type); gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), destino_CFG); System.out.println(" PDF generado!"); } // Imprime el grafo en la pantalla private static String imprimirGrafo(List arcos) { StringBuilder dotInfo= new StringBuilder(); for(String arco:arcos) { dotInfo.append(arco); System.out.println("ARCO: "+arco); } System.out.println("\nCFG:"); System.out.println(dotInfo); return dotInfo.toString(); } // Elimina todos los comentarios de un nodo y sus hijos private static void quitarComentarios(Node node){ node.removeComment(); for (Comment comment : node.getOrphanComments()) { node.removeOrphanComment(comment); } // Do something with the node for (Node child : node.getChildNodes()){ quitarComentarios(child); } } }