Commit fb44257f authored by Javier Costa's avatar Javier Costa
Browse files

refactor

parent 45da4607
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
package tfm.graphs;

import com.github.javaparser.ast.stmt.EmptyStmt;
import com.github.javaparser.ast.stmt.Statement;
import edg.graphlib.Arrow;
import tfm.arcs.Arc;
import tfm.arcs.cfg.ControlFlowArc;
@@ -13,12 +15,12 @@ public abstract class CFGGraph extends Graph<CFGNode> {

    public CFGGraph() {
        super();
        setRootVertex(new CFGNode(NodeId.getVertexId(), getRootNodeData(), 0));
        setRootVertex(new CFGNode(NodeId.getVertexId(), getRootNodeData(), new EmptyStmt()));
    }

    @Override
    public CFGNode addNode(String instruction, int fileNumber) {
        CFGNode vertex = new CFGNode(NodeId.getVertexId(), instruction, fileNumber);
    public CFGNode addNode(String instruction, Statement statement) {
        CFGNode vertex = new CFGNode(NodeId.getVertexId(), instruction, statement);
        this.addVertex(vertex);

        return vertex;
+2 −1
Original line number Diff line number Diff line
package tfm.graphs;

import com.github.javaparser.ast.stmt.Statement;
import tfm.arcs.Arc;
import tfm.arcs.data.ArcData;
import tfm.nodes.Node;
@@ -44,7 +45,7 @@ public abstract class Graph<NodeType extends Node> extends edg.graphlib.Graph<St
        return (NodeType) super.getRootVertex();
    }

    public abstract NodeType addNode(String instruction, int fileNumber);
    public abstract NodeType addNode(String instruction, Statement statement);

    public String toString() {
        return getVerticies().stream()
+6 −27
Original line number Diff line number Diff line
package tfm.graphs;

import com.github.javaparser.ast.stmt.EmptyStmt;
import com.github.javaparser.ast.stmt.Statement;
import edg.graphlib.Vertex;
import edg.graphlib.Visitor;
import tfm.arcs.Arc;
@@ -13,24 +15,21 @@ import tfm.variables.actions.VariableDeclaration;
import tfm.variables.actions.VariableUse;
import tfm.variables.actions.VariableDefinition;

import javax.swing.plaf.nimbus.State;
import java.util.*;
import java.util.stream.Collectors;

public abstract class PDGGraph extends Graph<PDGNode> {

    private VariableSet variableSet;

    public PDGGraph() {
        setRootVertex(new PDGNode(NodeId.getVertexId(), getRootNodeData(), 0));

        variableSet = new VariableSet();
        setRootVertex(new PDGNode(NodeId.getVertexId(), getRootNodeData(), new EmptyStmt()));
    }

    protected abstract String getRootNodeData();

    @Override
    public PDGNode addNode(String instruction, int fileNumber) {
        PDGNode vertex = new PDGNode(NodeId.getVertexId(), instruction, fileNumber);
    public PDGNode addNode(String instruction, Statement statement) {
        PDGNode vertex = new PDGNode(NodeId.getVertexId(), instruction, statement);
        super.addVertex(vertex);

        return vertex;
@@ -53,26 +52,6 @@ public abstract class PDGGraph extends Graph<PDGNode> {
        this.addArc(dataDataDependencyArc);
    }

    public boolean containsVariable(String name) {
        return variableSet.containsVariable(name);
    }

    public Variable addNewVariable(String name, Node declarationNode) {
        return variableSet.addVariable(name, new VariableDeclaration(declarationNode));
    }

    public void addVariableDefinition(String variable, Node currentNode) {
        variableSet.addDefinition(variable, new VariableDefinition(currentNode));
    }

    public void addVariableUse(String variable, Node currentNode) {
        variableSet.addUse(variable, new VariableUse(currentNode));
    }

    public VariableSet getVariableSet() {
        return variableSet;
    }

    @Override
    public String toGraphvizRepresentation() {
        String lineSep = System.lineSeparator();
+4 −2
Original line number Diff line number Diff line
package tfm.nodes;

import com.github.javaparser.ast.stmt.Statement;
import tfm.graphs.Graph;


public class CFGNode extends Node {

    public CFGNode(Graph.NodeId id, String data, int fileNumber) {
        super(id, data, fileNumber);
    public CFGNode(Graph.NodeId id, String data, Statement statement) {
        super(id, data, statement);
    }
}
+10 −9
Original line number Diff line number Diff line
package tfm.nodes;

import com.github.javaparser.ast.stmt.Statement;
import edg.graphlib.Vertex;
import tfm.arcs.data.ArcData;
import tfm.graphs.Graph;
@@ -10,16 +11,16 @@ import java.util.stream.Collectors;

public class Node extends Vertex<String, ArcData> {

    private int fileLineNumber;
    private Statement statement;

//    public Node(Graph.NodeId id, String instruction) {
//        this(id, instruction, null);
//    }

    public Node(Graph.NodeId id, String instruction, Integer fileLineNumber) {
        super(id.toString(), instruction);
    public Node(Graph.NodeId id, String representation, Statement statement) {
        super(id.toString(), representation);

        this.fileLineNumber = fileLineNumber;
        this.statement = statement;
    }

    public int getId() {
@@ -34,12 +35,12 @@ public class Node extends Vertex<String, ArcData> {
                getOutgoingArrows().stream().map(arc -> arc.getTo().getName()).collect(Collectors.toList()));
    }

    public int getFileLineNumber() {
        return fileLineNumber;
    public Statement getStatement() {
        return statement;
    }

    public void setFileLineNumber(Integer fileLineNumber) {
        this.fileLineNumber = fileLineNumber;
    public Optional<Integer> getFileLineNumber() {
        return statement.getBegin().isPresent() ? Optional.of(statement.getBegin().get().line) : Optional.empty();
    }

    @Override
@@ -55,7 +56,7 @@ public class Node extends Vertex<String, ArcData> {
        return Objects.equals(getData(), other.getData())
                && Objects.equals(getIncomingArrows(), other.getIncomingArrows())
                && Objects.equals(getOutgoingArrows(), other.getOutgoingArrows())
                && Objects.equals(fileLineNumber, other.fileLineNumber);
                && Objects.equals(statement, other.statement);
                // && Objects.equals(getName(), other.getName()) ID IS ALWAYS UNIQUE, SO IT WILL NEVER BE THE SAME
    }

Loading