Merge
authorlana
Thu, 05 Jan 2017 19:47:14 +0000
changeset 43035 b41a321bb6e2
parent 43024 7db1a7346530 (current diff)
parent 43034 09436b637cb5 (diff)
child 43036 265376df8b48
Merge
--- a/langtools/make/intellij/src/idea/LangtoolsIdeaAntLogger.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/make/intellij/src/idea/LangtoolsIdeaAntLogger.java	Thu Jan 05 19:47:14 2017 +0000
@@ -84,6 +84,8 @@
         JAVAC_WARNING(StringBinaryPredicate.CONTAINS, MSG_WARN, "warning:", "compiler.warn"),
         /** a javac note */
         JAVAC_NOTE(StringBinaryPredicate.CONTAINS, MSG_INFO, "note:", "compiler.note"),
+        /** a javac raw error (these typically come from a build misconfiguration - such as a bad javac flag) */
+        JAVAC_RAW_ERROR(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "javac: "),
         /** continuation of some javac error message */
         JAVAC_NESTED_DIAG(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "  "),
         /** a javac crash */
@@ -126,7 +128,7 @@
     enum Task {
         /** exec task - invoked during compilation */
         JAVAC("exec", MessageKind.JAVAC_ERROR, MessageKind.JAVAC_WARNING, MessageKind.JAVAC_NOTE,
-                       MessageKind.JAVAC_NESTED_DIAG, MessageKind.JAVAC_CRASH),
+                       MessageKind.JAVAC_RAW_ERROR, MessageKind.JAVAC_NESTED_DIAG, MessageKind.JAVAC_CRASH),
         /** jtreg task - invoked during test execution */
         JTREG("jtreg", MessageKind.JTREG_TEST_PASSED, MessageKind.JTREG_TEST_FAILED, MessageKind.JTREG_TEST_ERROR, MessageKind.JTREG_TEST_REPORT),
         /** initial synthetic task when the logger is created */
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java	Thu Jan 05 19:47:14 2017 +0000
@@ -3845,20 +3845,26 @@
             return bounds.head;
         } else {                            // length > 1
             int classCount = 0;
+            List<Type> cvars = List.nil();
             List<Type> lowers = List.nil();
             for (Type bound : bounds) {
                 if (!bound.isInterface()) {
                     classCount++;
                     Type lower = cvarLowerBound(bound);
-                    if (bound != lower && !lower.hasTag(BOT))
-                        lowers = insert(lowers, lower);
+                    if (bound != lower && !lower.hasTag(BOT)) {
+                        cvars = cvars.append(bound);
+                        lowers = lowers.append(lower);
+                    }
                 }
             }
             if (classCount > 1) {
-                if (lowers.isEmpty())
+                if (lowers.isEmpty()) {
                     return createErrorType(errT);
-                else
-                    return glbFlattened(union(bounds, lowers), errT);
+                } else {
+                    // try again with lower bounds included instead of capture variables
+                    List<Type> newBounds = bounds.diff(cvars).appendList(lowers);
+                    return glb(newBounds);
+                }
             }
         }
         return makeIntersectionType(bounds);
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1740,7 +1740,7 @@
         accept(ARROW);
 
         return token.kind == LBRACE ?
-            lambdaStatement(args, pos, pos) :
+            lambdaStatement(args, pos, token.pos) :
             lambdaExpression(args, pos);
     }
 
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties	Thu Jan 05 19:47:14 2017 +0000
@@ -2558,7 +2558,7 @@
 # 0: string
 compiler.err.intersection.types.in.cast.not.supported.in.source=\
     intersection types in cast are not supported in -source {0}\n\
-    (use -source 8 or higher to enable default methods)
+    (use -source 8 or higher to enable intersection types in cast)
 
 # 0: string
 compiler.err.static.intf.methods.not.supported.in.source=\
--- a/langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/JdepsConfiguration.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/JdepsConfiguration.java	Thu Jan 05 19:47:14 2017 +0000
@@ -105,18 +105,18 @@
         // build root set for resolution
         Set<String> mods = new HashSet<>(roots);
 
