Loading pom.xml +6 −0 Original line number Diff line number Diff line Loading @@ -35,5 +35,11 @@ <scope>compile</scope> </dependency> <dependency> <groupId>guru.nidi</groupId> <artifactId>graphviz-java</artifactId> <version>0.8.3</version> </dependency> </dependencies> </project> No newline at end of file src/main/java/tfm/Main.java +4 −1 Original line number Diff line number Diff line Loading @@ -14,12 +14,15 @@ import tfm.visitors.PDGVisitor; import java.io.File; import java.io.FileNotFoundException; import static guru.nidi.graphviz.model.Factory.graph; import static guru.nidi.graphviz.model.Factory.node; public class Main { private static long t0; public static void main(String[] args) throws FileNotFoundException { File file = new File("/home/jacosro/IdeaProjects/TFM/src/main/java/tfm/programs/Example2.java"); File file = new File("/home/jacosro/IdeaProjects/TFM/src/main/java/tfm/programs/Example1.java"); CompilationUnit compilationUnit = JavaParser.parse(file); t0 = System.nanoTime(); Loading src/main/java/tfm/arcs/Arc.java +4 −3 Original line number Diff line number Diff line Loading @@ -29,8 +29,9 @@ public abstract class Arc<D extends ArcData> extends edg.graphlib.Arrow<String, Node from = (Node) getFrom(); Node to = (Node) getTo(); return String.format("\"%s: %s\" -> \"%s: %s\"", from.getId(), from.getData(), to.getId(), to.getData()); return String.format("%s -> %s", from.getId(), to.getId() ); } } src/main/java/tfm/arcs/pdg/DataDependencyArc.java +1 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ public class DataDependencyArc extends Arc<VariableArcData> { @Override public String toGraphvizRepresentation() { return String.format("%s [label=\"%s\"]", super.toString(), getData().toString()); return String.format("%s [style=dashed, color=red, label=\"%s\"]", super.toGraphvizRepresentation(), getData().toString()); } } src/main/java/tfm/graphs/CFGGraph.java +23 −3 Original line number Diff line number Diff line package tfm.graphs; import edg.graphlib.Arrow; import tfm.arcs.Arc; import tfm.arcs.cfg.ControlFlowArc; import tfm.nodes.CFGNode; import tfm.nodes.Node; import java.util.Comparator; import java.util.stream.Collectors; public abstract class CFGGraph extends Graph<CFGNode> { public CFGGraph() { super(); setRootVertex(new CFGNode(NodeId.getVertexId(), getRootNodeData())); setRootVertex(new CFGNode(NodeId.getVertexId(), getRootNodeData(), 0)); } @Override public CFGNode addNode(String instruction) { CFGNode vertex = new CFGNode(NodeId.getVertexId(), instruction); public CFGNode addNode(String instruction, int fileNumber) { CFGNode vertex = new CFGNode(NodeId.getVertexId(), instruction, fileNumber); this.addVertex(vertex); return vertex; Loading @@ -25,4 +30,19 @@ public abstract class CFGGraph extends Graph<CFGNode> { public void addControlFlowEdge(CFGNode from, CFGNode to) { super.addEdge((Arrow) new ControlFlowArc(from, to)); } @Override public String toGraphvizRepresentation() { String lineSep = System.lineSeparator(); String arrows = getArrows().stream() .sorted(Comparator.comparingInt(arrow -> ((Node) arrow.getFrom()).getId())) .map(arrow -> ((Arc) arrow).toGraphvizRepresentation()) .collect(Collectors.joining(lineSep)); return "digraph g{" + lineSep + arrows + lineSep + "}"; } } Loading
pom.xml +6 −0 Original line number Diff line number Diff line Loading @@ -35,5 +35,11 @@ <scope>compile</scope> </dependency> <dependency> <groupId>guru.nidi</groupId> <artifactId>graphviz-java</artifactId> <version>0.8.3</version> </dependency> </dependencies> </project> No newline at end of file
src/main/java/tfm/Main.java +4 −1 Original line number Diff line number Diff line Loading @@ -14,12 +14,15 @@ import tfm.visitors.PDGVisitor; import java.io.File; import java.io.FileNotFoundException; import static guru.nidi.graphviz.model.Factory.graph; import static guru.nidi.graphviz.model.Factory.node; public class Main { private static long t0; public static void main(String[] args) throws FileNotFoundException { File file = new File("/home/jacosro/IdeaProjects/TFM/src/main/java/tfm/programs/Example2.java"); File file = new File("/home/jacosro/IdeaProjects/TFM/src/main/java/tfm/programs/Example1.java"); CompilationUnit compilationUnit = JavaParser.parse(file); t0 = System.nanoTime(); Loading
src/main/java/tfm/arcs/Arc.java +4 −3 Original line number Diff line number Diff line Loading @@ -29,8 +29,9 @@ public abstract class Arc<D extends ArcData> extends edg.graphlib.Arrow<String, Node from = (Node) getFrom(); Node to = (Node) getTo(); return String.format("\"%s: %s\" -> \"%s: %s\"", from.getId(), from.getData(), to.getId(), to.getData()); return String.format("%s -> %s", from.getId(), to.getId() ); } }
src/main/java/tfm/arcs/pdg/DataDependencyArc.java +1 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ public class DataDependencyArc extends Arc<VariableArcData> { @Override public String toGraphvizRepresentation() { return String.format("%s [label=\"%s\"]", super.toString(), getData().toString()); return String.format("%s [style=dashed, color=red, label=\"%s\"]", super.toGraphvizRepresentation(), getData().toString()); } }
src/main/java/tfm/graphs/CFGGraph.java +23 −3 Original line number Diff line number Diff line package tfm.graphs; import edg.graphlib.Arrow; import tfm.arcs.Arc; import tfm.arcs.cfg.ControlFlowArc; import tfm.nodes.CFGNode; import tfm.nodes.Node; import java.util.Comparator; import java.util.stream.Collectors; public abstract class CFGGraph extends Graph<CFGNode> { public CFGGraph() { super(); setRootVertex(new CFGNode(NodeId.getVertexId(), getRootNodeData())); setRootVertex(new CFGNode(NodeId.getVertexId(), getRootNodeData(), 0)); } @Override public CFGNode addNode(String instruction) { CFGNode vertex = new CFGNode(NodeId.getVertexId(), instruction); public CFGNode addNode(String instruction, int fileNumber) { CFGNode vertex = new CFGNode(NodeId.getVertexId(), instruction, fileNumber); this.addVertex(vertex); return vertex; Loading @@ -25,4 +30,19 @@ public abstract class CFGGraph extends Graph<CFGNode> { public void addControlFlowEdge(CFGNode from, CFGNode to) { super.addEdge((Arrow) new ControlFlowArc(from, to)); } @Override public String toGraphvizRepresentation() { String lineSep = System.lineSeparator(); String arrows = getArrows().stream() .sorted(Comparator.comparingInt(arrow -> ((Node) arrow.getFrom()).getId())) .map(arrow -> ((Arc) arrow).toGraphvizRepresentation()) .collect(Collectors.joining(lineSep)); return "digraph g{" + lineSep + arrows + lineSep + "}"; } }