Loading sdg-core/src/main/java/es/upv/mist/slicing/graphs/ExpressionObjectTreeFinder.java +1 −1 Original line number Diff line number Diff line Loading @@ -163,7 +163,7 @@ public class ExpressionObjectTreeFinder { String sourceMember = sourcePair.b; if (targetAction.hasObjectTree() && (!sourceAction.hasObjectTree() || !sourceAction.getObjectTree().isLeaf(sourceMember))) ObjectTree.copyTree(sourceAction.getObjectTree(), targetAction.getObjectTree(), sourceMember, targetMember); ObjectTree.copyTargetTreeToSource(sourceAction.getObjectTree(), targetAction.getObjectTree(), sourceMember, targetMember); sourceAction.setPDGTreeConnectionTo(targetAction, sourceMember, targetMember); } } sdg-core/src/main/java/es/upv/mist/slicing/graphs/jsysdg/JSysCFG.java +3 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,9 @@ public class JSysCFG extends ESCFG { } public List<VariableAction> findLastTotalDefinitionOf(VariableAction action, String member) { return findLastVarActionsFrom(action, def -> def.isDefinition() && def.asDefinition().isTotallyDefinedMember(member)); return findLastVarActionsFrom(action, def -> (def.isDeclaration() && def.hasTreeMember(member)) || (def.isDefinition() && def.asDefinition().isTotallyDefinedMember(member))); } /** Given a definition of a given member, locate all definitions of the same object until a definition Loading sdg-core/src/main/java/es/upv/mist/slicing/nodes/ObjectTree.java +1 −1 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ public class ObjectTree implements Cloneable { * @param sourcePrefix The prefix to be consumed before copying nodes. Without root. * @param targetPrefix The prefix to be consumed before copying nodes. Without root. */ public static void copyTree(ObjectTree source, ObjectTree target, String sourcePrefix, String targetPrefix) { public static void copyTargetTreeToSource(ObjectTree source, ObjectTree target, String sourcePrefix, String targetPrefix) { ObjectTree a = source.findObjectTreeOfMember(sourcePrefix); ObjectTree b = target.findObjectTreeOfMember(targetPrefix); a.addAll(b); Loading sdg-core/src/main/java/es/upv/mist/slicing/nodes/VariableVisitor.java +11 −0 Original line number Diff line number Diff line Loading @@ -375,6 +375,17 @@ public class VariableVisitor extends GraphNodeContentVisitor<VariableVisitor.Act } // Regardless of whether it resolves or not, 'this' is defined acceptActionNullDefinition(FIELD, "this"); // setup a connection between USE(-output-) and DEF(this) List<VariableAction> vaList = graphNode.getVariableActions(); if (vaList.size() >= 5) { // call-super, DEC(this), USE(-output-), ret-super, DEF(this) VariableAction useOutput = vaList.get(vaList.size() - 3); VariableAction defThis = vaList.get(vaList.size() - 1); assert useOutput.isUsage() && useOutput.getName().equals(VARIABLE_NAME_OUTPUT); assert defThis.isDefinition() && defThis.getName().equals("this"); defThis.asDefinition().setTotallyDefinedMember("this"); ObjectTree.copyTargetTreeToSource(defThis.getObjectTree(), useOutput.getObjectTree(), "", ""); useOutput.setPDGTreeConnectionTo(defThis, "", ""); } } @Override Loading Loading
sdg-core/src/main/java/es/upv/mist/slicing/graphs/ExpressionObjectTreeFinder.java +1 −1 Original line number Diff line number Diff line Loading @@ -163,7 +163,7 @@ public class ExpressionObjectTreeFinder { String sourceMember = sourcePair.b; if (targetAction.hasObjectTree() && (!sourceAction.hasObjectTree() || !sourceAction.getObjectTree().isLeaf(sourceMember))) ObjectTree.copyTree(sourceAction.getObjectTree(), targetAction.getObjectTree(), sourceMember, targetMember); ObjectTree.copyTargetTreeToSource(sourceAction.getObjectTree(), targetAction.getObjectTree(), sourceMember, targetMember); sourceAction.setPDGTreeConnectionTo(targetAction, sourceMember, targetMember); } }
sdg-core/src/main/java/es/upv/mist/slicing/graphs/jsysdg/JSysCFG.java +3 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,9 @@ public class JSysCFG extends ESCFG { } public List<VariableAction> findLastTotalDefinitionOf(VariableAction action, String member) { return findLastVarActionsFrom(action, def -> def.isDefinition() && def.asDefinition().isTotallyDefinedMember(member)); return findLastVarActionsFrom(action, def -> (def.isDeclaration() && def.hasTreeMember(member)) || (def.isDefinition() && def.asDefinition().isTotallyDefinedMember(member))); } /** Given a definition of a given member, locate all definitions of the same object until a definition Loading
sdg-core/src/main/java/es/upv/mist/slicing/nodes/ObjectTree.java +1 −1 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ public class ObjectTree implements Cloneable { * @param sourcePrefix The prefix to be consumed before copying nodes. Without root. * @param targetPrefix The prefix to be consumed before copying nodes. Without root. */ public static void copyTree(ObjectTree source, ObjectTree target, String sourcePrefix, String targetPrefix) { public static void copyTargetTreeToSource(ObjectTree source, ObjectTree target, String sourcePrefix, String targetPrefix) { ObjectTree a = source.findObjectTreeOfMember(sourcePrefix); ObjectTree b = target.findObjectTreeOfMember(targetPrefix); a.addAll(b); Loading
sdg-core/src/main/java/es/upv/mist/slicing/nodes/VariableVisitor.java +11 −0 Original line number Diff line number Diff line Loading @@ -375,6 +375,17 @@ public class VariableVisitor extends GraphNodeContentVisitor<VariableVisitor.Act } // Regardless of whether it resolves or not, 'this' is defined acceptActionNullDefinition(FIELD, "this"); // setup a connection between USE(-output-) and DEF(this) List<VariableAction> vaList = graphNode.getVariableActions(); if (vaList.size() >= 5) { // call-super, DEC(this), USE(-output-), ret-super, DEF(this) VariableAction useOutput = vaList.get(vaList.size() - 3); VariableAction defThis = vaList.get(vaList.size() - 1); assert useOutput.isUsage() && useOutput.getName().equals(VARIABLE_NAME_OUTPUT); assert defThis.isDefinition() && defThis.getName().equals("this"); defThis.asDefinition().setTotallyDefinedMember("this"); ObjectTree.copyTargetTreeToSource(defThis.getObjectTree(), useOutput.getObjectTree(), "", ""); useOutput.setPDGTreeConnectionTo(defThis, "", ""); } } @Override Loading