Loading sdg-cli/src/main/java/es/upv/mist/slicing/cli/Slicer.java +1 −1 Original line number Diff line number Diff line Loading @@ -228,7 +228,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; Loading sdg-core/src/main/java/es/upv/mist/slicing/graphs/ClassGraph.java +8 −8 Original line number Diff line number Diff line Loading @@ -180,21 +180,21 @@ public class ClassGraph extends DirectedPseudograph<ClassGraph.Vertex, ClassGrap }); } /** Returns a NodeList with the static FieldDeclarations and InitializerDeclarations of the given class */ public NodeList<BodyDeclaration<?>> getStaticInit(String className){ /** Returns a List with the static FieldDeclarations and InitializerDeclarations of the given class */ public List<BodyDeclaration<?>> getStaticInit(String className){ return getClassInit(className,true); } /** Returns a NodeList with the dynamic FieldDeclarations and InitializerDeclarations of the given class */ public NodeList<BodyDeclaration<?>> getDynInit(String className){ /** Returns a List with the dynamic FieldDeclarations and InitializerDeclarations of the given class */ public List<BodyDeclaration<?>> getDynInit(String className){ return getClassInit(className,false); } /** Returns a NodeList with FieldDeclarations and InitializerDeclarations static/dynamic items of the given class */ private NodeList<BodyDeclaration<?>> getClassInit(String className, Boolean isStatic){ /** Returns a List with FieldDeclarations and InitializerDeclarations static/dynamic items of the given class */ private List<BodyDeclaration<?>> getClassInit(String className, Boolean isStatic){ Vertex classNode = vertexDeclarationMap.get(className); NodeList<BodyDeclaration<?>> members = classNode.declaration.asClassOrInterfaceDeclaration().getMembers(); NodeList<BodyDeclaration<?>> classInit = new NodeList<>(); List<BodyDeclaration<?>> members = classNode.declaration.asClassOrInterfaceDeclaration().getMembers(); List<BodyDeclaration<?>> classInit = new LinkedList<>(); for (BodyDeclaration<?> member : members) { if (member instanceof CallableDeclaration<?>) continue; Loading sdg-core/src/main/java/es/upv/mist/slicing/graphs/exceptionsensitive/ESSDG.java +1 −1 Original line number Diff line number Diff line Loading @@ -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(); Loading sdg-core/src/main/java/es/upv/mist/slicing/graphs/jsysdg/JSysCFGBuilder.java +4 −10 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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 Loading @@ -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); Loading sdg-core/src/main/java/es/upv/mist/slicing/graphs/jsysdg/JSysDG.java +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
sdg-cli/src/main/java/es/upv/mist/slicing/cli/Slicer.java +1 −1 Original line number Diff line number Diff line Loading @@ -228,7 +228,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; Loading
sdg-core/src/main/java/es/upv/mist/slicing/graphs/ClassGraph.java +8 −8 Original line number Diff line number Diff line Loading @@ -180,21 +180,21 @@ public class ClassGraph extends DirectedPseudograph<ClassGraph.Vertex, ClassGrap }); } /** Returns a NodeList with the static FieldDeclarations and InitializerDeclarations of the given class */ public NodeList<BodyDeclaration<?>> getStaticInit(String className){ /** Returns a List with the static FieldDeclarations and InitializerDeclarations of the given class */ public List<BodyDeclaration<?>> getStaticInit(String className){ return getClassInit(className,true); } /** Returns a NodeList with the dynamic FieldDeclarations and InitializerDeclarations of the given class */ public NodeList<BodyDeclaration<?>> getDynInit(String className){ /** Returns a List with the dynamic FieldDeclarations and InitializerDeclarations of the given class */ public List<BodyDeclaration<?>> getDynInit(String className){ return getClassInit(className,false); } /** Returns a NodeList with FieldDeclarations and InitializerDeclarations static/dynamic items of the given class */ private NodeList<BodyDeclaration<?>> getClassInit(String className, Boolean isStatic){ /** Returns a List with FieldDeclarations and InitializerDeclarations static/dynamic items of the given class */ private List<BodyDeclaration<?>> getClassInit(String className, Boolean isStatic){ Vertex classNode = vertexDeclarationMap.get(className); NodeList<BodyDeclaration<?>> members = classNode.declaration.asClassOrInterfaceDeclaration().getMembers(); NodeList<BodyDeclaration<?>> classInit = new NodeList<>(); List<BodyDeclaration<?>> members = classNode.declaration.asClassOrInterfaceDeclaration().getMembers(); List<BodyDeclaration<?>> classInit = new LinkedList<>(); for (BodyDeclaration<?> member : members) { if (member instanceof CallableDeclaration<?>) continue; Loading
sdg-core/src/main/java/es/upv/mist/slicing/graphs/exceptionsensitive/ESSDG.java +1 −1 Original line number Diff line number Diff line Loading @@ -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(); Loading
sdg-core/src/main/java/es/upv/mist/slicing/graphs/jsysdg/JSysCFGBuilder.java +4 −10 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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 Loading @@ -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); Loading
sdg-core/src/main/java/es/upv/mist/slicing/graphs/jsysdg/JSysDG.java +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); } } }