-        // add default modules to the root set
-        // unnamed module
-        if (!initialArchives.isEmpty() || !classpaths.isEmpty() ||
-                roots.isEmpty() || allDefaultModules) {
-            mods.addAll(systemModulePath.defaultSystemRoots());
-        }
-        if (allSystemModules) {
+        // add all system modules to the root set for unnamed module or set explicitly
+        boolean unnamed = !initialArchives.isEmpty() || !classpaths.isEmpty();
+        if (allSystemModules || (unnamed && !allDefaultModules)) {
             systemModulePath.findAll().stream()
                 .map(mref -> mref.descriptor().name())
                 .forEach(mods::add);
         }
 
+        if (allDefaultModules) {
+            mods.addAll(systemModulePath.defaultSystemRoots());
+        }
+
         this.configuration = Configuration.empty()
                 .resolveRequires(finder, ModuleFinder.of(), mods);
 
@@ -502,6 +502,7 @@
         boolean addAllApplicationModules;
         boolean addAllDefaultModules;
         boolean addAllSystemModules;
+        boolean allModules;
         Runtime.Version version;
 
         public Builder() {
@@ -550,8 +551,7 @@
          * Include all system modules and modules found on modulepath
          */
         public Builder allModules() {
-            this.addAllSystemModules = true;
-            this.addAllApplicationModules = true;
+            this.allModules = true;
             return this;
         }
 
@@ -592,19 +592,30 @@
                         .map(mref -> mref.descriptor().name())
                         .forEach(rootModules::add);
             }
-            if (addAllApplicationModules && appModulePath != null) {
+
+            if ((addAllApplicationModules || allModules) && appModulePath != null) {
                 appModulePath.findAll().stream()
                     .map(mref -> mref.descriptor().name())
                     .forEach(rootModules::add);
             }
 
+            // no archive is specified for analysis
+            // add all system modules as root if --add-modules ALL-SYSTEM is specified
+            if (addAllSystemModules && rootModules.isEmpty() &&
+                    initialArchives.isEmpty() && classPaths.isEmpty()) {
+                systemModulePath.findAll()
+                    .stream()
+                    .map(mref -> mref.descriptor().name())
+                    .forEach(rootModules::add);
+            }
+
             return new JdepsConfiguration(systemModulePath,
                                           finder,
                                           rootModules,
                                           classPaths,
                                           initialArchives,
                                           addAllDefaultModules,
-                                          addAllSystemModules,
+                                          allModules,
                                           version);
         }
 
--- a/langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/JdepsTask.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/JdepsTask.java	Thu Jan 05 19:47:14 2017 +0000
@@ -38,10 +38,10 @@
 import java.nio.file.Paths;
 import java.text.MessageFormat;
 import java.util.*;
+import java.util.function.Function;
+import java.util.function.ToIntFunction;
 import java.util.jar.JarFile;
 import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * Implementation for the jdeps tool for static class dependency analysis.
@@ -314,7 +314,10 @@
         },
         new Option(true, "-m", "--module") {
             void process(JdepsTask task, String opt, String arg) throws BadArgs {
-                task.options.rootModule = arg;
+                if (!task.options.rootModules.isEmpty()) {
+                    throw new BadArgs("err.option.already.specified", opt);
+                }
+                task.options.rootModules.add(arg);
                 task.options.addmods.add(arg);
             }
         },
@@ -350,6 +353,7 @@
         new Option(true, "--require") {
             void process(JdepsTask task, String opt, String arg) {
                 task.options.requires.add(arg);
+                task.options.addmods.add(arg);
             }
         },
         new Option(true, "-f", "-filter") {
@@ -491,11 +495,6 @@
             if (options.help || options.version || options.fullVersion) {
                 return EXIT_OK;
             }
-
-            if (!inputArgs.isEmpty() && options.rootModule != null) {
-                reportError("err.invalid.arg.for.option", "-m");
-            }
-
             if (options.numFilters() > 1) {
                 reportError("err.invalid.filters");
                 return EXIT_CMDERR;
@@ -543,8 +542,8 @@
                                                      e.getKey(),
                                                      e.getValue().toString())));
 
-            // check if any module specified in --require is missing
-            Stream.concat(options.addmods.stream(), options.requires.stream())
+            // check if any module specified in --add-modules, --require, and -m is missing
+            options.addmods.stream()
                 .filter(mn -> !config.isValidToken(mn))
                 .forEach(mn -> config.findModule(mn).orElseThrow(() ->
                     new UncheckedBadArgs(new BadArgs("err.module.not.found", mn))));
@@ -620,6 +619,7 @@
         protected Command(CommandOption option) {
             this.option = option;
         }
+
         /**
          * Returns true if the command-line options are all valid;
          * otherwise, returns false.
@@ -633,6 +633,10 @@
 
         /**
          * Includes all modules on system module path and application module path
+         *
+         * When a named module is analyzed, it will analyze the dependences
+         * only.  The method should be overridden when this command should
+         * analyze all modules instead.
          */
         boolean allModules() {
             return false;
@@ -680,6 +684,10 @@
                     return false;
                 }
             }
