Skip to content
Snippets Groups Projects
Commit 82d1902c authored by Carlos Galindo's avatar Carlos Galindo
Browse files

Correctly handle directories in Slicer

Fixes #44
parent efa5b136
No related branches found
No related tags found
1 merge request!54Fix github#44 (-i flag misbehaving)
...@@ -22,6 +22,7 @@ import java.io.PrintWriter; ...@@ -22,6 +22,7 @@ import java.io.PrintWriter;
import java.util.*; import java.util.*;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Stream;
public class Slicer { public class Slicer {
protected static final String HELP_HEADER = "Java SDG Slicer: extract a slice from a Java program. At least" + protected static final String HELP_HEADER = "Java SDG Slicer: extract a slice from a Java program. At least" +
...@@ -217,8 +218,13 @@ public class Slicer { ...@@ -217,8 +218,13 @@ public class Slicer {
// Build the SDG // Build the SDG
NodeList<CompilationUnit> units = new NodeList<>(); NodeList<CompilationUnit> units = new NodeList<>();
try { try {
for (File directory : dirIncludeSet) for (File file : dirIncludeSet) {
units.add(StaticJavaParser.parse(directory)); if (file.isDirectory())
for (File f : (Iterable<File>) findAllJavaFiles(file)::iterator)
units.add(StaticJavaParser.parse(f));
else
units.add(StaticJavaParser.parse(file));
}
CompilationUnit scUnit = StaticJavaParser.parse(scFile); CompilationUnit scUnit = StaticJavaParser.parse(scFile);
if (!units.contains(scUnit)) if (!units.contains(scUnit))
units.add(scUnit); units.add(scUnit);
...@@ -258,6 +264,24 @@ public class Slicer { ...@@ -258,6 +264,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) { protected String getDisclaimer(CompilationUnit.Storage s) {
return String.format("\n\tThis file was automatically generated as part of a slice with criterion" + 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", "\n\tfile: %s, line: %d, variable(s): %s\n\tOriginal file: %s\n",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment