Commit 21428b48 authored by jacosro's avatar jacosro
Browse files

Added return call node

parent 128fde28
Loading
Loading
Loading
Loading
+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;
    }
}
+12 −1
Original line number Diff line number Diff line
@@ -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()));
    }

+7 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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))
+2 −1
Original line number Diff line number Diff line
@@ -5,5 +5,6 @@ public enum NodeType {
    METHOD,
    METHOD_CALL,
    VARIABLE_IN,
    VARIABLE_OUT
    VARIABLE_OUT,
    METHOD_CALL_RETURN
}