+
+            if (!inputArgs.isEmpty() && !options.rootModules.isEmpty()) {
+                reportError("err.invalid.arg.for.option", "-m");
+            }
             if (inputArgs.isEmpty() && !options.hasSourcePath()) {
                 showHelp();
                 return false;
@@ -808,23 +816,46 @@
             log.println();
             if (!options.requires.isEmpty())
                 log.println(getMessage("inverse.transitive.dependencies.on",
-                    options.requires));
+                                       options.requires));
             else
                 log.println(getMessage("inverse.transitive.dependencies.matching",
-                    options.regex != null
-                        ? options.regex.toString()
-                        : "packages " + options.packageNames));
+                                       options.regex != null
+                                           ? options.regex.toString()
+                                           : "packages " + options.packageNames));
 
-            analyzer.inverseDependences().stream()
-                .sorted(Comparator.comparing(this::sortPath))
-                .forEach(path -> log.println(path.stream()
-                    .map(Archive::getName)
-                    .collect(joining(" <- "))));
+            analyzer.inverseDependences()
+                    .stream()
+                    .sorted(comparator())
+                    .map(this::toInversePath)
+                    .forEach(log::println);
             return ok;
         }
 
-        private String sortPath(Deque<Archive> path) {
-            return path.peekFirst().getName();
+        private String toInversePath(Deque<Archive> path) {
+            return path.stream()
+                       .map(Archive::getName)
+                       .collect(joining(" <- "));
+        }
+
+        /*
+         * Returns a comparator for sorting the inversed path, grouped by
+         * the first module name, then the shortest path and then sort by
+         * the module names of each path
+         */
+        private Comparator<Deque<Archive>> comparator() {
+            return Comparator.<Deque<Archive>, String>
+                comparing(deque -> deque.peekFirst().getName())
+                    .thenComparingInt(Deque::size)
+                    .thenComparing(this::toInversePath);
+        }
+
+        /*
+         * Returns true if --require is specified so that all modules are
+         * analyzed to find all modules that depend on the modules specified in the
+         * --require option directly and indirectly
+         */
+        public boolean allModules() {
+            return options.requires.size() > 0;
         }
     }
 
@@ -924,6 +955,9 @@
             return new ModuleAnalyzer(config, log, modules).run();
         }
 
+        /*
+         * Returns true to analyze all modules
+         */
         public boolean allModules() {
             return true;
         }
@@ -957,6 +991,10 @@
                             option);
                 return false;
             }
+
+            if (!inputArgs.isEmpty() && !options.rootModules.isEmpty()) {
+                reportError("err.invalid.arg.for.option", "-m");
+            }
             if (inputArgs.isEmpty() && !options.hasSourcePath()) {
                 showHelp();
                 return false;
@@ -971,11 +1009,6 @@
                                              reduced,
                                              log).run();
         }
-
-        @Override
-        boolean allModules() {
-            return true;
-        }
     }
 
 
@@ -1155,7 +1188,7 @@
         String systemModulePath = System.getProperty("java.home");
         String upgradeModulePath;
         String modulePath;
-        String rootModule;
+        Set<String> rootModules = new HashSet<>();
         Set<String> addmods = new HashSet<>();
         Runtime.Version multiRelease;
 
--- a/langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/ModuleExportsAnalyzer.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/ModuleExportsAnalyzer.java	Thu Jan 05 19:47:14 2017 +0000
@@ -34,6 +34,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import static com.sun.tools.jdeps.Analyzer.NOT_FOUND;
 
@@ -109,9 +110,7 @@
     private void printDependences() {
         // find use of JDK internals
         Map<Module, Set<String>> jdkinternals = new HashMap<>();
-        deps.keySet().stream()
-            .filter(source -> !source.getModule().isNamed())
-            .map(deps::get)
+        dependenceStream()
             .flatMap(map -> map.entrySet().stream())
             .filter(e -> e.getValue().size() > 0)
             .forEach(e -> jdkinternals.computeIfAbsent(e.getKey().getModule(),
@@ -124,11 +123,10 @@
         Module root = new RootModule("root");
         builder.addModule(root);
         // find named module dependences
-        deps.keySet().stream()
-            .filter(source -> !source.getModule().isNamed())
-            .map(deps::get)
+        dependenceStream()
             .flatMap(map -> map.keySet().stream())
-            .filter(m -> m.getModule().isNamed())
+            .filter(m -> m.getModule().isNamed()
+                            && !configuration.rootModules().contains(m))
             .map(Archive::getModule)
             .forEach(m -> builder.addEdge(root, m));
 
@@ -167,6 +165,16 @@
             });
     }
 
+    /*
+     * Returns a stream of dependence map from an Archive to the set of JDK
+     * internal APIs being used.
+     */
+    private Stream<Map<Archive, Set<String>>> dependenceStream() {
+        return deps.keySet().stream()
+                   .filter(source -> !source.getModule().isNamed()
+                            || configuration.rootModules().contains(source))
+                   .map(deps::get);
+    }
 
     private class RootModule extends Module {
         final ModuleDescriptor descriptor;
--- a/langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/resources/jdeps.properties	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/resources/jdeps.properties	Thu Jan 05 19:47:14 2017 +0000
@@ -194,6 +194,7 @@
 err.invalid.options={0} cannot be used with {1} option
 err.module.not.found=module not found: {0}
 err.root.module.not.set=root module set empty
+err.option.already.specified={0} option specified more than once.
 err.filter.not.specified=--package (-p), --regex (-e), --require option must be specified
 err.multirelease.option.exists={0} is not a multi-release jar file, but the --multi-release option is set
 err.multirelease.option.notfound={0} is a multi-release jar file, but the --multi-release option is not set
--- a/langtools/test/ProblemList.txt	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/ProblemList.txt	Thu Jan 05 19:47:14 2017 +0000
@@ -1,6 +1,6 @@
 ###########################################################################
 #
-# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -36,17 +36,14 @@
 #
 # jshell
 
-jdk/jshell/EditorPadTest.java                                                   8161276    windows-all    Test set-up cannot press buttons
-jdk/jshell/ToolBasicTest.java                                                   8139873    generic-all    JShell tests failing
-jdk/jshell/ExternalEditorTest.java                                              8170108    generic-all
 jdk/jshell/ToolFormatTest.java                                                  8170216    solaris-sparcv9
 jdk/jshell/ReplaceTest.java                                                     8170216    solaris-sparcv9
+jdk/jshell/UserInputTest.java                                                   8169536    generic-all   
 
 ###########################################################################
 #
 # javac
 
-tools/javac/Paths/AbsolutePathTest.java                                         8055768    generic-all    ToolBox does not close opened files
 tools/javac/annotations/typeAnnotations/failures/CantAnnotatePackages.java      8057679    generic-all    clarify error messages trying to annotate scoping
 tools/javac/annotations/typeAnnotations/failures/CantAnnotateScoping.java       8057679    generic-all    clarify error messages trying to annotate scoping
 tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass2.java  8057679    generic-all    clarify error messages trying to annotate scoping
--- a/langtools/test/jdk/jshell/UserInputTest.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/jdk/jshell/UserInputTest.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
  * @summary Verify that the user's code can read System.in
  * @build KullaTesting TestingInputStream
  * @run testng UserInputTest
+ * @key intermittent
  */
 
 import java.io.IOException;
--- a/langtools/test/tools/doclint/tidy/util/Main.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/doclint/tidy/util/Main.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -154,6 +154,11 @@
                 errs += Integer.valueOf(m.group(2));
                 if (m.group(3) != null)
                     overflow++;
+            } else if ((m = countPattern2.matcher(line)).matches()) {
+                warns += Integer.valueOf(m.group(1));
+                errs += Integer.valueOf(m.group(2));
+                if (m.group(3) != null)
+                    overflow++;
             } else if ((m = guardPattern.matcher(line)).matches()) {
                 boolean found = false;
                 for (Pattern p: patterns) {
@@ -183,6 +188,7 @@
 
     Pattern okPattern = Pattern.compile("No warnings or errors were found.");
     Pattern countPattern = Pattern.compile("([0-9]+) warnings, ([0-9]+) errors were found!.*?(Not all warnings/errors were shown.)?");
+    Pattern countPattern2 = Pattern.compile("Tidy found ([0-9]+) warning[s]? and ([0-9]+) error[s]?!.*?(Not all warnings/errors were shown.)?");
     Pattern cssPattern = Pattern.compile("You are recommended to use CSS.*");
     Pattern guardPattern = Pattern.compile("line [0-9]+ column [0-9]+ - (Error|Warning):.*");
 
@@ -221,7 +227,11 @@
         Pattern.compile(".*Warning: trimming empty <.*>"),
         Pattern.compile(".*Warning: unescaped & or unknown entity \".*\""),
         Pattern.compile(".*Warning: unescaped & which should be written as &amp;"),
-        Pattern.compile(".*Warning: using <br> in place of <p>")
+        Pattern.compile(".*Warning: using <br> in place of <p>"),
+        Pattern.compile(".*Warning: <.*> element removed from HTML5"),
+        Pattern.compile(".*Warning: <.*> attribute \".*\" not allowed for HTML5"),
+        Pattern.compile(".*Warning: The summary attribute on the <table> element is obsolete in HTML5"),
+        Pattern.compile(".*Warning: replacing invalid UTF-8 bytes \\(char. code U\\+.*\\)")
     };
 
     int files;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/inference/CaptureGLB1.java	Thu Jan 05 19:47:14 2017 +0000
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8144066
+ * @summary GLB of two lower-bounded capture variables, bounded by related array types
+ * @compile CaptureGLB1.java
+ */
+
+public class CaptureGLB1 {
+
+    interface A<T> { }
+
+    Exception[] bar(A<? super Exception[]> x, A<? super Throwable[]> y){
+        return foo(x, y);
+    }
+
+    <T> T foo(A<? super T> x, A<? super T> y){
+        return null;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/inference/CaptureGLB2.java	Thu Jan 05 19:47:14 2017 +0000
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8144066
+ * @summary GLB of two lower-bounded capture variables, bounded by related wildcard-parameterized types
+ * @compile CaptureGLB2.java
+ */
+
+public class CaptureGLB2 {
+
+    interface A<T> { }
+
+    Class<?> bar(A<? super Class<? extends Exception>> x, A<? super Class<? extends Throwable>> y){
+        return foo(x, y);
+    }
+
+    <T> T foo(A<? super T> x, A<? super T> y){
+        return null;
+    }
+}
--- a/langtools/test/tools/javac/lambda/MostSpecific09.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific09.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,6 +1,6 @@
 /*
  * @test /nodynamiccopyright/
- * @bug 8029718
+ * @bug 8029718 8065800
  * @summary Should always use lambda body structure to disambiguate overload resolution
  * @compile/fail/ref=MostSpecific09.out -XDrawDiagnostics --should-stop:at=ATTR --debug:verboseResolution=applicable,success MostSpecific09.java
  */
--- a/langtools/test/tools/javac/lambda/MostSpecific09.out	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific09.out	Thu Jan 05 19:47:14 2017 +0000
@@ -2,7 +2,7 @@
 MostSpecific09.java:26:9: compiler.note.verbose.resolve.multi: foo, MostSpecific09, 0, BASIC, compiler.misc.type.none, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, foo(MostSpecific09.I), null)}
 MostSpecific09.java:27:9: compiler.note.verbose.resolve.multi: foo, MostSpecific09, 0, BASIC, compiler.misc.type.none, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, foo(MostSpecific09.J), null)}
 MostSpecific09.java:27:32: compiler.note.verbose.resolve.multi: println, java.io.PrintStream, 1, BASIC, java.lang.String, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, println(java.lang.Object), null),(compiler.misc.applicable.method.found: 1, println(java.lang.String), null)}
