--- a/langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/DepsAnalyzer.java Mon Dec 19 11:15:01 2016 -0800
+++ b/langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/DepsAnalyzer.java Mon Dec 19 12:30:39 2016 -0800
@@ -28,6 +28,7 @@
import com.sun.tools.classfile.Dependency.Location;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Deque;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@@ -91,7 +92,7 @@
// classpath to the root archives
if (filter.hasIncludePattern() || filter.hasTargetFilter()) {
configuration.getModules().values().stream()
- .filter(source -> filter.include(source) && filter.matches(source))
+ .filter(source -> include(source) && filter.matches(source))
.forEach(this.rootArchives::add);
}
@@ -161,14 +162,14 @@
Set<Archive> archives() {
if (filter.requiresFilter().isEmpty()) {
return archives.stream()
- .filter(filter::include)
+ .filter(this::include)
.filter(Archive::hasDependences)
.collect(Collectors.toSet());
} else {
// use the archives that have dependences and not specified in --require
return archives.stream()
- .filter(filter::include)
- .filter(source -> !filter.requiresFilter().contains(source))
+ .filter(this::include)
+ .filter(source -> !filter.requiresFilter().contains(source.getName()))
.filter(source ->
source.getDependencies()
.map(finder::locationToArchive)
@@ -197,7 +198,6 @@
.distinct()
.map(configuration::findClass)
.flatMap(Optional::stream)
- .filter(filter::include)
.collect(toSet());
}
@@ -238,7 +238,7 @@
continue;
Archive archive = configuration.findClass(target).orElse(null);
- if (archive != null && filter.include(archive)) {
+ if (archive != null) {
archives.add(archive);
String name = target.getName();
@@ -257,6 +257,21 @@
} while (!unresolved.isEmpty() && depth-- > 0);
}
+ /*
+ * Tests if the given archive is requested for analysis.
+ * It includes the root modules specified in --module, --add-modules
+ * or modules specified on the command line
+ *
+ * This filters system module by default unless they are explicitly
+ * requested.
+ */
+ public boolean include(Archive source) {
+ Module module = source.getModule();
+ // skip system module by default
+ return !module.isSystem()
+ || configuration.rootModules().contains(source);
+ }
+
// ----- for testing purpose -----
public static enum Info {