Commit acc87318 authored by Carlos Galindo's avatar Carlos Galindo
Browse files

Checks and changes to lower the amount of primitive variables that develop an object tree.

parent 802d215b
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -161,6 +161,33 @@ public class ExpressionObjectTreeFinder {
                }
                throw new IllegalStateException("Could not find USE(-output-) corresponding to call " + call);
            }

            @Override
            public void visit(ArrayCreationExpr n, String arg) {}

            @Override
            public void visit(ArrayInitializerExpr n, String arg) {}

            @Override
            public void visit(BinaryExpr n, String arg) {}

            @Override
            public void visit(ClassExpr n, String arg) {}

            @Override
            public void visit(InstanceOfExpr n, String arg) {}

            @Override
            public void visit(UnaryExpr n, String arg) {}

            @Override
            public void visit(LambdaExpr n, String arg) {}

            @Override
            public void visit(MethodReferenceExpr n, String arg) {}

            @Override
            public void visit(PatternExpr n, String arg) {}
        }, "");
        return list;
    }
+5 −4
Original line number Diff line number Diff line
@@ -172,7 +172,8 @@ public abstract class InterproceduralActionFinder<A extends VariableAction> exte
        Set<A> set = new HashSet<>();
        for (Iterator<A> it = filteredStream.iterator(); it.hasNext(); ) {
            A a = it.next();
            if (set.contains(a) && a.hasObjectTree()) {
            if (set.contains(a)) {
                if (a.hasObjectTree())
                    for (A aFromSet : set)
                        if (aFromSet.hashCode() == a.hashCode() && Objects.equals(aFromSet, a))
                            aFromSet.getObjectTree().addAll(a.getObjectTree());
+2 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ public class InterproceduralDefinitionFinder extends InterproceduralActionFinder
                if (scope.isPresent()) {
                    extractOutputVariablesAsMovables(scope.get(), movables, graphNode, actualOut, def);
                } else {
                    assert def.hasObjectTree();
                    var movableDef = new Definition(DeclarationType.FIELD, "this", graphNode, (ObjectTree) def.getObjectTree().clone());
                    movables.add(new Movable(movableDef, actualOut));
                }
@@ -75,6 +76,7 @@ public class InterproceduralDefinitionFinder extends InterproceduralActionFinder
        Set<Expression> defExpressions = new HashSet<>();
        e.accept(new OutNodeVariableVisitor(), defExpressions);
        for (Expression expression : defExpressions) {
            assert def.hasObjectTree();
            DeclarationType type = DeclarationType.valueOf(expression);
            Definition inner = new Definition(type, expression.toString(), graphNode, (ObjectTree) def.getObjectTree().clone());
            if (defExpressions.size() > 1)
+1 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ public class InterproceduralUsageFinder extends InterproceduralActionFinder<Usag
        GraphNode<?> graphNode = edge.getGraphNode();
        if (use.isParameter()) {
            if (!use.isPrimitive()) {
                assert use.hasObjectTree();
                ActualIONode actualIn = locateActualInNode(edge, use.getName());
                Definition def = new Definition(VariableAction.DeclarationType.SYNTHETIC, "-arg-in-", graphNode, (ObjectTree) use.getObjectTree().clone());
                Movable movDef = new Movable(def, actualIn);