Commit 244a23ff authored by Sergio Pérez's avatar Sergio Pérez
Browse files

Change nodeList into List & CFG Arcs generation fix

parent 37ec554b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -233,7 +233,7 @@ public class Slicer {
        }

        SDG sdg;
        switch (cliOpts.getOptionValue("type", "ESSDG")) {
        switch (cliOpts.getOptionValue("type", "JSysDG")) {
            case "SDG":   sdg = new SDG();   break;
            case "ASDG":  sdg = new ASDG();  break;
            case "PSDG":  sdg = new PSDG();  break;
+0 −1
Original line number Diff line number Diff line
@@ -270,7 +270,6 @@ public class ClassGraph extends DirectedPseudograph<ClassGraph.Vertex, ClassGrap
                addEdge(source, v, new ClassArc.Implements());
        });
    }

    /** Creates a graph-appropriate DOT exporter. */
    public DOTExporter<CallableDeclaration<?>, CallGraph.Edge<?>> getDOTExporter() {
        DOTExporter<CallableDeclaration<?>, CallGraph.Edge<?>> dot = new DOTExporter<>();
+1 −1
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ public class ESSDG extends PSDG {
    /** Populates an ESSDG, using ESPDG and ESCFG as default graphs.
     * @see PSDG.Builder
     * @see ExceptionSensitiveCallConnector */
    class Builder extends PSDG.Builder {
    protected class Builder extends PSDG.Builder {
        @Override
        protected CFG createCFG() {
            return new ESCFG();
+4 −10
Original line number Diff line number Diff line
@@ -26,7 +26,8 @@ public class JSysCFGBuilder extends ACFGBuilder {

        // 1. Create new super call if not present
        if (methodInsertedInstructions.contains(n)){
            ImplicitNode node = new ImplicitNode(n.toString(), n); // TODO: implementar
            ImplicitNode node = new ImplicitNode(n.toString(), n);
            graph.addVertex(node);
            connectTo(node);
        }
        else {
@@ -34,9 +35,8 @@ public class JSysCFGBuilder extends ACFGBuilder {
        }
        // 2. Insert dynamic class code
        ClassOrInterfaceDeclaration containerClass = ((JSysCFG) graph).getDeclarationClass();
        NodeList<BodyDeclaration<?>> dynInitList = ((JSysCFG) graph).getClassGraph().getDynInit(containerClass.getNameAsString());
        dynInitList.accept(this, arg);

        List<BodyDeclaration<?>> dynInitList = ((JSysCFG) graph).getClassGraph().getDynInit(containerClass.getNameAsString());
        dynInitList.forEach(node -> node.accept(this, arg));
    }

    @Override
@@ -44,12 +44,6 @@ public class JSysCFGBuilder extends ACFGBuilder {
        connectTo(n);
    }

    @Override
    public void visit(InitializerDeclaration n, Void arg){
        // TODO
    }


    @Override
    protected void visitCallableDeclaration(CallableDeclaration<?> callableDeclaration, Void arg) {
        graph.buildRootNode(callableDeclaration);
+58 −0
Original line number Diff line number Diff line
package es.upv.mist.slicing.graphs.jsysdg;

import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.NodeList;
import es.upv.mist.slicing.arcs.sdg.ReturnArc;
import es.upv.mist.slicing.graphs.CallGraph;
import es.upv.mist.slicing.graphs.ClassGraph;
import es.upv.mist.slicing.graphs.augmented.PSDG;
import es.upv.mist.slicing.graphs.cfg.CFG;
import es.upv.mist.slicing.graphs.exceptionsensitive.ESSDG;
import es.upv.mist.slicing.graphs.exceptionsensitive.ExceptionSensitiveCallConnector;
import es.upv.mist.slicing.graphs.pdg.PDG;
import es.upv.mist.slicing.nodes.exceptionsensitive.ExitNode;
import es.upv.mist.slicing.nodes.exceptionsensitive.ReturnNode;
import es.upv.mist.slicing.slicing.ExceptionSensitiveSlicingAlgorithm;
import es.upv.mist.slicing.slicing.SlicingAlgorithm;

public class JSysDG extends ESSDG {

    @Override
    protected JSysDG.Builder createBuilder() {
        return new JSysDG.Builder();
    }

    @Override
    protected SlicingAlgorithm createSlicingAlgorithm() {
        return new ExceptionSensitiveSlicingAlgorithm(this);
    }

    public void addReturnArc(ExitNode source, ReturnNode target) {
        addEdge(source, target, new ReturnArc());
    }

    /** Populates an ESSDG, using ESPDG and ESCFG as default graphs.
     * @see PSDG.Builder
     * @see ExceptionSensitiveCallConnector */
    class Builder extends ESSDG.Builder {

        private ClassGraph classGraph;

        @Override
        public void build(NodeList<CompilationUnit> nodeList) {
            // See creation strategy at http://kaz2.dsic.upv.es:3000/Fzg46cQvT1GzHQG9hFnP1g#Using-data-flow-in-the-SDG
            classGraph = createClassGraph(nodeList);
            buildCFGs(nodeList);                             // 1
            CallGraph callGraph = createCallGraph(nodeList); // 2
            dataFlowAnalysis(callGraph);                     // 3
            buildAndCopyPDGs();                              // 4
            connectCalls(callGraph);                         // 5
            createSummaryArcs(callGraph);                    // 6
        }

        @Override
        protected CFG createCFG() {
            return new JSysCFG(classGraph);
        }

        @Override
        protected PDG createPDG(CFG cfg) {
            assert cfg instanceof JSysCFG;
            return new JSysPDG((JSysCFG) cfg);
        }
    }
}
Loading