ltd-graph-builder/src/main/java/grafos/Transformador.java

80 lines
2.2 KiB
Java

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<String> arcos = new ArrayList<String>();
VoidVisitor<List<String>> 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<String> arcos)
{
String dotInfo="";
for(String arco:arcos) {
dotInfo += arco;
System.out.println("ARCO: "+arco);
}
System.out.println("\nCFG:");
System.out.println(dotInfo);
return dotInfo;
}
// Elimina todos los comentarios de un nodo y sus hijos
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);
}
}
}