Commit 1e40c14d authored by Javier Costa's avatar Javier Costa
Browse files

VariableExtractor

parent 73c41549
Loading
Loading
Loading
Loading
+26 −11
Original line number Diff line number Diff line
@@ -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;
@@ -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() {
@@ -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;
    }
}
+6 −8
Original line number Diff line number Diff line
@@ -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() {
+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;

@@ -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
    }
}
+10 −0
Original line number Diff line number Diff line
@@ -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);
    }
}
+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) {
@@ -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