Loading src/main/java/tfm/arcs/sdg/ReturnArc.java 0 → 100644 +16 −0 Original line number Diff line number Diff line package tfm.arcs.sdg; import org.jgrapht.io.Attribute; import org.jgrapht.io.DefaultAttribute; import tfm.arcs.Arc; import java.util.Map; public class ReturnArc extends Arc { @Override public Map<String, Attribute> getDotAttributes() { Map<String, Attribute> map = super.getDotAttributes(); map.put("style", DefaultAttribute.createAttribute("dashed")); return map; } } src/main/java/tfm/graphs/sdg/MethodCallReplacerVisitor.java +12 −1 Original line number Diff line number Diff line Loading @@ -250,7 +250,18 @@ class MethodCallReplacerVisitor extends VoidVisitorAdapter<Context> { } } // todo make call // 'Return' node GraphNode<EmptyStmt> returnNode = sdg.addNode("return", new EmptyStmt(), TypeNodeFactory.fromType(NodeType.METHOD_CALL_RETURN)); sdg.addControlDependencyArc(methodCallNode, returnNode); sdg.addReturnArc(returnNode, originalMethodCallNode); methodCFG.vertexSet().stream() .filter(node -> node.getAstNode() instanceof ReturnStmt) .map(node -> (GraphNode<ReturnStmt>) node) .forEach(node -> sdg.addReturnArc(node, returnNode)); Logger.log("MethodCallReplacerVisitor", String.format("%s | Method '%s' called", methodCallExpr, methodDeclaration.getNameAsString())); } Loading src/main/java/tfm/graphs/sdg/SDG.java +7 −0 Original line number Diff line number Diff line Loading @@ -4,13 +4,16 @@ import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.Node; import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.body.MethodDeclaration; import com.github.javaparser.ast.stmt.EmptyStmt; import com.github.javaparser.ast.stmt.ExpressionStmt; import com.github.javaparser.ast.stmt.ReturnStmt; import tfm.arcs.Arc; import tfm.arcs.cfg.ControlFlowArc; import tfm.arcs.pdg.ControlDependencyArc; import tfm.arcs.pdg.DataDependencyArc; import tfm.arcs.sdg.CallArc; import tfm.arcs.sdg.ParameterInOutArc; import tfm.arcs.sdg.ReturnArc; import tfm.graphs.Buildable; import tfm.graphs.Graph; import tfm.graphs.cfg.CFG; Loading Loading @@ -83,6 +86,10 @@ public class SDG extends Graph implements Sliceable, Buildable<NodeList<Compilat this.addEdge(from, to, new ParameterInOutArc()); } public void addReturnArc(GraphNode<?> from, GraphNode<?> to) { this.addEdge(from, to, new ReturnArc()); } public List<GraphNode<?>> findDeclarationsOfVariable(String variable, GraphNode<?> root) { return this.methodCFGMap.values().stream() .filter(cfg -> cfg.containsVertex(root)) Loading src/main/java/tfm/nodes/type/NodeType.java +2 −1 Original line number Diff line number Diff line Loading @@ -5,5 +5,6 @@ public enum NodeType { METHOD, METHOD_CALL, VARIABLE_IN, VARIABLE_OUT VARIABLE_OUT, METHOD_CALL_RETURN } Loading
src/main/java/tfm/arcs/sdg/ReturnArc.java 0 → 100644 +16 −0 Original line number Diff line number Diff line package tfm.arcs.sdg; import org.jgrapht.io.Attribute; import org.jgrapht.io.DefaultAttribute; import tfm.arcs.Arc; import java.util.Map; public class ReturnArc extends Arc { @Override public Map<String, Attribute> getDotAttributes() { Map<String, Attribute> map = super.getDotAttributes(); map.put("style", DefaultAttribute.createAttribute("dashed")); return map; } }
src/main/java/tfm/graphs/sdg/MethodCallReplacerVisitor.java +12 −1 Original line number Diff line number Diff line Loading @@ -250,7 +250,18 @@ class MethodCallReplacerVisitor extends VoidVisitorAdapter<Context> { } } // todo make call // 'Return' node GraphNode<EmptyStmt> returnNode = sdg.addNode("return", new EmptyStmt(), TypeNodeFactory.fromType(NodeType.METHOD_CALL_RETURN)); sdg.addControlDependencyArc(methodCallNode, returnNode); sdg.addReturnArc(returnNode, originalMethodCallNode); methodCFG.vertexSet().stream() .filter(node -> node.getAstNode() instanceof ReturnStmt) .map(node -> (GraphNode<ReturnStmt>) node) .forEach(node -> sdg.addReturnArc(node, returnNode)); Logger.log("MethodCallReplacerVisitor", String.format("%s | Method '%s' called", methodCallExpr, methodDeclaration.getNameAsString())); } Loading
src/main/java/tfm/graphs/sdg/SDG.java +7 −0 Original line number Diff line number Diff line Loading @@ -4,13 +4,16 @@ import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.Node; import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.body.MethodDeclaration; import com.github.javaparser.ast.stmt.EmptyStmt; import com.github.javaparser.ast.stmt.ExpressionStmt; import com.github.javaparser.ast.stmt.ReturnStmt; import tfm.arcs.Arc; import tfm.arcs.cfg.ControlFlowArc; import tfm.arcs.pdg.ControlDependencyArc; import tfm.arcs.pdg.DataDependencyArc; import tfm.arcs.sdg.CallArc; import tfm.arcs.sdg.ParameterInOutArc; import tfm.arcs.sdg.ReturnArc; import tfm.graphs.Buildable; import tfm.graphs.Graph; import tfm.graphs.cfg.CFG; Loading Loading @@ -83,6 +86,10 @@ public class SDG extends Graph implements Sliceable, Buildable<NodeList<Compilat this.addEdge(from, to, new ParameterInOutArc()); } public void addReturnArc(GraphNode<?> from, GraphNode<?> to) { this.addEdge(from, to, new ReturnArc()); } public List<GraphNode<?>> findDeclarationsOfVariable(String variable, GraphNode<?> root) { return this.methodCFGMap.values().stream() .filter(cfg -> cfg.containsVertex(root)) Loading
src/main/java/tfm/nodes/type/NodeType.java +2 −1 Original line number Diff line number Diff line Loading @@ -5,5 +5,6 @@ public enum NodeType { METHOD, METHOD_CALL, VARIABLE_IN, VARIABLE_OUT VARIABLE_OUT, METHOD_CALL_RETURN }