langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/DepsAnalyzer.java
changeset 42840 dfe1a03d4db4
parent 42407 f3702cff2933
--- 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 {