Loading sdg-cli/src/main/java/es/upv/mist/slicing/cli/Slicer.java +30 −7 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ import es.upv.mist.slicing.graphs.sdg.SDG; import es.upv.mist.slicing.slicing.FileLineSlicingCriterion; import es.upv.mist.slicing.slicing.Slice; import es.upv.mist.slicing.slicing.SlicingCriterion; import es.upv.mist.slicing.utils.NodeHashSet; import es.upv.mist.slicing.utils.StaticTypeSolver; import org.apache.commons.cli.*; Loading @@ -22,6 +23,7 @@ import java.io.PrintWriter; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Stream; public class Slicer { protected static final String HELP_HEADER = "Java SDG Slicer: extract a slice from a Java program. At least" + Loading Loading @@ -215,13 +217,16 @@ public class Slicer { StaticJavaParser.getConfiguration().setAttributeComments(false); // Build the SDG NodeList<CompilationUnit> units = new NodeList<>(); Set<CompilationUnit> units = new NodeHashSet<>(); try { for (File directory : dirIncludeSet) units.add(StaticJavaParser.parse(directory)); CompilationUnit scUnit = StaticJavaParser.parse(scFile); if (!units.contains(scUnit)) units.add(scUnit); for (File file : dirIncludeSet) { if (file.isDirectory()) for (File f : (Iterable<File>) findAllJavaFiles(file)::iterator) units.add(StaticJavaParser.parse(f)); else units.add(StaticJavaParser.parse(file)); } units.add(StaticJavaParser.parse(scFile)); } catch (FileNotFoundException e) { throw new ParseException(e.getMessage()); } Loading @@ -235,7 +240,7 @@ public class Slicer { default: throw new IllegalArgumentException("Unknown type of graph. Available graphs are SDG, ASDG, PSDG, ESSDG"); } sdg.build(units); sdg.build(new NodeList<>(units)); // Slice the SDG SlicingCriterion sc = new FileLineSlicingCriterion(scFile, scLine); Loading @@ -258,6 +263,24 @@ public class Slicer { } } protected Stream<File> findAllJavaFiles(File directory) { Stream.Builder<File> builder = Stream.builder(); findAllJavaFiles(directory, builder); return builder.build(); } protected void findAllJavaFiles(File directory, Stream.Builder<File> builder) { File[] files = directory.listFiles(); if (files == null) return; for (File f : files) { if (f.isDirectory()) findAllJavaFiles(f, builder); else if (f.getName().endsWith(".java")) builder.add(f); } } protected String getDisclaimer(CompilationUnit.Storage s) { return String.format("\n\tThis file was automatically generated as part of a slice with criterion" + "\n\tfile: %s, line: %d, variable(s): %s\n\tOriginal file: %s\n", Loading sdg-core/src/main/java/es/upv/mist/slicing/graphs/CallGraph.java +3 −10 Original line number Diff line number Diff line Loading @@ -40,7 +40,6 @@ import java.util.stream.Stream; */ public class CallGraph extends DirectedPseudograph<CallGraph.Vertex, CallGraph.Edge<?>> implements Buildable<NodeList<CompilationUnit>> { private final Map<CallableDeclaration<?>, CFG> cfgMap; private final Map<CallableDeclaration<?>, Vertex> vertexDeclarationMap = ASTUtils.newIdentityHashMap(); private final ClassGraph classGraph; private boolean built = false; Loading Loading @@ -116,27 +115,21 @@ public class CallGraph extends DirectedPseudograph<CallGraph.Vertex, CallGraph.E arg.accept(new VoidVisitorAdapter<Void>() { @Override public void visit(MethodDeclaration n, Void arg) { addDeclaration(n); addVertex(new Vertex(n)); super.visit(n, arg); } @Override public void visit(ConstructorDeclaration n, Void arg) { addDeclaration(n); addVertex(new Vertex(n)); super.visit(n, arg); } }, null); } protected void addDeclaration(CallableDeclaration<?> n) { Vertex v = new Vertex(n); vertexDeclarationMap.put(n, v); addVertex(v); } protected boolean addEdge(CallableDeclaration<?> source, CallableDeclaration<?> target, Resolvable<? extends ResolvedMethodLikeDeclaration> call) { Edge<?> edge = new Edge<>(call, findGraphNode(call, source)); return addEdge(vertexDeclarationMap.get(source), vertexDeclarationMap.get(target), edge); return addEdge(findVertexByDeclaration(source), findVertexByDeclaration(target), edge); } /** Find the calls to methods and constructors (edges) in the given list of compilation units. */ Loading Loading
sdg-cli/src/main/java/es/upv/mist/slicing/cli/Slicer.java +30 −7 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ import es.upv.mist.slicing.graphs.sdg.SDG; import es.upv.mist.slicing.slicing.FileLineSlicingCriterion; import es.upv.mist.slicing.slicing.Slice; import es.upv.mist.slicing.slicing.SlicingCriterion; import es.upv.mist.slicing.utils.NodeHashSet; import es.upv.mist.slicing.utils.StaticTypeSolver; import org.apache.commons.cli.*; Loading @@ -22,6 +23,7 @@ import java.io.PrintWriter; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Stream; public class Slicer { protected static final String HELP_HEADER = "Java SDG Slicer: extract a slice from a Java program. At least" + Loading Loading @@ -215,13 +217,16 @@ public class Slicer { StaticJavaParser.getConfiguration().setAttributeComments(false); // Build the SDG NodeList<CompilationUnit> units = new NodeList<>(); Set<CompilationUnit> units = new NodeHashSet<>(); try { for (File directory : dirIncludeSet) units.add(StaticJavaParser.parse(directory)); CompilationUnit scUnit = StaticJavaParser.parse(scFile); if (!units.contains(scUnit)) units.add(scUnit); for (File file : dirIncludeSet) { if (file.isDirectory()) for (File f : (Iterable<File>) findAllJavaFiles(file)::iterator) units.add(StaticJavaParser.parse(f)); else units.add(StaticJavaParser.parse(file)); } units.add(StaticJavaParser.parse(scFile)); } catch (FileNotFoundException e) { throw new ParseException(e.getMessage()); } Loading @@ -235,7 +240,7 @@ public class Slicer { default: throw new IllegalArgumentException("Unknown type of graph. Available graphs are SDG, ASDG, PSDG, ESSDG"); } sdg.build(units); sdg.build(new NodeList<>(units)); // Slice the SDG SlicingCriterion sc = new FileLineSlicingCriterion(scFile, scLine); Loading @@ -258,6 +263,24 @@ public class Slicer { } } protected Stream<File> findAllJavaFiles(File directory) { Stream.Builder<File> builder = Stream.builder(); findAllJavaFiles(directory, builder); return builder.build(); } protected void findAllJavaFiles(File directory, Stream.Builder<File> builder) { File[] files = directory.listFiles(); if (files == null) return; for (File f : files) { if (f.isDirectory()) findAllJavaFiles(f, builder); else if (f.getName().endsWith(".java")) builder.add(f); } } protected String getDisclaimer(CompilationUnit.Storage s) { return String.format("\n\tThis file was automatically generated as part of a slice with criterion" + "\n\tfile: %s, line: %d, variable(s): %s\n\tOriginal file: %s\n", Loading
sdg-core/src/main/java/es/upv/mist/slicing/graphs/CallGraph.java +3 −10 Original line number Diff line number Diff line Loading @@ -40,7 +40,6 @@ import java.util.stream.Stream; */ public class CallGraph extends DirectedPseudograph<CallGraph.Vertex, CallGraph.Edge<?>> implements Buildable<NodeList<CompilationUnit>> { private final Map<CallableDeclaration<?>, CFG> cfgMap; private final Map<CallableDeclaration<?>, Vertex> vertexDeclarationMap = ASTUtils.newIdentityHashMap(); private final ClassGraph classGraph; private boolean built = false; Loading Loading @@ -116,27 +115,21 @@ public class CallGraph extends DirectedPseudograph<CallGraph.Vertex, CallGraph.E arg.accept(new VoidVisitorAdapter<Void>() { @Override public void visit(MethodDeclaration n, Void arg) { addDeclaration(n); addVertex(new Vertex(n)); super.visit(n, arg); } @Override public void visit(ConstructorDeclaration n, Void arg) { addDeclaration(n); addVertex(new Vertex(n)); super.visit(n, arg); } }, null); } protected void addDeclaration(CallableDeclaration<?> n) { Vertex v = new Vertex(n); vertexDeclarationMap.put(n, v); addVertex(v); } protected boolean addEdge(CallableDeclaration<?> source, CallableDeclaration<?> target, Resolvable<? extends ResolvedMethodLikeDeclaration> call) { Edge<?> edge = new Edge<>(call, findGraphNode(call, source)); return addEdge(vertexDeclarationMap.get(source), vertexDeclarationMap.get(target), edge); return addEdge(findVertexByDeclaration(source), findVertexByDeclaration(target), edge); } /** Find the calls to methods and constructors (edges) in the given list of compilation units. */ Loading