Commit 5f2ef1f1 authored by Carlos Galindo's avatar Carlos Galindo
Browse files

GraphNode#addActionsForCall now uses List instead of Set

Closes #53
parent 2597482f
Loading
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -12,9 +12,7 @@ import es.upv.mist.slicing.nodes.VariableAction;
import es.upv.mist.slicing.nodes.io.ActualIONode;
import es.upv.mist.slicing.nodes.io.FormalIONode;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Stream;

/** An interprocedural definition finder, which adds the associated actions to formal and actual nodes in the CFGs. */
@@ -37,7 +35,7 @@ public class InterproceduralDefinitionFinder extends InterproceduralActionFinder

    @Override
    protected void handleActualAction(CallGraph.Edge<?> edge, VariableAction.Definition def) {
        Set<VariableAction.Movable> movables = new HashSet<>();
        List<VariableAction.Movable> movables = new LinkedList<>();
        GraphNode<?> graphNode = edge.getGraphNode();
        ResolvedValueDeclaration resolved = def.getResolvedValueDeclaration();
        if (resolved.isParameter()) {
+3 −3
Original line number Diff line number Diff line
@@ -12,9 +12,9 @@ import es.upv.mist.slicing.nodes.VariableVisitor;
import es.upv.mist.slicing.nodes.io.ActualIONode;
import es.upv.mist.slicing.nodes.io.FormalIONode;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Stream;

@@ -34,7 +34,7 @@ public class InterproceduralUsageFinder extends InterproceduralActionFinder<Vari

    @Override
    protected void handleActualAction(CallGraph.Edge<?> edge, VariableAction.Usage use) {
        Set<VariableAction.Movable> movables = new HashSet<>();
        List<VariableAction.Movable> movables = new LinkedList<>();
        GraphNode<?> graphNode = edge.getGraphNode();
        ResolvedValueDeclaration resolved = use.getResolvedValueDeclaration();
        if (resolved.isParameter()) {
+2 −2
Original line number Diff line number Diff line
@@ -28,9 +28,9 @@ import es.upv.mist.slicing.slicing.*;
import es.upv.mist.slicing.utils.ASTUtils;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

import static es.upv.mist.slicing.graphs.cfg.CFGBuilder.VARIABLE_NAME_OUTPUT;

@@ -181,7 +181,7 @@ public class SDG extends Graph implements Sliceable, Buildable<NodeList<Compilat
                // A node defines -output-
                var def = new VariableAction.Definition(null, VARIABLE_NAME_OUTPUT, graphNode);
                var defMov = new VariableAction.Movable(def, CallNode.Return.create(edge.getCall()));
                graphNode.addActionsForCall(Set.of(defMov), edge.getCall(), false);
                graphNode.addActionsForCall(List.of(defMov), edge.getCall(), false);
                // The container of the call uses -output-
                var use = new VariableAction.Usage(null, VARIABLE_NAME_OUTPUT, graphNode);
                graphNode.addActionsAfterCall(edge.getCall(), use);
+5 −2
Original line number Diff line number Diff line
@@ -9,7 +9,10 @@ import es.upv.mist.slicing.graphs.pdg.PDG;
import es.upv.mist.slicing.graphs.sdg.SDG;
import es.upv.mist.slicing.utils.ASTUtils;

import java.util.*;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;

/**
 * Represents a node in the various graphs ({@link CFG CFG}, {@link PDG PDG} and {@link SDG SDG}),
@@ -117,7 +120,7 @@ public class GraphNode<N extends Node> implements Comparable<GraphNode<?>> {
    }

    /** Append or prepend the given set of actions to the actions of the given call. */
    public void addActionsForCall(Set<VariableAction.Movable> actions, Resolvable<? extends ResolvedMethodLikeDeclaration> call, boolean prepend) {
    public void addActionsForCall(List<VariableAction.Movable> actions, Resolvable<? extends ResolvedMethodLikeDeclaration> call, boolean prepend) {
        for (int i = 0; i < variableActions.size(); i++) {
            VariableAction var = variableActions.get(i);
            if (var instanceof VariableAction.CallMarker) {
+2 −2
Original line number Diff line number Diff line
@@ -20,8 +20,8 @@ import es.upv.mist.slicing.utils.Logger;

import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.Set;

import static es.upv.mist.slicing.graphs.cfg.CFGBuilder.VARIABLE_NAME_OUTPUT;

@@ -272,7 +272,7 @@ public class VariableVisitor extends GraphNodeContentVisitor<VariableVisitor.Act
            // A node defines -output-
            var defOutput = new VariableAction.Definition(null, VARIABLE_NAME_OUTPUT, graphNode);
            var defOutputMov = new VariableAction.Movable(defOutput, CallNode.Return.create(n));
            graphNode.addActionsForCall(Set.of(defOutputMov), n, false);
            graphNode.addActionsForCall(List.of(defOutputMov), n, false);
            // The container of the call defines this and then uses -output-
            graphNode.addActionsAfterCall(n,
                    new VariableAction.Definition(null, realName4this, graphNode),