-MostSpecific09.java:28:13: compiler.err.lambda.body.neither.value.nor.void.compatible
+MostSpecific09.java:28:20: compiler.err.lambda.body.neither.value.nor.void.compatible
 MostSpecific09.java:28:9: compiler.err.cant.apply.symbols: kindname.method, foo, @682,{(compiler.misc.inapplicable.method: kindname.method, MostSpecific09, foo(MostSpecific09.I), (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.missing.ret.val: java.lang.String)))),(compiler.misc.inapplicable.method: kindname.method, MostSpecific09, foo(MostSpecific09.J), (compiler.misc.no.conforming.assignment.exists: (compiler.misc.unexpected.ret.val)))}
 MostSpecific09.java:28:43: compiler.note.verbose.resolve.multi: println, java.io.PrintStream, 1, BASIC, java.lang.String, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, println(java.lang.Object), null),(compiler.misc.applicable.method.found: 1, println(java.lang.String), null)}
 MostSpecific09.java:29:9: compiler.err.ref.ambiguous: foo, kindname.method, foo(MostSpecific09.I), MostSpecific09, kindname.method, foo(MostSpecific09.J), MostSpecific09
@@ -10,7 +10,7 @@
 MostSpecific09.java:30:9: compiler.err.ref.ambiguous: foo, kindname.method, foo(MostSpecific09.I), MostSpecific09, kindname.method, foo(MostSpecific09.J), MostSpecific09
 MostSpecific09.java:32:9: compiler.err.ref.ambiguous: foo, kindname.method, foo(MostSpecific09.I), MostSpecific09, kindname.method, foo(MostSpecific09.J), MostSpecific09
 MostSpecific09.java:33:9: compiler.note.verbose.resolve.multi: foo, MostSpecific09, 0, BASIC, compiler.misc.type.none, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, foo(MostSpecific09.I), null)}
-MostSpecific09.java:42:13: compiler.err.lambda.body.neither.value.nor.void.compatible
+MostSpecific09.java:42:20: compiler.err.lambda.body.neither.value.nor.void.compatible
 MostSpecific09.java:42:9: compiler.err.cant.apply.symbols: kindname.method, foo, @1131,{(compiler.misc.inapplicable.method: kindname.method, MostSpecific09, foo(MostSpecific09.I), (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.missing.ret.val: java.lang.String)))),(compiler.misc.inapplicable.method: kindname.method, MostSpecific09, foo(MostSpecific09.J), (compiler.misc.no.conforming.assignment.exists: (compiler.misc.unexpected.ret.val)))}
 MostSpecific09.java:46:23: compiler.note.verbose.resolve.multi: println, java.io.PrintStream, 1, BASIC, java.lang.String, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, println(java.lang.Object), null),(compiler.misc.applicable.method.found: 1, println(java.lang.String), null)}
 MostSpecific09.java:49:9: compiler.note.verbose.resolve.multi: foo, MostSpecific09, 0, BASIC, compiler.misc.type.none, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, foo(MostSpecific09.J), null)}
