Loading src/main/java/tfm/Main.java +26 −11 Original line number Diff line number Diff line Loading @@ -3,8 +3,11 @@ package tfm; import com.github.javaparser.JavaParser; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.visitor.VoidVisitor; import tfm.graphs.CFGGraph; import tfm.graphs.Graph; import tfm.graphs.PDGGraph; import tfm.nodes.PDGVertex; import tfm.visitors.CFGVisitor; import tfm.visitors.PDGVisitor; import java.io.File; Loading @@ -13,15 +16,29 @@ import java.io.FileNotFoundException; public class Main { public static void main(String[] args) throws FileNotFoundException { File file = new File("/home/jacosro/IdeaProjects/TFM/src/main/java/tfm/programs/Example1.java"); File file = new File("/home/jacosro/IdeaProjects/TFM/src/main/java/tfm/programs/Example2.java"); CompilationUnit compilationUnit = JavaParser.parse(file); // CFGGraph cfgGraph = new CFGGraph() { // @Override // protected String getRootNodeData() { // return "Start"; // } // }; Graph<?> graph = cfg(file, compilationUnit); System.out.println(graph); System.out.println(graph.toGraphvizRepresentation()); } public static CFGGraph cfg(File file, CompilationUnit cu) { CFGGraph cfgGraph = new CFGGraph() { @Override protected String getRootNodeData() { return "Start"; } }; cu.accept(new CFGVisitor(cfgGraph), null); return cfgGraph; } public static PDGGraph pdg(File file, CompilationUnit cu) { PDGGraph pdgGraph = new PDGGraph() { @Override protected String getRootNodeData() { Loading @@ -31,10 +48,8 @@ public class Main { VoidVisitor<PDGVertex> voidVisitor = new PDGVisitor(pdgGraph); compilationUnit.accept(voidVisitor, pdgGraph.getRootVertex()); // compilationUnit.accept(new PDGVisitor(pdgGraph), pdgGraph.getRootVertex()); cu.accept(voidVisitor, pdgGraph.getRootVertex()); System.out.println(pdgGraph); System.out.println(pdgGraph.toGraphvizRepresentation()); return pdgGraph; } } src/main/java/tfm/graphs/PDGGraph.java +6 −8 Original line number Diff line number Diff line Loading @@ -51,21 +51,19 @@ public abstract class PDGGraph extends Graph<PDGVertex> { this.addArc(dataDataDependencyArc); } public <T> Variable<T> addNewVariable(String name, T value, Vertex declarationNode) { Variable<T> variable = new Variable<>(new VariableDeclaration<>(declarationNode, value), name); public Variable addNewVariable(String name, Vertex declarationNode) { Variable variable = new Variable(new VariableDeclaration(declarationNode), name); variableSet.addVariable(variable); return variable; } public <T> void addVariableWrite(Vertex currentNode, T newValue, String variable) { variableSet.findVariableByName(variable) .ifPresent(objectVariable -> objectVariable.addWrite(new VariableWrite<>(currentNode, newValue))); public void addVariableWrite(String variable, Vertex currentNode) { variableSet.addWrite(variable, new VariableWrite(currentNode)); } public <T> void addVariableRead(Vertex currentNode, T currentValue, String variable) { variableSet.findVariableByName(variable) .ifPresent(objectVariable -> objectVariable.addRead(new VariableRead<>(currentNode, currentValue))); public void addVariableRead(String variable, Vertex currentNode) { variableSet.addRead(variable, new VariableRead(currentNode)); } public VariableSet getVariableSet() { Loading src/main/java/tfm/nodes/Vertex.java +19 −0 Original line number Diff line number Diff line package tfm.nodes; import com.sun.corba.se.spi.ior.ObjectKey; import tfm.arcs.data.ArcData; import tfm.graphs.Graph; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; Loading Loading @@ -39,4 +41,21 @@ public class Vertex extends edg.graphlib.Vertex<String, ArcData> { public void setFileLineNumber(Integer fileLineNumber) { this.fileLineNumber = fileLineNumber; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Vertex)) return false; Vertex other = (Vertex) o; return Objects.equals(getData(), other.getData()) && Objects.equals(getIncomingArrows(), other.getIncomingArrows()) && Objects.equals(getOutgoingArrows(), other.getOutgoingArrows()) && Objects.equals(fileLineNumber, other.fileLineNumber); // && Objects.equals(getName(), other.getName()) ID IS ALWAYS UNIQUE, SO IT WILL NEVER BE THE SAME } } src/main/java/tfm/programs/Example1.java +10 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,16 @@ public class Example1 { y *= x; } int e = (Integer) x; switch (x) { case 1: e = 2; break; case 2: e = 3; } System.out.println(y); } } src/main/java/tfm/programs/Example2.java +6 −2 Original line number Diff line number Diff line package tfm.programs; import java.util.Arrays; public class Example2 { public static void main(String[] args) { Loading @@ -11,8 +13,10 @@ public class Example2 { int z = 10; for(int i = 0, o = 0; i < z; i++, o++) { z--; Iterable<Integer> integers = Arrays.asList(1, 2, 3); for(int i : integers) { System.out.println(i); } } } Loading
src/main/java/tfm/Main.java +26 −11 Original line number Diff line number Diff line Loading @@ -3,8 +3,11 @@ package tfm; import com.github.javaparser.JavaParser; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.visitor.VoidVisitor; import tfm.graphs.CFGGraph; import tfm.graphs.Graph; import tfm.graphs.PDGGraph; import tfm.nodes.PDGVertex; import tfm.visitors.CFGVisitor; import tfm.visitors.PDGVisitor; import java.io.File; Loading @@ -13,15 +16,29 @@ import java.io.FileNotFoundException; public class Main { public static void main(String[] args) throws FileNotFoundException { File file = new File("/home/jacosro/IdeaProjects/TFM/src/main/java/tfm/programs/Example1.java"); File file = new File("/home/jacosro/IdeaProjects/TFM/src/main/java/tfm/programs/Example2.java"); CompilationUnit compilationUnit = JavaParser.parse(file); // CFGGraph cfgGraph = new CFGGraph() { // @Override // protected String getRootNodeData() { // return "Start"; // } // }; Graph<?> graph = cfg(file, compilationUnit); System.out.println(graph); System.out.println(graph.toGraphvizRepresentation()); } public static CFGGraph cfg(File file, CompilationUnit cu) { CFGGraph cfgGraph = new CFGGraph() { @Override protected String getRootNodeData() { return "Start"; } }; cu.accept(new CFGVisitor(cfgGraph), null); return cfgGraph; } public static PDGGraph pdg(File file, CompilationUnit cu) { PDGGraph pdgGraph = new PDGGraph() { @Override protected String getRootNodeData() { Loading @@ -31,10 +48,8 @@ public class Main { VoidVisitor<PDGVertex> voidVisitor = new PDGVisitor(pdgGraph); compilationUnit.accept(voidVisitor, pdgGraph.getRootVertex()); // compilationUnit.accept(new PDGVisitor(pdgGraph), pdgGraph.getRootVertex()); cu.accept(voidVisitor, pdgGraph.getRootVertex()); System.out.println(pdgGraph); System.out.println(pdgGraph.toGraphvizRepresentation()); return pdgGraph; } }
src/main/java/tfm/graphs/PDGGraph.java +6 −8 Original line number Diff line number Diff line Loading @@ -51,21 +51,19 @@ public abstract class PDGGraph extends Graph<PDGVertex> { this.addArc(dataDataDependencyArc); } public <T> Variable<T> addNewVariable(String name, T value, Vertex declarationNode) { Variable<T> variable = new Variable<>(new VariableDeclaration<>(declarationNode, value), name); public Variable addNewVariable(String name, Vertex declarationNode) { Variable variable = new Variable(new VariableDeclaration(declarationNode), name); variableSet.addVariable(variable); return variable; } public <T> void addVariableWrite(Vertex currentNode, T newValue, String variable) { variableSet.findVariableByName(variable) .ifPresent(objectVariable -> objectVariable.addWrite(new VariableWrite<>(currentNode, newValue))); public void addVariableWrite(String variable, Vertex currentNode) { variableSet.addWrite(variable, new VariableWrite(currentNode)); } public <T> void addVariableRead(Vertex currentNode, T currentValue, String variable) { variableSet.findVariableByName(variable) .ifPresent(objectVariable -> objectVariable.addRead(new VariableRead<>(currentNode, currentValue))); public void addVariableRead(String variable, Vertex currentNode) { variableSet.addRead(variable, new VariableRead(currentNode)); } public VariableSet getVariableSet() { Loading
src/main/java/tfm/nodes/Vertex.java +19 −0 Original line number Diff line number Diff line package tfm.nodes; import com.sun.corba.se.spi.ior.ObjectKey; import tfm.arcs.data.ArcData; import tfm.graphs.Graph; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; Loading Loading @@ -39,4 +41,21 @@ public class Vertex extends edg.graphlib.Vertex<String, ArcData> { public void setFileLineNumber(Integer fileLineNumber) { this.fileLineNumber = fileLineNumber; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Vertex)) return false; Vertex other = (Vertex) o; return Objects.equals(getData(), other.getData()) && Objects.equals(getIncomingArrows(), other.getIncomingArrows()) && Objects.equals(getOutgoingArrows(), other.getOutgoingArrows()) && Objects.equals(fileLineNumber, other.fileLineNumber); // && Objects.equals(getName(), other.getName()) ID IS ALWAYS UNIQUE, SO IT WILL NEVER BE THE SAME } }
src/main/java/tfm/programs/Example1.java +10 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,16 @@ public class Example1 { y *= x; } int e = (Integer) x; switch (x) { case 1: e = 2; break; case 2: e = 3; } System.out.println(y); } }
src/main/java/tfm/programs/Example2.java +6 −2 Original line number Diff line number Diff line package tfm.programs; import java.util.Arrays; public class Example2 { public static void main(String[] args) { Loading @@ -11,8 +13,10 @@ public class Example2 { int z = 10; for(int i = 0, o = 0; i < z; i++, o++) { z--; Iterable<Integer> integers = Arrays.asList(1, 2, 3); for(int i : integers) { System.out.println(i); } } }