--- a/langtools/test/tools/javac/lambda/MostSpecific10.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific10.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,9 +25,13 @@
  * @test
  * @bug 8034223
  * @summary Structural most-specific logic for lambdas, method refs, parens, and conditionals
- * @compile MostSpecific10.java
  */
-class MostSpecific10 {
+
+public class MostSpecific10 {
+
+    public static void main(String[] args) {
+        new MostSpecific10().test(true);
+    }
 
     interface GetInt {
         int get();
@@ -38,7 +42,9 @@
     }
 
     void m(GetInt getter) {}
-    void m(GetInteger getter) {}
+    void m(GetInteger getter) {
+        throw new AssertionError("Less-specific method invocation: " + getter.getClass());
+    }
 
     void test(boolean cond) {
         m(() -> 23);
--- a/langtools/test/tools/javac/lambda/MostSpecific11.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific11.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,14 +25,19 @@
  * @test
  * @bug 8034223
  * @summary Return type Object is not more specific than return type String
- * @compile MostSpecific11.java
  */
-class MostSpecific11 {
+public class MostSpecific11 {
+
+    public static void main(String[] args) {
+        new MostSpecific11().test();
+    }
 
     interface I { Object run(); }
     interface J { String run(); }
 
-    void m(I arg) {}
+    void m(I arg) {
+        throw new RuntimeException("Less-specific method invocation.");
+    }
     void m(J arg) {}
 
     void test() {
--- a/langtools/test/tools/javac/lambda/MostSpecific15.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific15.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,13 +25,18 @@
  * @test
  * @bug 8143852
  * @summary Rename functional interface method type parameters during most specific test
- * @compile MostSpecific15.java
  */
-class MostSpecific15 {
+public class MostSpecific15 {
+    public static void main(String[] args) {
+        new MostSpecific15().test();
+    }
+
     interface F1 { <X> Object apply(X arg); }
     interface F2 { <Y> String apply(Y arg); }
 
-    static void m1(F1 f) {}
+    static void m1(F1 f) {
+        throw new AssertionError("Less-specific method invocation.");
+    }
     static void m1(F2 f) {}
 
     static String foo(Object in) { return "a"; }
@@ -39,5 +44,4 @@
     void test() {
         m1(MostSpecific15::foo);
     }
-
-}
\ No newline at end of file
+}
--- a/langtools/test/tools/javac/lambda/MostSpecific17.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific17.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,9 +25,12 @@
  * @test
  * @bug 8143852
  * @summary Rename functional interface method type parameters during most specific test
- * @compile MostSpecific17.java
  */
-class MostSpecific17 {
+public class MostSpecific17 {
+
+    public static void main(String[] args) {
+        new MostSpecific17().test();
+    }
 
     interface A<T> {}
     interface B<T> extends A<T> {}
@@ -35,7 +38,9 @@
     interface F1 { <X> A<? super X> apply(Object arg); }
     interface F2 { <Y> B<? super Y> apply(Object arg); }
 
-    static void m1(F1 f) {}
+    static void m1(F1 f) {
+        throw new AssertionError("Less-specific method invocation.");
+    }
     static void m1(F2 f) {}
 
     static B<Object> foo(Object in) { return null; }
@@ -43,5 +48,4 @@
     void test() {
         m1(MostSpecific17::foo);
     }
-
-}
\ No newline at end of file
+}
--- a/langtools/test/tools/javac/lambda/MostSpecific18.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific18.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,13 +25,18 @@
  * @test
  * @bug 8143852
  * @summary Test that generic function interface method bounds are the same
- * @compile MostSpecific18.java
  */
-class MostSpecific18 {
+public class MostSpecific18 {
+    public static void main(String[] args) {
+        new MostSpecific18().test();
+    }
+
     interface F1 { <X extends Number> Object apply(X arg); }
     interface F2 { <Y extends Number> String apply(Y arg); }
 
-    static void m1(F1 f) {}
+    static void m1(F1 f) {
+        throw new AssertionError("Less-specific method invocation.");
+    }
     static void m1(F2 f) {}
 
     static String foo(Object in) { return "a"; }
@@ -39,5 +44,4 @@
     void test() {
         m1(MostSpecific18::foo);
     }
-
-}
\ No newline at end of file
+}
--- a/langtools/test/tools/javac/lambda/MostSpecific20.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific20.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,13 +25,18 @@
  * @test
  * @bug 8143852
  * @summary Test that generic function interface method bounds are the same
- * @compile MostSpecific20.java
  */
-class MostSpecific20 {
+public class MostSpecific20 {
+    public static void main(String[] args) {
+        new MostSpecific20().test();
+    }
+
     interface F1 { <X extends Iterable<X>> Object apply(X arg); }
     interface F2 { <Y extends Iterable<Y>> String apply(Y arg); }
 
-    static void m1(F1 f) {}
+    static void m1(F1 f) {
+        throw new AssertionError("Less-specific method invocation.");
+    }
     static void m1(F2 f) {}
 
     static String foo(Object in) { return "a"; }
@@ -39,5 +44,4 @@
     void test() {
         m1(MostSpecific20::foo);
     }
-
-}
\ No newline at end of file
+}
--- a/langtools/test/tools/javac/lambda/MostSpecific22.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific22.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,13 +25,19 @@
  * @test
  * @bug 8143852
  * @summary Most specific inference constraints derived from both functional interface method parameters and tparam bounds
- * @compile MostSpecific22.java
  */
-class MostSpecific22 {
+
+public class MostSpecific22 {
+    public static void main(String[] args) {
+        new MostSpecific22().test();
+    }
+
     interface F1<T> { <X extends T> Object apply(T arg); }
     interface F2 { <Y extends Number> String apply(Number arg); }
 
-    static <T> T m1(F1<T> f) { return null; }
+    static <T> T m1(F1<T> f) {
+        throw new AssertionError("Less-specific method invocation.");
+    }
     static Object m1(F2 f) { return null; }
 
     static String foo(Object in) { return "a"; }
@@ -40,4 +46,4 @@
         m1(MostSpecific22::foo);
     }
 
-}
\ No newline at end of file
+}
--- a/langtools/test/tools/javac/lambda/MostSpecific27.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific27.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,13 +25,18 @@
  * @test
  * @bug 8143852
  * @summary Most specific inference constraints derived from intersection bound
- * @compile MostSpecific27.java
  */
-class MostSpecific27 {
+public class MostSpecific27 {
+    public static void main(String[] args) {
+        new MostSpecific27().test();
+    }
+
     interface F1<T> { <X extends Iterable<T> & Runnable> Object apply(T arg); }
     interface F2 { <Y extends Iterable<Number> & Runnable> String apply(Number arg); }
 
-    static <T> T m1(F1<T> f) { return null; }
+    static <T> T m1(F1<T> f) {
+        throw new AssertionError("Less-specific method invocation.");
+    }
     static Object m1(F2 f) { return null; }
 
     static String foo(Object in) { return "a"; }
@@ -40,4 +45,4 @@
         m1(MostSpecific27::foo);
     }
 
-}
\ No newline at end of file
+}
--- a/langtools/test/tools/javac/lambda/MostSpecific29.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific29.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,15 +25,20 @@
  * @test
  * @bug 8144767
  * @summary Correct most-specific test when wildcards appear in functional interface type
- * @compile MostSpecific29.java
  */
-class MostSpecific29 {
+public class MostSpecific29 {
+
+    public static void main(String[] args) {
+        new MostSpecific29().test();
+    }
 
     interface Pred<T> { boolean test(T arg); }
     interface Fun<T,R> { R apply(T arg); }
 
     static void m1(Pred<? super Integer> f) {}
-    static void m1(Fun<Integer, Boolean> f) {}
+    static void m1(Fun<Integer, Boolean> f) {
+        throw new AssertionError("Less-specific method invocation.");
+    }
 
     void test() {
         m1((Integer n) -> true);
--- a/langtools/test/tools/javac/lambda/T8024947/PotentiallyAmbiguousWarningTest.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/javac/lambda/T8024947/PotentiallyAmbiguousWarningTest.java	Thu Jan 05 19:47:14 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,6 @@
  * @summary javac should issue the potentially ambiguous overload warning only
  * where the problem appears
  * @compile/fail/ref=PotentiallyAmbiguousWarningTest.out -XDrawDiagnostics -Werror -Xlint:overloads PotentiallyAmbiguousWarningTest.java
- * @compile PotentiallyAmbiguousWarningTest.java
  */
 
 import java.util.function.*;
--- a/langtools/test/tools/jdeps/listdeps/ListModuleDeps.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/jdeps/listdeps/ListModuleDeps.java	Thu Jan 05 19:47:14 2017 +0000
@@ -83,6 +83,28 @@
         ));
     }
 
+    @DataProvider(name = "jdkModules")
+    public Object[][] jdkModules() {
+        return new Object[][]{
+            {"jdk.compiler", new String[]{
+                                "java.base/sun.reflect.annotation",
+                                "java.compiler",
+                             }
+            },
+        };
+    }
+
+    @Test(dataProvider = "jdkModules")
+    public void testJDKModule(String moduleName, String[] expected) {
+        JdepsRunner jdeps = JdepsRunner.run(
+            "--list-deps", "-m", moduleName
+        );
+        String[] output = Arrays.stream(jdeps.output())
+                                .map(s -> s.trim())
+                                .toArray(String[]::new);
+        assertEquals(output, expected);
+    }
+
     @Test(dataProvider = "listdeps")
     public void testListDeps(Path classes, String[] expected) {
         JdepsRunner jdeps = JdepsRunner.run(
--- a/langtools/test/tools/jdeps/modules/CheckModuleTest.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/jdeps/modules/CheckModuleTest.java	Thu Jan 05 19:47:14 2017 +0000
@@ -57,6 +57,7 @@
     private static final Set<String> modules = Set.of("unsafe", "mIV", "mV", "mVI", "mVII", "mVIII");
 
     private static final String JAVA_BASE = "java.base";
+    private static final String JAVA_COMPILER = "java.compiler";
 
     /**
      * Compiles classes used by the test
@@ -73,6 +74,8 @@
         return new Object[][] {
             { JAVA_BASE, new ModuleMetaData(JAVA_BASE)
             },
+            { JAVA_COMPILER, new ModuleMetaData(JAVA_BASE)
+            },
         };
     };
 
--- a/langtools/test/tools/jdeps/modules/InverseDeps.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/jdeps/modules/InverseDeps.java	Thu Jan 05 19:47:14 2017 +0000
@@ -26,7 +26,9 @@
  * @summary Tests split packages
  * @library ../lib
  * @build CompilerUtils JdepsUtil
- * @modules jdk.jdeps/com.sun.tools.jdeps
+ * @modules java.logging
+ *          jdk.jdeps/com.sun.tools.jdeps
+ *          jdk.unsupported
  * @run testng InverseDeps
  */
 
@@ -87,6 +89,44 @@
             }
         }
     }
+    @DataProvider(name = "jdkModules")
+    public Object[][] jdkModules() {
+        return new Object[][]{
+            // --require and a subset of dependences
+            { "jdk.compiler", new String[][] {
+                    new String[] {"jdk.compiler", "jdk.jshell"},
+                    new String[] {"jdk.compiler", "jdk.rmic"},
+                    new String[] {"jdk.compiler", "jdk.javadoc", "jdk.rmic"},
+                }
+            },
+            { "java.compiler", new String[][] {
+                    new String[] {"java.compiler", "jdk.jshell"},
+                    new String[] {"java.compiler", "jdk.compiler", "jdk.jshell"},
+                    new String[] {"java.compiler", "jdk.compiler", "jdk.rmic"},
+                    new String[] {"java.compiler", "jdk.compiler", "jdk.javadoc", "jdk.rmic"},
+                    new String[] {"java.compiler", "java.se", "java.se.ee"},
+                }
+            },
+        };
+    }
+
+    @Test(dataProvider = "jdkModules")
+    public void testJDKModule(String moduleName, String[][] expected) throws Exception {
+        // this invokes the jdeps launcher so that all system modules are observable
+        JdepsRunner jdeps = JdepsRunner.run(
+            "--inverse", "--require", moduleName
+        );
+        List<String> output = Arrays.stream(jdeps.output())
+            .map(s -> s.trim())
+            .collect(Collectors.toList());
+
+        // verify the dependences
+        assertTrue(Arrays.stream(expected)
+                         .map(path -> Arrays.stream(path)
+                         .collect(Collectors.joining(" <- ")))
+                         .anyMatch(output::contains));
+    }
+
 
     @DataProvider(name = "testrequires")
     public Object[][] expected1() {
--- a/langtools/test/tools/jdeps/modules/SplitPackage.java	Thu Jan 05 17:51:12 2017 +0000
+++ b/langtools/test/tools/jdeps/modules/SplitPackage.java	Thu Jan 05 19:47:14 2017 +0000
@@ -63,10 +63,15 @@
 
     @Test
     public void runTest() throws Exception {
+        // split package detected if java.annotation.common is in the root set
+        runTest(JAVA_ANNOTATIONS_COMMON, SPLIT_PKG_NAME);
+        runTest("ALL-SYSTEM", SPLIT_PKG_NAME);
+        // default
+        runTest(null, SPLIT_PKG_NAME);
+
         // Test jdeps classes
-        runTest(null);
-        // Test jdeps --add-modules
-        runTest(JAVA_ANNOTATIONS_COMMON, SPLIT_PKG_NAME);
+        runTest("ALL-DEFAULT");
+
     }
 
     private void runTest(String root, String... splitPackages) throws Exception {