changeset 17200:80aecb2f0ac7

Merge
author prr
date Mon, 05 Jun 2017 11:00:25 -0700
parents e4a4f89bbca3 (current diff) a5506b425f1b (diff)
children 510301a824d4
files src/java.base/share/classes/overview-core.html test/java/util/ResourceBundle/modules/appbasic/src/test/jdk/test/resources/MyResourcesProvider.java test/java/util/ResourceBundle/modules/appbasic2/src/test/jdk/test/resources/MyResourcesProvider.java test/java/util/ResourceBundle/modules/basic/src/mainbundles/jdk/test/resources/MyResourcesProvider.java test/java/util/ResourceBundle/modules/simple/src/bundles/jdk/test/resources/MyResourcesProvider.java test/java/util/ResourceBundle/modules/visibility/src/exported.named.bundles/jdk/test/resources/exported/classes/MyResourcesProvider.java test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/classes/MyResourcesProvider.java test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/props/MyResourcesProvider.java test/java/util/ResourceBundle/modules/xmlformat/src/bundles/jdk/test/resources/MyResourcesProvider.java
diffstat 250 files changed, 1814 insertions(+), 816 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Fri Jun 02 18:40:55 2017 +0300
+++ b/.hgtags	Mon Jun 05 11:00:25 2017 -0700
@@ -414,3 +414,4 @@
 177436a54ca13730ffc725a6e5dbfcd9486f3da3 jdk-9+169
 ef9954f6896bb0b95ac62bf769f68b59a7a56ccd jdk-9+170
 29bbedd4cce8e14742bdb22118c057b877c02f0f jdk-9+171
+0ff9ad7d067cd4fa14450cf208bf019175a0aaba jdk-9+172
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/src/classes/build/tools/jigsaw/ListPackages.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,203 @@
+/*
+ * 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+
+package build.tools.jigsaw;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.UncheckedIOException;
+import java.lang.module.ModuleDescriptor;
+import java.lang.module.ModuleFinder;
+import java.lang.module.ModuleReference;
+import java.net.URI;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * Run this tool to generate the JDK internal APIs in the previous releases
+ * including platform-specific internal APIs.
+ */
+public class ListPackages {
+    // Filter non-interesting JAR files
+    private final static List<String> excludes = Arrays.asList(
+        "deploy.jar",
+        "javaws.jar",
+        "plugin.jar",
+        "cldrdata.jar",
+        "localedata.jar"
+    );
+    private static void usage() {
+        System.out.println("ListPackages [-o <outfile>] [-jdkinternals] <javaHome> [<javaHome>]*");
+    }
+
+    private static final Set<String> EXPORTED_PACKAGES = new HashSet<>();
+
+    public static void main(String... args) throws IOException {
+        List<Path> paths = new ArrayList<>();
+        Path outFile = null;
+        boolean jdkinternals = false;
+        int i=0;
+        while (i < args.length) {
+            String arg = args[i++];
+            if (arg.equals("-o")) {
+                outFile = Paths.get(args[i++]);
+            } else if (arg.equals("-jdkinternals")) {
+                jdkinternals = true;
+            } else {
+                Path p = Paths.get(arg);
+                if (Files.notExists(p))
+                    throw new IllegalArgumentException(p + " not exist");
+                paths.add(p);
+            }
+        }
+        if (paths.isEmpty()) {
+            usage();
+            System.exit(1);
+        }
+
+        // Get the exported APIs from the current JDK releases
+        Path javaHome = Paths.get(System.getProperty("java.home"));
+        ModuleFinder.ofSystem().findAll()
+            .stream()
+            .map(ModuleReference::descriptor)
+            .filter(md -> !md.name().equals("jdk.unsupported"))
+            .flatMap(md -> md.exports().stream())
+            .filter(exp -> !exp.isQualified())
+            .map(ModuleDescriptor.Exports::source)
+            .forEach(EXPORTED_PACKAGES::add);
+
+        ListPackages listPackages = new ListPackages(paths);
+        Stream<String> pkgs = listPackages.packages().stream();
+        if (jdkinternals) {
+            pkgs = pkgs.filter(pn -> !EXPORTED_PACKAGES.contains(pn));
+        }
+        if (outFile != null) {
+            try (OutputStream out = Files.newOutputStream(outFile);
+                 PrintStream pw = new PrintStream(out)) {
+                write(pw, pkgs);
+            }
+        } else {
+            write(System.out, pkgs);
+        }
+    }
+
+
+    private static void write(PrintStream pw, Stream<String> packages) {
+        pw.println("# This file is auto-generated by ListPackages tool on " +
+                   LocalDateTime.now().toString());
+        packages.sorted().forEach(pw::println);
+    }
+
+    private final Set<String> packages = new HashSet<>();
+    ListPackages(List<Path> dirs) throws IOException {
+        for (Path p : dirs) {
+            packages.addAll(list(p));
+        }
+    }
+
+    Set<String> packages() {
+        return packages;
+    }
+
+    private Set<String> list(Path javaHome) throws IOException {
+        Path jrt = javaHome.resolve("lib").resolve("modules");
+        Path jre = javaHome.resolve("jre");
+
+        if (Files.exists(jrt)) {
+            return listModularRuntime(javaHome);
+        } else if (Files.exists(jre.resolve("lib").resolve("rt.jar"))) {
+            return listLegacyRuntime(javaHome);
+        }
+        throw new IllegalArgumentException("invalid " + javaHome);
+    }
+
+    private Set<String> listModularRuntime(Path javaHome) throws IOException {
+        Map<String, String> env = new HashMap<>();
+        env.put("java.home", javaHome.toString());
+        FileSystem fs = FileSystems.newFileSystem(URI.create("jrt:/"), env);
+        Path root = fs.getPath("packages");
+        return Files.walk(root, 1)
+                    .map(Path::getFileName)
+                    .map(Path::toString)
+                    .collect(Collectors.toSet());
+    }
+
+    private Set<String> listLegacyRuntime(Path javaHome) throws IOException {
+        List<Path> dirs = new ArrayList<>();
+        Path jre = javaHome.resolve("jre");
+        Path lib = javaHome.resolve("lib");
+
+        dirs.add(jre.resolve("lib"));
+        dirs.add(jre.resolve("lib").resolve("ext"));
+        dirs.add(lib.resolve("tools.jar"));
+        dirs.add(lib.resolve("jconsole.jar"));
+        Set<String> packages = new HashSet<>();
+        for (Path d : dirs) {
+            Files.find(d, 1, (Path p, BasicFileAttributes attr)
+                    -> p.getFileName().toString().endsWith(".jar") &&
+                       !excludes.contains(p.getFileName().toString()))
+                 .map(ListPackages::walkJarFile)
+                 .forEach(packages::addAll);
+        }
+        return packages;
+    }
+
+    static Set<String> walkJarFile(Path jarfile) {
+        try (JarFile jf = new JarFile(jarfile.toFile())) {
+            return jf.stream()
+                     .map(JarEntry::getName)
+                     .filter(n -> n.endsWith(".class"))
+                     .map(ListPackages::toPackage)
+                     .collect(Collectors.toSet());
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
+    static String toPackage(String name) {
+        int i = name.lastIndexOf('/');
+        if (i < 0) {
+            System.err.format("Warning: unnamed package %s%n", name);
+        }
+        return i >= 0 ? name.substring(0, i).replace("/", ".") : "";
+    }
+}
--- a/src/java.base/share/classes/java/lang/RuntimePermission.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/lang/RuntimePermission.java	Mon Jun 05 11:00:25 2017 -0700
@@ -403,6 +403,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class RuntimePermission extends BasicPermission {
--- a/src/java.base/share/classes/java/lang/invoke/package-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/lang/invoke/package-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -44,13 +44,13 @@
  * </li>
  * </ul>
  *
- * <h1><a name="jvm_mods"></a>Summary of relevant Java Virtual Machine changes</h1>
+ * <h1><a id="jvm_mods"></a>Summary of relevant Java Virtual Machine changes</h1>
  * The following low-level information summarizes relevant parts of the
  * Java Virtual Machine specification.  For full details, please see the
  * current version of that specification.
  *
  * Each occurrence of an {@code invokedynamic} instruction is called a <em>dynamic call site</em>.
- * <h2><a name="indyinsn"></a>{@code invokedynamic} instructions</h2>
+ * <h2><a id="indyinsn"></a>{@code invokedynamic} instructions</h2>
  * A dynamic call site is originally in an unlinked state.  In this state, there is
  * no target method for the call site to invoke.
  * <p>
@@ -77,7 +77,8 @@
  * <p>
  * The bootstrap method is invoked on at least three values:
  * <ul>
- * <li>a {@code MethodHandles.Lookup}, a lookup object on the <em>caller class</em> in which dynamic call site occurs </li>
+ * <li>a {@code MethodHandles.Lookup}, a lookup object on the <em>caller class</em>
+ *     in which dynamic call site occurs </li>
  * <li>a {@code String}, the method name mentioned in the call site </li>
  * <li>a {@code MethodType}, the resolved type descriptor of the call </li>
  * <li>optionally, between 1 and 251 additional static arguments taken from the constant pool </li>
@@ -165,17 +166,27 @@
  * Given these rules, here are examples of legal bootstrap method declarations,
  * given various numbers {@code N} of extra arguments.
  * The first rows (marked {@code *}) will work for any number of extra arguments.
- * <table border=1 cellpadding=5 summary="Static argument types">
- * <tr><th>N</th><th>sample bootstrap method</th></tr>
- * <tr><td>*</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object... args)</code></td></tr>
- * <tr><td>*</td><td><code>CallSite bootstrap(Object... args)</code></td></tr>
- * <tr><td>*</td><td><code>CallSite bootstrap(Object caller, Object... nameAndTypeWithArgs)</code></td></tr>
- * <tr><td>0</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type)</code></td></tr>
- * <tr><td>0</td><td><code>CallSite bootstrap(Lookup caller, Object... nameAndType)</code></td></tr>
- * <tr><td>1</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object arg)</code></td></tr>
- * <tr><td>2</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object... args)</code></td></tr>
- * <tr><td>2</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, String... args)</code></td></tr>
- * <tr><td>2</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, String x, int y)</code></td></tr>
+ * <table class="plain">
+ * <caption style="display:none">Static argument types</caption>
+ * <tr><th>N</th><th>Sample bootstrap method</th></tr>
+ * <tr><td>*</td>
+ *     <td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object... args)</code></td></tr>
+ * <tr><td>*</td><td>
+ *     <code>CallSite bootstrap(Object... args)</code></td></tr>
+ * <tr><td>*</td><td>
+ *     <code>CallSite bootstrap(Object caller, Object... nameAndTypeWithArgs)</code></td></tr>
+ * <tr><td>0</td><td>
+ *     <code>CallSite bootstrap(Lookup caller, String name, MethodType type)</code></td></tr>
+ * <tr><td>0</td><td>
+ *     <code>CallSite bootstrap(Lookup caller, Object... nameAndType)</code></td></tr>
+ * <tr><td>1</td><td>
+ *     <code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object arg)</code></td></tr>
+ * <tr><td>2</td><td>
+ *     <code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object... args)</code></td></tr>
+ * <tr><td>2</td><td>
+ *     <code>CallSite bootstrap(Lookup caller, String name, MethodType type, String... args)</code></td></tr>
+ * <tr><td>2</td>
+ *     <td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, String x, int y)</code></td></tr>
  * </table>
  * The last example assumes that the extra arguments are of type
  * {@code CONSTANT_String} and {@code CONSTANT_Integer}, respectively.
--- a/src/java.base/share/classes/java/lang/module/package-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/lang/module/package-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -27,7 +27,7 @@
  * Classes to support module descriptors and creating configurations of modules
  * by means of resolution and service binding.
  *
- * <h2><a name="resolution">Resolution</a></h2>
+ * <h2><a id="resolution">Resolution</a></h2>
  *
  * <p> Resolution is the process of computing the transitive closure of a set
  * of root modules over a set of observable modules by resolving the
@@ -97,7 +97,7 @@
  * resolved so that it reads all other modules in the resulting configuration and
  * all modules in parent configurations. </p>
  *
- * <h2><a name="servicebinding">Service binding</a></h2>
+ * <h2><a id="servicebinding">Service binding</a></h2>
  *
  * <p> Service binding is the process of augmenting a graph of resolved modules
  * from the set of observable modules induced by the service-use dependence
--- a/src/java.base/share/classes/java/lang/package-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/lang/package-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -57,7 +57,7 @@
  * by the {@code throw} statement. Subclasses of {@code Throwable}
  * represent errors and exceptions.
  *
- * <a name="charenc"></a>
+ * <a id="charenc"></a>
  * <h3>Character Encodings</h3>
  *
  * The specification of the {@link java.nio.charset.Charset
--- a/src/java.base/share/classes/java/lang/reflect/Array.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/lang/reflect/Array.java	Mon Jun 05 11:00:25 2017 -0700
@@ -36,6 +36,7 @@
  * conversion would occur.
  *
  * @author Nakul Saraiya
+ * @since 1.1
  */
 public final
 class Array {
--- a/src/java.base/share/classes/java/lang/reflect/Constructor.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/lang/reflect/Constructor.java	Mon Jun 05 11:00:25 2017 -0700
@@ -59,6 +59,7 @@
  *
  * @author      Kenneth Russell
  * @author      Nakul Saraiya
+ * @since 1.1
  */
 public final class Constructor<T> extends Executable {
     private Class<T>            clazz;
--- a/src/java.base/share/classes/java/lang/reflect/Field.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/lang/reflect/Field.java	Mon Jun 05 11:00:25 2017 -0700
@@ -60,6 +60,7 @@
  *
  * @author Kenneth Russell
  * @author Nakul Saraiya
+ * @since 1.1
  */
 public final
 class Field extends AccessibleObject implements Member {
--- a/src/java.base/share/classes/java/lang/reflect/InvocationTargetException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/lang/reflect/InvocationTargetException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -38,6 +38,7 @@
  *
  * @see Method
  * @see Constructor
+ * @since 1.1
  */
 public class InvocationTargetException extends ReflectiveOperationException {
     /**
--- a/src/java.base/share/classes/java/lang/reflect/Member.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/lang/reflect/Member.java	Mon Jun 05 11:00:25 2017 -0700
@@ -35,6 +35,7 @@
  * @see Constructor
  *
  * @author Nakul Saraiya
+ * @since 1.1
  */
 public
 interface Member {
--- a/src/java.base/share/classes/java/lang/reflect/Method.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/lang/reflect/Method.java	Mon Jun 05 11:00:25 2017 -0700
@@ -63,6 +63,7 @@
  *
  * @author Kenneth Russell
  * @author Nakul Saraiya
+ * @since 1.1
  */
 public final class Method extends Executable {
     private Class<?>            clazz;
--- a/src/java.base/share/classes/java/lang/reflect/Modifier.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/lang/reflect/Modifier.java	Mon Jun 05 11:00:25 2017 -0700
@@ -43,6 +43,7 @@
  *
  * @author Nakul Saraiya
  * @author Kenneth Russell
+ * @since 1.1
  */
 public class Modifier {
 
--- a/src/java.base/share/classes/java/math/BigDecimal.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/math/BigDecimal.java	Mon Jun 05 11:00:25 2017 -0700
@@ -222,6 +222,7 @@
  * @author  Mike Cowlishaw
  * @author  Joseph D. Darcy
  * @author  Sergey V. Kuksenko
+ * @since 1.1
  */
 public class BigDecimal extends Number implements Comparable<BigDecimal> {
     /**
--- a/src/java.base/share/classes/java/net/InetAddress.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/net/InetAddress.java	Mon Jun 05 11:00:25 2017 -0700
@@ -75,7 +75,7 @@
  * <blockquote><table class="borderless">
  *   <caption style="display:none">Description of unicast and multicast address types</caption>
  *   <tbody>
- *   <tr><th valign=top><i>unicast</i></th>
+ *   <tr><th style="vertical-align:top"><i>unicast</i></th>
  *       <td>An identifier for a single interface. A packet sent to
  *         a unicast address is delivered to the interface identified by
  *         that address.
@@ -94,7 +94,7 @@
  *         IP address loops around and becomes IP input on the local
  *         host. This address is often used when testing a
  *         client.</td></tr>
- *   <tr><th valign=top><i>multicast</i></th>
+ *   <tr><th style="vertical-align:top"><i>multicast</i></th>
  *       <td>An identifier for a set of interfaces (typically belonging
  *         to different nodes). A packet sent to a multicast address is
  *         delivered to all interfaces identified by that address.</td></tr>
--- a/src/java.base/share/classes/java/net/NetPermission.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/net/NetPermission.java	Mon Jun 05 11:00:25 2017 -0700
@@ -167,6 +167,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class NetPermission extends BasicPermission {
--- a/src/java.base/share/classes/java/net/SocketOptions.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/net/SocketOptions.java	Mon Jun 05 11:00:25 2017 -0700
@@ -40,6 +40,7 @@
  * DatagramSocket and MulticastSocket.
  *
  * @author David Brown
+ * @since 1.1
  */
 
 
--- a/src/java.base/share/classes/java/net/SocketPermission.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/net/SocketPermission.java	Mon Jun 05 11:00:25 2017 -0700
@@ -142,6 +142,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  *
  * @serial exclude
  */
--- a/src/java.base/share/classes/java/net/URI.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/net/URI.java	Mon Jun 05 11:00:25 2017 -0700
@@ -253,32 +253,32 @@
  * which are taken from that specification, are used below to describe these
  * constraints:
  *
- * <blockquote><table>
+ * <blockquote><table class="borderless">
  * <caption style="display:none">Describes categories alpha,digit,alphanum,unreserved,punct,reserved,escaped,and other</caption>
  *   <tbody>
- *   <tr><th valign=top><i>alpha</i></th>
+ *   <tr><th style="vertical-align:top"><i>alpha</i></th>
  *       <td>The US-ASCII alphabetic characters,
  *        {@code 'A'}&nbsp;through&nbsp;{@code 'Z'}
  *        and {@code 'a'}&nbsp;through&nbsp;{@code 'z'}</td></tr>
- *   <tr><th valign=top><i>digit</i></th>
+ *   <tr><th style="vertical-align:top"><i>digit</i></th>
  *       <td>The US-ASCII decimal digit characters,
  *       {@code '0'}&nbsp;through&nbsp;{@code '9'}</td></tr>
- *   <tr><th valign=top><i>alphanum</i></th>
+ *   <tr><th style="vertical-align:top"><i>alphanum</i></th>
  *       <td>All <i>alpha</i> and <i>digit</i> characters</td></tr>
- *   <tr><th valign=top><i>unreserved</i>&nbsp;&nbsp;&nbsp;&nbsp;</th>
+ *   <tr><th style="vertical-align:top"><i>unreserved</i>&nbsp;&nbsp;&nbsp;&nbsp;</th>
  *       <td>All <i>alphanum</i> characters together with those in the string
  *        {@code "_-!.~'()*"}</td></tr>
- *   <tr><th valign=top><i>punct</i></th>
+ *   <tr><th style="vertical-align:top"><i>punct</i></th>
  *       <td>The characters in the string {@code ",;:$&+="}</td></tr>
- *   <tr><th valign=top><i>reserved</i></th>
+ *   <tr><th style="vertical-align:top"><i>reserved</i></th>
  *       <td>All <i>punct</i> characters together with those in the string
  *        {@code "?/[]@"}</td></tr>
- *   <tr><th valign=top><i>escaped</i></th>
+ *   <tr><th style="vertical-align:top"><i>escaped</i></th>
  *       <td>Escaped octets, that is, triplets consisting of the percent
  *           character ({@code '%'}) followed by two hexadecimal digits
  *           ({@code '0'}-{@code '9'}, {@code 'A'}-{@code 'F'}, and
  *           {@code 'a'}-{@code 'f'})</td></tr>
- *   <tr><th valign=top><i>other</i></th>
+ *   <tr><th style="vertical-align:top"><i>other</i></th>
  *       <td>The Unicode characters that are not in the US-ASCII character set,
  *           are not control characters (according to the {@link
  *           java.lang.Character#isISOControl(char) Character.isISOControl}
--- a/src/java.base/share/classes/java/net/doc-files/net-properties.html	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/net/doc-files/net-properties.html	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,6 @@
+<!DOCTYPE HTML>
 <!--
- Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 1998, 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
@@ -22,15 +23,14 @@
  or visit www.oracle.com if you need additional information or have any
  questions.
 -->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <HTML>
 <HEAD>
 	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
 	<TITLE>Networking Properties</TITLE>
 </HEAD>
 <BODY LANG="en-US" DIR="LTR">
-<H1 ALIGN=CENTER>Networking Properties</H1>
-<P ALIGN=LEFT>There are a few standard system properties used to
+<H1 style="text-align:center">Networking Properties</H1>
+<P>There are a few standard system properties used to
 alter the mechanisms and behavior of the various classes of the
 java.net package. Some are checked only once at startup of the VM,
 and therefore are best set using the -D option of the java command,
@@ -39,7 +39,7 @@
 The purpose of this document is to list
 and detail all of these properties.</P>
 <P>If there is no special note, a property value is checked every time it is used.</P>
-<a name="Ipv4IPv6"></a>
+<a id="Ipv4IPv6"></a>
 <H2>IPv4 / IPv6</H2>
 <UL>
 	<LI><P><B>java.net.preferIPv4Stack</B> (default: false)<BR>
@@ -62,7 +62,7 @@
     returned by the operating system.</P>
 </UL>
 <P>Both of these properties are checked only once, at startup.</P>
-<a name="Proxies"></a>
+<a id="Proxies"></a>
 <H2>Proxies</H2>
 <P>A proxy server allows indirect connection to network services and
 is used mainly for security (to get through firewalls) and
@@ -155,7 +155,7 @@
 	globally through their user interface). Note that this property is
 	checked only once at startup.</P>
 </UL>
-<a name="MiscHTTP"></a>
+<a id="MiscHTTP"></a>
 <H2>Misc HTTP properties</H2>
 <UL>
 	<LI><P><B>http.agent</B> (default: &ldquo;Java/&lt;version&gt;&rdquo;)<BR>
@@ -214,7 +214,7 @@
 	</OL>
 </UL>
 <P>All these properties are checked only once at startup.</P>
-<a name="AddressCache"></a>
+<a id="AddressCache"></a>
 <H2>Address Cache</H2>
 <P>The java.net package, when doing name resolution, uses an address
 cache for both security and performance reasons. Any address
--- a/src/java.base/share/classes/java/nio/channels/package-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/nio/channels/package-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -28,33 +28,46 @@
  * performing I/O operations, such as files and sockets; defines selectors, for
  * multiplexed, non-blocking I/O operations.
  *
- * <a name="channels"></a>
+ * <a id="channels"></a>
  *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Lists channels and their descriptions">
- * <tr><th align="left">Channels</th><th align="left">Description</th></tr>
- * <tr><td valign=top><i>{@link java.nio.channels.Channel}</i></td>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">Lists channels and their descriptions</caption>
+ * <tr><th style="text-align:left">Channels</th>
+ *     <th style="text-align:left">Description</th></tr>
+ * <tr><td style="vertical-align:top"><i>{@link java.nio.channels.Channel}</i></td>
  *     <td>A nexus for I/O operations</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.channels.ReadableByteChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.channels.ReadableByteChannel}</i></td>
  *     <td>Can read into a buffer</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.ScatteringByteChannel}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.ScatteringByteChannel}&nbsp;&nbsp;</i></td>
  *     <td>Can read into a sequence of&nbsp;buffers</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.channels.WritableByteChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.channels.WritableByteChannel}</i></td>
  *     <td>Can write from a buffer</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.GatheringByteChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.GatheringByteChannel}</i></td>
  *     <td>Can write from a sequence of&nbsp;buffers</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.channels.ByteChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.channels.ByteChannel}</i></td>
  *     <td>Can read/write to/from a&nbsp;buffer</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.SeekableByteChannel}</i></td>
- *     <td>A {@code ByteChannel} connected to an entity that contains a variable-length sequence of bytes</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.channels.AsynchronousChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.SeekableByteChannel}</i></td>
+ *     <td>A {@code ByteChannel} connected to an entity that contains a variable-length
+ *         sequence of bytes</td></tr>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.channels.AsynchronousChannel}</i></td>
  *     <td>Supports asynchronous I/O operations.</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.AsynchronousByteChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.AsynchronousByteChannel}</i></td>
  *     <td>Can read and write bytes asynchronously</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.channels.NetworkChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.channels.NetworkChannel}</i></td>
  *     <td>A channel to a network socket</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.MulticastChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.MulticastChannel}</i></td>
  *     <td>Can join Internet Protocol (IP) multicast groups</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.Channels}</td>
+ * <tr><td style="vertical-align:top">{@link java.nio.channels.Channels}</td>
  *     <td>Utility methods for channel/stream interoperation</td></tr>
  * </table></blockquote>
  *
@@ -109,13 +122,19 @@
  * be constructed that uses a given charset to encode characters into bytes and
  * write them to a given writable byte channel.
  *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Lists file channels and their descriptions">
- * <tr><th align="left">File channels</th><th align="left">Description</th></tr>
- * <tr><td valign=top>{@link java.nio.channels.FileChannel}</td>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">
+ *         Lists file channels and their descriptions</caption>
+ * <tr><th style="text-align:left">File channels</th>
+ *     <th style="text-align:left">Description</th></tr>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.FileChannel}</td>
  *     <td>Reads, writes, maps, and manipulates files</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.FileLock}</td>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.FileLock}</td>
  *     <td>A lock on a (region of a) file</td></tr>
- * <tr><td valign=top>{@link java.nio.MappedByteBuffer}&nbsp;&nbsp;</td>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.MappedByteBuffer}&nbsp;&nbsp;</td>
  *     <td>A direct byte buffer mapped to a region of a&nbsp;file</td></tr>
  * </table></blockquote>
  *
@@ -136,27 +155,35 @@
  * file channel connected to the same underlying file as the {@link java.io}
  * class.
  *
- * <a name="multiplex"></a>
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Lists multiplexed, non-blocking channels and their descriptions">
- * <tr><th align="left">Multiplexed, non-blocking I/O</th><th align="left"><p>Description</th></tr>
- * <tr><td valign=top>{@link java.nio.channels.SelectableChannel}</td>
+ * <a id="multiplex"></a>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">
+ *         Lists multiplexed, non-blocking channels and their descriptions</caption>
+ * <tr><th style="text-align:left">Multiplexed, non-blocking I/O</th>
+ *     <th style="text-align:left">Description</th></tr>
+ * <tr><td style="vertical-align:top">{@link java.nio.channels.SelectableChannel}</td>
  *     <td>A channel that can be multiplexed</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.channels.DatagramChannel}</td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;{@link java.nio.channels.DatagramChannel}</td>
  *     <td>A channel to a datagram-oriented socket</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.channels.Pipe.SinkChannel}</td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;{@link java.nio.channels.Pipe.SinkChannel}</td>
  *     <td>The write end of a pipe</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.channels.Pipe.SourceChannel}</td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;{@link java.nio.channels.Pipe.SourceChannel}</td>
  *     <td>The read end of a pipe</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.channels.ServerSocketChannel}&nbsp;&nbsp;</td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;{@link java.nio.channels.ServerSocketChannel}&nbsp;&nbsp;</td>
  *     <td>A channel to a stream-oriented listening socket</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.channels.SocketChannel}</td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;{@link java.nio.channels.SocketChannel}</td>
  *     <td>A channel for a stream-oriented connecting socket</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.Selector}</td>
+ * <tr><td style="vertical-align:top">{@link java.nio.channels.Selector}</td>
  *     <td>A multiplexor of selectable channels</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.SelectionKey}</td>
+ * <tr><td style="vertical-align:top">{@link java.nio.channels.SelectionKey}</td>
  *     <td>A token representing the registration <br> of a channel
  *     with&nbsp;a&nbsp;selector</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.Pipe}</td>
+ * <tr><td style="vertical-align:top">{@link java.nio.channels.Pipe}</td>
  *     <td>Two channels that form a unidirectional&nbsp;pipe</td></tr>
  * </table></blockquote>
  *
@@ -222,19 +249,27 @@
  * directly; custom channel classes should extend the appropriate {@link
  * java.nio.channels.SelectableChannel} subclasses defined in this package.
  *
- * <a name="async"></a>
+ * <a id="async"></a>
  *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Lists asynchronous channels and their descriptions">
- * <tr><th align="left">Asynchronous I/O</th><th align="left">Description</th></tr>
- * <tr><td valign=top>{@link java.nio.channels.AsynchronousFileChannel}</td>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">
+ *         Lists asynchronous channels and their descriptions</caption>
+ * <tr><th style="text-align:left">
+ *     Asynchronous I/O</th><th style="text-align:left">Description</th></tr>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.AsynchronousFileChannel}</td>
  *     <td>An asynchronous channel for reading, writing, and manipulating a file</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.AsynchronousSocketChannel}</td>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.AsynchronousSocketChannel}</td>
  *     <td>An asynchronous channel to a stream-oriented connecting socket</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.AsynchronousServerSocketChannel}&nbsp;&nbsp;</td>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.AsynchronousServerSocketChannel}&nbsp;&nbsp;</td>
  *     <td>An asynchronous channel to a stream-oriented listening socket</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.CompletionHandler}</td>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.CompletionHandler}</td>
  *     <td>A handler for consuming the result of an asynchronous operation</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.AsynchronousChannelGroup}</td>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.AsynchronousChannelGroup}</td>
  *     <td>A grouping of asynchronous channels for the purpose of resource sharing</td></tr>
  * </table></blockquote>
  *
@@ -277,7 +312,6 @@
  * so that sophisticated users can take advantage of operating-system-specific
  * asynchronous I/O mechanisms when very high performance is required.
  *
- * <hr width="80%">
  * <p> Unless otherwise noted, passing a {@code null} argument to a constructor
  * or method in any class or interface in this package will cause a {@link
  * java.lang.NullPointerException NullPointerException} to be thrown.
--- a/src/java.base/share/classes/java/nio/charset/package-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/nio/charset/package-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -27,17 +27,19 @@
  * Defines charsets, decoders, and encoders, for translating between
  * bytes and Unicode characters.
  *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Summary of charsets, decoders, and encoders in this package">
- *  <tr><th align="left">Class name</th><th align="left">Description</th></tr>
- *   <tr><td valign=top>{@link java.nio.charset.Charset}</td>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">Summary of charsets, decoders, and encoders in this package</caption>
+ *  <tr><th style="text-align:left">Class name</th>
+ *      <th style="text-align:left"><th>DescriptiPath
+ *   <tr><td style="vertical-align:top">{@link java.nio.charset.Charset}</td>
  *       <td>A named mapping between characters<br>and bytes</td></tr>
- *   <tr><td valign=top>{@link java.nio.charset.CharsetDecoder}</td>
+ *   <tr><td style="vertical-align:top">{@link java.nio.charset.CharsetDecoder}</td>
  *       <td>Decodes bytes into characters</td></tr>
- *   <tr><td valign=top>{@link java.nio.charset.CharsetEncoder}&nbsp;&nbsp;</td>
+ *   <tr><td style="vertical-align:top">{@link java.nio.charset.CharsetEncoder}</td>
  *       <td>Encodes characters into bytes</td></tr>
- *   <tr><td valign=top>{@link java.nio.charset.CoderResult}&nbsp;&nbsp;</td>
+ *   <tr><td style="vertical-align:top">{@link java.nio.charset.CoderResult}</td>
  *       <td>Describes coder results</td></tr>
- *   <tr><td valign=top>{@link java.nio.charset.CodingErrorAction}&nbsp;&nbsp;</td>
+ *   <tr><td style="vertical-align:top">{@link java.nio.charset.CodingErrorAction}</td>
  *       <td>Describes actions to take when<br>coding errors are detected</td></tr>
  *
  * </table></blockquote>
--- a/src/java.base/share/classes/java/nio/file/attribute/package-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/nio/file/attribute/package-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -26,25 +26,41 @@
 /**
  * Interfaces and classes providing access to file and file system attributes.
  *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Attribute views">
- * <tr><th align="left">Attribute views</th><th align="left">Description</th></tr>
- * <tr><td valign=top><i>{@link java.nio.file.attribute.AttributeView}</i></td>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">Attribute views</caption>
+ * <tr><th style="text-align:left">Attribute views</th>
+ *     <th style="text-align:left">Description</th></tr>
+ * <tr><td><i>{@link java.nio.file.attribute.AttributeView}</i></td>
  *     <td>Can read or update non-opaque values associated with objects in a file system</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.file.attribute.FileAttributeView}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.file.attribute.FileAttributeView}</i></td>
  *     <td>Can read or update file attributes</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.BasicFileAttributeView}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;
+ *     <i>{@link java.nio.file.attribute.BasicFileAttributeView}&nbsp;&nbsp;</i></td>
  *     <td>Can read or update a basic set of file attributes</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.PosixFileAttributeView}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ *     <i>{@link java.nio.file.attribute.PosixFileAttributeView}&nbsp;&nbsp;</i></td>
  *     <td>Can read or update POSIX defined file attributes</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.DosFileAttributeView}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ *     <i>{@link java.nio.file.attribute.DosFileAttributeView}&nbsp;&nbsp;</i></td>
  *     <td>Can read or update FAT file attributes</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.FileOwnerAttributeView}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;
+ *     <i>{@link java.nio.file.attribute.FileOwnerAttributeView}&nbsp;&nbsp;</i></td>
  *     <td>Can read or update the owner of a file</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.AclFileAttributeView}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ *     <i>{@link java.nio.file.attribute.AclFileAttributeView}&nbsp;&nbsp;</i></td>
  *     <td>Can read or update Access Control Lists</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.UserDefinedFileAttributeView}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;
+ *     <i>{@link java.nio.file.attribute.UserDefinedFileAttributeView}&nbsp;&nbsp;</i></td>
  *     <td>Can read or update user-defined file attributes</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.file.attribute.FileStoreAttributeView}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.file.attribute.FileStoreAttributeView}</i></td>
  *     <td>Can read or update file system attributes</td></tr>
  * </table></blockquote>
  *
--- a/src/java.base/share/classes/java/nio/file/package-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/nio/file/package-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 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
@@ -33,7 +33,7 @@
  * package is used by service provider implementors wishing to extend the
  * platform default provider, or to construct other provider implementations. </p>
  *
- * <h3><a name="links">Symbolic Links</a></h3>
+ * <h3><a id="links">Symbolic Links</a></h3>
  * <p> Many operating systems and file systems support for <em>symbolic links</em>.
  * A symbolic link is a special file that serves as a reference to another file.
  * For the most part, symbolic links are transparent to applications and
@@ -45,7 +45,7 @@
  * that are semantically close but support for these other types of links is
  * not included in this package. </p>
  *
- * <h3><a name="interop">Interoperability</a></h3>
+ * <h3><a id="interop">Interoperability</a></h3>
  * <p> The {@link java.io.File} class defines the {@link java.io.File#toPath
  * toPath} method to construct a {@link java.nio.file.Path} by converting
  * the abstract path represented by the {@code java.io.File} object. The resulting
@@ -65,7 +65,7 @@
  * or on some other machine.  The exact nature of any such inconsistencies are
  * system-dependent and are therefore unspecified. </p>
  *
- * <h3><a name="integrity">Synchronized I/O File Integrity</a></h3>
+ * <h3><a id="integrity">Synchronized I/O File Integrity</a></h3>
  * <p> The {@link java.nio.file.StandardOpenOption#SYNC SYNC} and {@link
  * java.nio.file.StandardOpenOption#DSYNC DSYNC} options are used when opening a file
  * to require that updates to the file are written synchronously to the underlying
--- a/src/java.base/share/classes/java/nio/package-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/nio/package-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -60,30 +60,33 @@
  * the contents of which can be used to extend the platform's default
  * implementations or to construct alternative implementations.
  *
- * <a name="buffers"> </a>
+ * <a id="buffers"> </a>
  *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Description of the various buffers">
- *   <tr><th align="left">Buffers</th><th align="left">Description</th></tr>
- *   <tr><td valign=top>{@link java.nio.Buffer}</td>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">Description of the various buffers</caption>
+ *   <tr><th style="text-align:left">Buffers</th>
+ *       <th style="text-align:left">Description</th></tr>
+ *   <tr><td style="vertical-align:top">{@link java.nio.Buffer}</td>
  *       <td>Position, limit, and capacity;
  *           <br>clear, flip, rewind, and mark/reset</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.ByteBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.ByteBuffer}</td>
  *       <td>Get/put, compact, views; allocate,&nbsp;wrap</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;{@link java.nio.MappedByteBuffer}&nbsp;&nbsp;</td>
+ *   <tr><td style="vertical-align:top">
+ *       &nbsp;&nbsp;&nbsp;&nbsp;{@link java.nio.MappedByteBuffer}&nbsp;&nbsp;</td>
  *       <td>A byte buffer mapped to a file</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.CharBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.CharBuffer}</td>
  *       <td>Get/put, compact; allocate,&nbsp;wrap</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.DoubleBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.DoubleBuffer}</td>
  *       <td>&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;'</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.FloatBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.FloatBuffer}</td>
  *       <td>&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;'</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.IntBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.IntBuffer}</td>
  *       <td>&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;'</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.LongBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.LongBuffer}</td>
  *       <td>&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;'</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.ShortBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.ShortBuffer}</td>
  *       <td>&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;'</td></tr>
- *   <tr><td valign=top>{@link java.nio.ByteOrder}</td>
+ *   <tr><td style="vertical-align:top">{@link java.nio.ByteOrder}</td>
  *       <td>Typesafe enumeration for&nbsp;byte&nbsp;orders</td></tr>
  * </table></blockquote>
  *
--- a/src/java.base/share/classes/java/security/AccessControlContext.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/AccessControlContext.java	Mon Jun 05 11:00:25 2017 -0700
@@ -74,6 +74,7 @@
  * @see AccessController
  *
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class AccessControlContext {
--- a/src/java.base/share/classes/java/security/AccessControlException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/AccessControlException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -38,6 +38,7 @@
  *
  * @author Li Gong
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public class AccessControlException extends SecurityException {
--- a/src/java.base/share/classes/java/security/AccessController.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/AccessController.java	Mon Jun 05 11:00:25 2017 -0700
@@ -259,6 +259,7 @@
  *
  * @author Li Gong
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class AccessController {
--- a/src/java.base/share/classes/java/security/AlgorithmParameterGenerator.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/AlgorithmParameterGenerator.java	Mon Jun 05 11:00:25 2017 -0700
@@ -61,11 +61,17 @@
  * </ul>
  *
  * <P>In case the client does not explicitly initialize the
- * AlgorithmParameterGenerator
- * (via a call to an {@code init} method), each provider must supply (and
- * document) a default initialization. For example, the Sun provider uses a
- * default modulus prime size of 1024 bits for the generation of DSA
- * parameters.
+ * AlgorithmParameterGenerator (via a call to an {@code init} method),
+ * each provider must supply (and document) a default initialization.
+ * See the Keysize Restriction sections of the
+ * <a href="{@docRoot}/../technotes/guides/security/SunProviders.html">
+ * JDK Providers</a>
+ * document for information on the AlgorithmParameterGenerator defaults
+ * used by JDK providers.
+ * However, note that defaults may vary across different providers.
+ * Additionally, the default value for a provider may change in a future
+ * version. Therefore, it is recommended to explicitly initialize the
+ * AlgorithmParameterGenerator instead of relying on provider-specific defaults.
  *
  * <p> Every implementation of the Java platform is required to support the
  * following standard {@code AlgorithmParameterGenerator} algorithms and
--- a/src/java.base/share/classes/java/security/AlgorithmParameterGeneratorSpi.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/AlgorithmParameterGeneratorSpi.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -39,8 +39,15 @@
  * <p> In case the client does not explicitly initialize the
  * AlgorithmParameterGenerator (via a call to an {@code engineInit}
  * method), each provider must supply (and document) a default initialization.
- * For example, the Sun provider uses a default modulus prime size of 1024
- * bits for the generation of DSA parameters.
+ * See the Keysize Restriction sections of the
+ * <a href="{@docRoot}/../technotes/guides/security/SunProviders.html">
+ * JDK Providers</a>
+ * document for information on the AlgorithmParameterGenerator defaults
+ * used by JDK providers.
+ * However, note that defaults may vary across different providers.
+ * Additionally, the default value for a provider may change in a future
+ * version. Therefore, it is recommended to explicitly initialize the
+ * AlgorithmParameterGenerator instead of relying on provider-specific defaults.
  *
  * @author Jan Luehe
  *
--- a/src/java.base/share/classes/java/security/AllPermission.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/AllPermission.java	Mon Jun 05 11:00:25 2017 -0700
@@ -51,6 +51,7 @@
  *
  *
  * @author Roland Schemers
+ * @since 1.2
  *
  * @serial exclude
  */
--- a/src/java.base/share/classes/java/security/BasicPermission.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/BasicPermission.java	Mon Jun 05 11:00:25 2017 -0700
@@ -62,6 +62,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public abstract class BasicPermission extends Permission
--- a/src/java.base/share/classes/java/security/Certificate.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/Certificate.java	Mon Jun 05 11:00:25 2017 -0700
@@ -56,6 +56,7 @@
  * the certificate and satisfy itself of its validity.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  * @deprecated A new certificate handling package is created in the Java platform.
  *             This Certificate interface is entirely deprecated and
  *             is here to allow for a smooth transition to the new
--- a/src/java.base/share/classes/java/security/CodeSource.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/CodeSource.java	Mon Jun 05 11:00:25 2017 -0700
@@ -44,6 +44,7 @@
  *
  * @author Li Gong
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public class CodeSource implements java.io.Serializable {
--- a/src/java.base/share/classes/java/security/DigestException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/DigestException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -29,6 +29,7 @@
  * This is the generic Message Digest exception.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 public class DigestException extends GeneralSecurityException {
 
--- a/src/java.base/share/classes/java/security/DigestInputStream.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/DigestInputStream.java	Mon Jun 05 11:00:25 2017 -0700
@@ -59,6 +59,7 @@
  * @see DigestOutputStream
  *
  * @author Benjamin Renaud
+ * @since 1.2
  */
 
 public class DigestInputStream extends FilterInputStream {
--- a/src/java.base/share/classes/java/security/DigestOutputStream.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/DigestOutputStream.java	Mon Jun 05 11:00:25 2017 -0700
@@ -51,6 +51,7 @@
  * @see DigestInputStream
  *
  * @author Benjamin Renaud
+ * @since 1.2
  */
 public class DigestOutputStream extends FilterOutputStream {
 
--- a/src/java.base/share/classes/java/security/GeneralSecurityException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/GeneralSecurityException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * security-related exception classes that extend from it.
  *
  * @author Jan Luehe
+ * @since 1.2
  */
 
 public class GeneralSecurityException extends Exception {
--- a/src/java.base/share/classes/java/security/Guard.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/Guard.java	Mon Jun 05 11:00:25 2017 -0700
@@ -38,6 +38,7 @@
  *
  * @author Roland Schemers
  * @author Li Gong
+ * @since 1.2
  */
 
 public interface Guard {
--- a/src/java.base/share/classes/java/security/GuardedObject.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/GuardedObject.java	Mon Jun 05 11:00:25 2017 -0700
@@ -44,6 +44,7 @@
  *
  * @author Roland Schemers
  * @author Li Gong
+ * @since 1.2
  */
 
 public class GuardedObject implements java.io.Serializable {
--- a/src/java.base/share/classes/java/security/Identity.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/Identity.java	Mon Jun 05 11:00:25 2017 -0700
@@ -51,6 +51,7 @@
  * @see Principal
  *
  * @author Benjamin Renaud
+ * @since 1.1
  * @deprecated This class is no longer used. Its functionality has been
  * replaced by {@code java.security.KeyStore}, the
  * {@code java.security.cert} package, and
--- a/src/java.base/share/classes/java/security/IdentityScope.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/IdentityScope.java	Mon Jun 05 11:00:25 2017 -0700
@@ -55,6 +55,7 @@
  * @see Key
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  * @deprecated This class is no longer used. Its functionality has been
  * replaced by {@code java.security.KeyStore}, the
--- a/src/java.base/share/classes/java/security/InvalidKeyException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/InvalidKeyException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * length, uninitialized, etc).
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class InvalidKeyException extends KeyException {
--- a/src/java.base/share/classes/java/security/InvalidParameterException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/InvalidParameterException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * to a method.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class InvalidParameterException extends IllegalArgumentException {
--- a/src/java.base/share/classes/java/security/Key.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/Key.java	Mon Jun 05 11:00:25 2017 -0700
@@ -97,6 +97,7 @@
  * @see Signer
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public interface Key extends java.io.Serializable {
--- a/src/java.base/share/classes/java/security/KeyException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/KeyException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -33,6 +33,7 @@
  * @see KeyManagementException
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class KeyException extends GeneralSecurityException {
--- a/src/java.base/share/classes/java/security/KeyManagementException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/KeyManagementException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -38,6 +38,7 @@
  * </ul>
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  * @see Key
  * @see KeyException
--- a/src/java.base/share/classes/java/security/KeyPair.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/KeyPair.java	Mon Jun 05 11:00:25 2017 -0700
@@ -36,6 +36,7 @@
  * @see PrivateKey
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public final class KeyPair implements java.io.Serializable {
--- a/src/java.base/share/classes/java/security/KeyPairGenerator.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/KeyPairGenerator.java	Mon Jun 05 11:00:25 2017 -0700
@@ -95,8 +95,15 @@
  * <p>In case the client does not explicitly initialize the KeyPairGenerator
  * (via a call to an {@code initialize} method), each provider must
  * supply (and document) a default initialization.
- * For example, the <i>Sun</i> provider uses a default modulus size (keysize)
- * of 1024 bits for DSA key pairs.
+ * See the Keysize Restriction sections of the
+ * <a href="{@docRoot}/../technotes/guides/security/SunProviders.html">
+ * JDK Providers</a>
+ * document for information on the KeyPairGenerator defaults used by
+ * JDK providers.
+ * However, note that defaults may vary across different providers.
+ * Additionally, the default value for a provider may change in a future
+ * version. Therefore, it is recommended to explicitly initialize the
+ * KeyPairGenerator instead of relying on provider-specific defaults.
  *
  * <p>Note that this class is abstract and extends from
  * {@code KeyPairGeneratorSpi} for historical reasons.
@@ -121,6 +128,7 @@
  * other algorithms are supported.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  * @see java.security.spec.AlgorithmParameterSpec
  */
--- a/src/java.base/share/classes/java/security/KeyPairGeneratorSpi.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/KeyPairGeneratorSpi.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -39,10 +39,18 @@
  * <p> In case the client does not explicitly initialize the KeyPairGenerator
  * (via a call to an {@code initialize} method), each provider must
  * supply (and document) a default initialization.
- * For example, the <i>Sun</i> provider uses a default modulus size (keysize)
- * of 1024 bits.
+ * See the Keysize Restriction sections of the
+ * <a href="{@docRoot}/../technotes/guides/security/SunProviders.html">
+ * JDK Providers</a>
+ * document for information on the KeyPairGenerator defaults used by
+ * JDK providers.
+ * However, note that defaults may vary across different providers.
+ * Additionally, the default value for a provider may change in a future
+ * version. Therefore, it is recommended to explicitly initialize the
+ * KeyPairGenerator instead of relying on provider-specific defaults.
  *
  * @author Benjamin Renaud
+ * @since 1.2
  *
  *
  * @see KeyPairGenerator
--- a/src/java.base/share/classes/java/security/MessageDigest.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/MessageDigest.java	Mon Jun 05 11:00:25 2017 -0700
@@ -96,6 +96,7 @@
  * other algorithms are supported.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  * @see DigestInputStream
  * @see DigestOutputStream
--- a/src/java.base/share/classes/java/security/MessageDigestSpi.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/MessageDigestSpi.java	Mon Jun 05 11:00:25 2017 -0700
@@ -43,6 +43,7 @@
  * <p> Implementations are free to implement the Cloneable interface.
  *
  * @author Benjamin Renaud
+ * @since 1.2
  *
  *
  * @see MessageDigest
--- a/src/java.base/share/classes/java/security/NoSuchAlgorithmException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/NoSuchAlgorithmException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -30,6 +30,7 @@
  * requested but is not available in the environment.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class NoSuchAlgorithmException extends GeneralSecurityException {
--- a/src/java.base/share/classes/java/security/NoSuchProviderException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/NoSuchProviderException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -30,6 +30,7 @@
  * requested but is not available in the environment.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class NoSuchProviderException extends GeneralSecurityException {
--- a/src/java.base/share/classes/java/security/Permission.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/Permission.java	Mon Jun 05 11:00:25 2017 -0700
@@ -60,6 +60,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public abstract class Permission implements Guard, java.io.Serializable {
--- a/src/java.base/share/classes/java/security/PermissionCollection.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/PermissionCollection.java	Mon Jun 05 11:00:25 2017 -0700
@@ -91,6 +91,7 @@
  *
  *
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public abstract class PermissionCollection implements java.io.Serializable {
--- a/src/java.base/share/classes/java/security/Permissions.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/Permissions.java	Mon Jun 05 11:00:25 2017 -0700
@@ -75,6 +75,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  *
  * @serial exclude
  */
--- a/src/java.base/share/classes/java/security/Policy.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/Policy.java	Mon Jun 05 11:00:25 2017 -0700
@@ -78,6 +78,7 @@
  *
  * @author Roland Schemers
  * @author Gary Ellison
+ * @since 1.2
  * @see java.security.Provider
  * @see java.security.ProtectionDomain
  * @see java.security.Permission
--- a/src/java.base/share/classes/java/security/Principal.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/Principal.java	Mon Jun 05 11:00:25 2017 -0700
@@ -35,6 +35,7 @@
  * @see java.security.cert.X509Certificate
  *
  * @author Li Gong
+ * @since 1.1
  */
 public interface Principal {
 
--- a/src/java.base/share/classes/java/security/PrivateKey.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/PrivateKey.java	Mon Jun 05 11:00:25 2017 -0700
@@ -54,6 +54,7 @@
  *
  * @author Benjamin Renaud
  * @author Josh Bloch
+ * @since 1.1
  */
 
 public interface PrivateKey extends Key, javax.security.auth.Destroyable {
--- a/src/java.base/share/classes/java/security/PrivilegedAction.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/PrivilegedAction.java	Mon Jun 05 11:00:25 2017 -0700
@@ -34,6 +34,7 @@
  * throw checked exceptions must use {@code PrivilegedExceptionAction}
  * instead.
  *
+ * @since 1.2
  * @see AccessController
  * @see AccessController#doPrivileged(PrivilegedAction)
  * @see PrivilegedExceptionAction
--- a/src/java.base/share/classes/java/security/PrivilegedActionException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/PrivilegedActionException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -43,6 +43,7 @@
  * <i>cause</i>, and may be accessed via the {@link Throwable#getCause()}
  * method, as well as the aforementioned "legacy method."
  *
+ * @since 1.2
  * @see PrivilegedExceptionAction
  * @see AccessController#doPrivileged(PrivilegedExceptionAction)
  * @see AccessController#doPrivileged(PrivilegedExceptionAction,AccessControlContext)
--- a/src/java.base/share/classes/java/security/PrivilegedExceptionAction.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/PrivilegedExceptionAction.java	Mon Jun 05 11:00:25 2017 -0700
@@ -35,6 +35,7 @@
  * computations that do not throw
  * checked exceptions should use {@code PrivilegedAction} instead.
  *
+ * @since 1.2
  * @see AccessController
  * @see AccessController#doPrivileged(PrivilegedExceptionAction)
  * @see AccessController#doPrivileged(PrivilegedExceptionAction,
--- a/src/java.base/share/classes/java/security/ProtectionDomain.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/ProtectionDomain.java	Mon Jun 05 11:00:25 2017 -0700
@@ -59,6 +59,7 @@
  * @author Li Gong
  * @author Roland Schemers
  * @author Gary Ellison
+ * @since 1.2
  */
 
 public class ProtectionDomain {
--- a/src/java.base/share/classes/java/security/Provider.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/Provider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -102,6 +102,7 @@
  *
  * @author Benjamin Renaud
  * @author Andreas Sterbenz
+ * @since 1.1
  */
 public abstract class Provider extends Properties {
 
--- a/src/java.base/share/classes/java/security/ProviderException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/ProviderException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -32,6 +32,7 @@
  * throw specialized, provider-specific runtime errors.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 public class ProviderException extends RuntimeException {
 
--- a/src/java.base/share/classes/java/security/PublicKey.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/PublicKey.java	Mon Jun 05 11:00:25 2017 -0700
@@ -34,6 +34,7 @@
  * See, for example, the DSAPublicKey interface in
  * {@code java.security.interfaces}.
  *
+ * @since 1.1
  * @see Key
  * @see PrivateKey
  * @see Certificate
--- a/src/java.base/share/classes/java/security/SecureClassLoader.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/SecureClassLoader.java	Mon Jun 05 11:00:25 2017 -0700
@@ -39,6 +39,7 @@
  *
  * @author  Li Gong
  * @author  Roland Schemers
+ * @since 1.2
  */
 public class SecureClassLoader extends ClassLoader {
     /*
--- a/src/java.base/share/classes/java/security/SecureRandom.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/SecureRandom.java	Mon Jun 05 11:00:25 2017 -0700
@@ -143,6 +143,7 @@
  *
  * @author Benjamin Renaud
  * @author Josh Bloch
+ * @since 1.1
  */
 
 public class SecureRandom extends java.util.Random {
--- a/src/java.base/share/classes/java/security/Security.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/Security.java	Mon Jun 05 11:00:25 2017 -0700
@@ -45,6 +45,7 @@
  * {@code conf/security/java.security} in the Java installation directory.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public final class Security {
--- a/src/java.base/share/classes/java/security/SecurityPermission.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/SecurityPermission.java	Mon Jun 05 11:00:25 2017 -0700
@@ -333,6 +333,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class SecurityPermission extends BasicPermission {
--- a/src/java.base/share/classes/java/security/Signature.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/Signature.java	Mon Jun 05 11:00:25 2017 -0700
@@ -113,6 +113,7 @@
  * other algorithms are supported.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  */
 
--- a/src/java.base/share/classes/java/security/SignatureException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/SignatureException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -29,6 +29,7 @@
  * This is the generic Signature exception.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class SignatureException extends GeneralSecurityException {
--- a/src/java.base/share/classes/java/security/SignatureSpi.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/SignatureSpi.java	Mon Jun 05 11:00:25 2017 -0700
@@ -44,6 +44,7 @@
  * of a particular signature algorithm.
  *
  * @author Benjamin Renaud
+ * @since 1.2
  *
  *
  * @see Signature
--- a/src/java.base/share/classes/java/security/SignedObject.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/SignedObject.java	Mon Jun 05 11:00:25 2017 -0700
@@ -114,6 +114,7 @@
  * @see Signature
  *
  * @author Li Gong
+ * @since 1.2
  */
 
 public final class SignedObject implements Serializable {
--- a/src/java.base/share/classes/java/security/Signer.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/Signer.java	Mon Jun 05 11:00:25 2017 -0700
@@ -38,6 +38,7 @@
  * @see Identity
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  * @deprecated This class is no longer used. Its functionality has been
  * replaced by {@code java.security.KeyStore}, the
--- a/src/java.base/share/classes/java/security/UnresolvedPermission.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/UnresolvedPermission.java	Mon Jun 05 11:00:25 2017 -0700
@@ -96,6 +96,7 @@
  *
  *
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class UnresolvedPermission extends Permission
--- a/src/java.base/share/classes/java/security/UnresolvedPermissionCollection.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/UnresolvedPermissionCollection.java	Mon Jun 05 11:00:25 2017 -0700
@@ -43,6 +43,7 @@
  *
  *
  * @author Roland Schemers
+ * @since 1.2
  *
  * @serial include
  */
--- a/src/java.base/share/classes/java/security/acl/Acl.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/acl/Acl.java	Mon Jun 05 11:00:25 2017 -0700
@@ -82,6 +82,7 @@
  * @see java.security.acl.Acl#getPermissions
  *
  * @author Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/src/java.base/share/classes/java/security/acl/AclEntry.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/acl/AclEntry.java	Mon Jun 05 11:00:25 2017 -0700
@@ -50,6 +50,7 @@
  * @see java.security.acl.Acl
  *
  * @author      Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/src/java.base/share/classes/java/security/acl/AclNotFoundException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/acl/AclNotFoundException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -30,6 +30,7 @@
  * non-existent ACL (Access Control List).
  *
  * @author      Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/src/java.base/share/classes/java/security/acl/Group.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/acl/Group.java	Mon Jun 05 11:00:25 2017 -0700
@@ -39,6 +39,7 @@
  * Principal or Group.
  *
  * @author      Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/src/java.base/share/classes/java/security/acl/LastOwnerException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/acl/LastOwnerException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -32,6 +32,7 @@
  * @see java.security.acl.Owner#deleteOwner
  *
  * @author Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/src/java.base/share/classes/java/security/acl/NotOwnerException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/acl/NotOwnerException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * the object, but the Principal attempting the modification is not an owner.
  *
  * @author      Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/src/java.base/share/classes/java/security/acl/Owner.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/acl/Owner.java	Mon Jun 05 11:00:25 2017 -0700
@@ -34,6 +34,7 @@
  * interface.) The initial owner Principal should be specified as an
  * argument to the constructor of the class implementing this interface.
  *
+ * @since 1.1
  * @see java.security.acl.Acl
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
--- a/src/java.base/share/classes/java/security/acl/Permission.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/acl/Permission.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * a particular type of access to a resource.
  *
  * @author Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/src/java.base/share/classes/java/security/cert/CRLException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/cert/CRLException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * CRL (Certificate Revocation List) Exception.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CRLException extends GeneralSecurityException {
 
--- a/src/java.base/share/classes/java/security/cert/Certificate.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/cert/Certificate.java	Mon Jun 05 11:00:25 2017 -0700
@@ -57,6 +57,7 @@
  * @see CertificateFactory
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 
 public abstract class Certificate implements java.io.Serializable {
--- a/src/java.base/share/classes/java/security/cert/CertificateEncodingException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/cert/CertificateEncodingException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -30,6 +30,7 @@
  * occurs while attempting to encode a certificate.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CertificateEncodingException extends CertificateException {
 
--- a/src/java.base/share/classes/java/security/cert/CertificateException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/cert/CertificateException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * This exception indicates one of a variety of certificate problems.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  * @see Certificate
  */
 public class CertificateException extends GeneralSecurityException {
--- a/src/java.base/share/classes/java/security/cert/CertificateExpiredException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/cert/CertificateExpiredException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -32,6 +32,7 @@
  * of the certificate.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CertificateExpiredException extends CertificateException {
 
--- a/src/java.base/share/classes/java/security/cert/CertificateNotYetValidException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/cert/CertificateNotYetValidException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -32,6 +32,7 @@
  * validity period.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CertificateNotYetValidException extends CertificateException {
 
--- a/src/java.base/share/classes/java/security/cert/CertificateParsingException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/cert/CertificateParsingException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * are found in the Certificate.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CertificateParsingException extends CertificateException {
 
--- a/src/java.base/share/classes/java/security/cert/X509CRL.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/cert/X509CRL.java	Mon Jun 05 11:00:25 2017 -0700
@@ -102,6 +102,7 @@
  * }</pre>
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  *
  *
  * @see CRL
--- a/src/java.base/share/classes/java/security/cert/X509CRLEntry.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/cert/X509CRLEntry.java	Mon Jun 05 11:00:25 2017 -0700
@@ -62,6 +62,7 @@
  * @see X509Extension
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 
 public abstract class X509CRLEntry implements X509Extension {
--- a/src/java.base/share/classes/java/security/cert/X509Certificate.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/cert/X509Certificate.java	Mon Jun 05 11:00:25 2017 -0700
@@ -95,6 +95,7 @@
  * </pre>
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  *
  *
  * @see Certificate
--- a/src/java.base/share/classes/java/security/cert/X509Extension.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/cert/X509Extension.java	Mon Jun 05 11:00:25 2017 -0700
@@ -65,6 +65,7 @@
  * be handled by a <em>Class</em> that understands the extension.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 
 public interface X509Extension {
--- a/src/java.base/share/classes/java/security/interfaces/DSAKey.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/interfaces/DSAKey.java	Mon Jun 05 11:00:25 2017 -0700
@@ -35,6 +35,7 @@
  *
  * @author Benjamin Renaud
  * @author Josh Bloch
+ * @since 1.1
  */
 public interface DSAKey {
 
--- a/src/java.base/share/classes/java/security/interfaces/DSAKeyPairGenerator.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/interfaces/DSAKeyPairGenerator.java	Mon Jun 05 11:00:25 2017 -0700
@@ -65,6 +65,7 @@
  * <p>Note: Some earlier implementations of this interface may not support
  * larger sizes of DSA parameters such as 2048 and 3072-bit.
  *
+ * @since 1.1
  * @see java.security.KeyPairGenerator
  */
 public interface DSAKeyPairGenerator {
--- a/src/java.base/share/classes/java/security/interfaces/DSAParams.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/interfaces/DSAParams.java	Mon Jun 05 11:00:25 2017 -0700
@@ -38,6 +38,7 @@
  *
  * @author Benjamin Renaud
  * @author Josh Bloch
+ * @since 1.1
  */
 public interface DSAParams {
 
--- a/src/java.base/share/classes/java/security/interfaces/DSAPrivateKey.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/interfaces/DSAPrivateKey.java	Mon Jun 05 11:00:25 2017 -0700
@@ -37,6 +37,7 @@
  * @see DSAPublicKey
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 public interface DSAPrivateKey extends DSAKey, java.security.PrivateKey {
 
--- a/src/java.base/share/classes/java/security/interfaces/DSAPublicKey.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/interfaces/DSAPublicKey.java	Mon Jun 05 11:00:25 2017 -0700
@@ -37,6 +37,7 @@
  * @see DSAPrivateKey
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 public interface DSAPublicKey extends DSAKey, java.security.PublicKey {
 
--- a/src/java.base/share/classes/java/security/interfaces/RSAPrivateCrtKey.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/interfaces/RSAPrivateCrtKey.java	Mon Jun 05 11:00:25 2017 -0700
@@ -32,6 +32,7 @@
  * using the <i>Chinese Remainder Theorem</i> (CRT) information values.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see RSAPrivateKey
--- a/src/java.base/share/classes/java/security/interfaces/RSAPrivateKey.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/interfaces/RSAPrivateKey.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * The interface to an RSA private key.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see RSAPrivateCrtKey
--- a/src/java.base/share/classes/java/security/interfaces/RSAPublicKey.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/interfaces/RSAPublicKey.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * The interface to an RSA public key.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  */
 
--- a/src/java.base/share/classes/java/security/spec/RSAPrivateCrtKeySpec.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/spec/RSAPrivateCrtKeySpec.java	Mon Jun 05 11:00:25 2017 -0700
@@ -33,6 +33,7 @@
  * efficiency.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see java.security.Key
--- a/src/java.base/share/classes/java/security/spec/RSAPrivateKeySpec.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/spec/RSAPrivateKeySpec.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * This class specifies an RSA private key.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see java.security.Key
--- a/src/java.base/share/classes/java/security/spec/RSAPublicKeySpec.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/security/spec/RSAPublicKeySpec.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * This class specifies an RSA public key.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see java.security.Key
--- a/src/java.base/share/classes/java/text/BreakIterator.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/BreakIterator.java	Mon Jun 05 11:00:25 2017 -0700
@@ -221,6 +221,7 @@
  * and the next is a word; otherwise, it's the material between words.)
  * </blockquote>
  *
+ * @since 1.1
  * @see CharacterIterator
  *
  */
--- a/src/java.base/share/classes/java/text/CharacterIterator.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/CharacterIterator.java	Mon Jun 05 11:00:25 2017 -0700
@@ -98,6 +98,7 @@
  * }
  * }</pre>
  *
+ * @since 1.1
  * @see StringCharacterIterator
  * @see AttributedCharacterIterator
  */
--- a/src/java.base/share/classes/java/text/ChoiceFormat.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/ChoiceFormat.java	Mon Jun 05 11:00:25 2017 -0700
@@ -163,6 +163,7 @@
  * @see          DecimalFormat
  * @see          MessageFormat
  * @author       Mark Davis
+ * @since 1.1
  */
 public class ChoiceFormat extends NumberFormat {
 
--- a/src/java.base/share/classes/java/text/CollationElementIterator.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/CollationElementIterator.java	Mon Jun 05 11:00:25 2017 -0700
@@ -104,6 +104,7 @@
  * @see                Collator
  * @see                RuleBasedCollator
  * @author             Helena Shih, Laura Werner, Richard Gillam
+ * @since 1.1
  */
 public final class CollationElementIterator
 {
--- a/src/java.base/share/classes/java/text/CollationKey.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/CollationKey.java	Mon Jun 05 11:00:25 2017 -0700
@@ -95,6 +95,7 @@
  * @see          Collator
  * @see          RuleBasedCollator
  * @author       Helena Shih
+ * @since 1.1
  */
 
 public abstract class CollationKey implements Comparable<CollationKey> {
--- a/src/java.base/share/classes/java/text/Collator.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/Collator.java	Mon Jun 05 11:00:25 2017 -0700
@@ -123,6 +123,7 @@
  * @see         CollationElementIterator
  * @see         Locale
  * @author      Helena Shih, Laura Werner, Richard Gillam
+ * @since 1.1
  */
 
 public abstract class Collator
--- a/src/java.base/share/classes/java/text/DateFormat.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/DateFormat.java	Mon Jun 05 11:00:25 2017 -0700
@@ -167,6 +167,7 @@
  * @see          java.util.GregorianCalendar
  * @see          java.util.TimeZone
  * @author       Mark Davis, Chen-Lieh Huang, Alan Liu
+ * @since 1.1
  */
 public abstract class DateFormat extends Format {
 
--- a/src/java.base/share/classes/java/text/DateFormatSymbols.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/DateFormatSymbols.java	Mon Jun 05 11:00:25 2017 -0700
@@ -98,6 +98,7 @@
  * @see          SimpleDateFormat
  * @see          java.util.SimpleTimeZone
  * @author       Chen-Lieh Huang
+ * @since 1.1
  */
 public class DateFormatSymbols implements Serializable, Cloneable {
 
--- a/src/java.base/share/classes/java/text/DecimalFormat.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/DecimalFormat.java	Mon Jun 05 11:00:25 2017 -0700
@@ -381,6 +381,7 @@
  * @see          ParsePosition
  * @author       Mark Davis
  * @author       Alan Liu
+ * @since 1.1
  */
 public class DecimalFormat extends NumberFormat {
 
--- a/src/java.base/share/classes/java/text/DecimalFormatSymbols.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/DecimalFormatSymbols.java	Mon Jun 05 11:00:25 2017 -0700
@@ -60,6 +60,7 @@
  * @see          DecimalFormat
  * @author       Mark Davis
  * @author       Alan Liu
+ * @since 1.1
  */
 
 public class DecimalFormatSymbols implements Cloneable, Serializable {
--- a/src/java.base/share/classes/java/text/FieldPosition.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/FieldPosition.java	Mon Jun 05 11:00:25 2017 -0700
@@ -68,6 +68,7 @@
  * <code>formatToCharacterIterator</code>.
  *
  * @author      Mark Davis
+ * @since 1.1
  * @see         java.text.Format
  */
 public class FieldPosition {
--- a/src/java.base/share/classes/java/text/Format.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/Format.java	Mon Jun 05 11:00:25 2017 -0700
@@ -129,6 +129,7 @@
  * @see          java.text.DateFormat
  * @see          java.text.MessageFormat
  * @author       Mark Davis
+ * @since 1.1
  */
 public abstract class Format implements Serializable, Cloneable {
 
--- a/src/java.base/share/classes/java/text/MessageFormat.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/MessageFormat.java	Mon Jun 05 11:00:25 2017 -0700
@@ -344,6 +344,7 @@
  * @see          SimpleDateFormat
  *
  * @author       Mark Davis
+ * @since 1.1
  */
 
 public class MessageFormat extends Format {
--- a/src/java.base/share/classes/java/text/NumberFormat.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/NumberFormat.java	Mon Jun 05 11:00:25 2017 -0700
@@ -185,6 +185,7 @@
  * @see          ChoiceFormat
  * @author       Mark Davis
  * @author       Helena Shih
+ * @since 1.1
  */
 public abstract class NumberFormat extends Format  {
 
--- a/src/java.base/share/classes/java/text/ParseException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/ParseException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -45,6 +45,7 @@
  * @see java.text.Format
  * @see java.text.FieldPosition
  * @author      Mark Davis
+ * @since 1.1
  */
 public
 class ParseException extends Exception {
--- a/src/java.base/share/classes/java/text/ParsePosition.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/ParsePosition.java	Mon Jun 05 11:00:25 2017 -0700
@@ -51,6 +51,7 @@
  * records the current position.
  *
  * @author      Mark Davis
+ * @since 1.1
  * @see         java.text.Format
  */
 
--- a/src/java.base/share/classes/java/text/RuleBasedCollator.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/RuleBasedCollator.java	Mon Jun 05 11:00:25 2017 -0700
@@ -242,6 +242,7 @@
  * @see        Collator
  * @see        CollationElementIterator
  * @author     Helena Shih, Laura Werner, Richard Gillam
+ * @since 1.1
  */
 public class RuleBasedCollator extends Collator{
     // IMPLEMENTATION NOTES:  The implementation of the collation algorithm is
--- a/src/java.base/share/classes/java/text/SimpleDateFormat.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/SimpleDateFormat.java	Mon Jun 05 11:00:25 2017 -0700
@@ -434,6 +434,7 @@
  * @see          DateFormat
  * @see          DateFormatSymbols
  * @author       Mark Davis, Chen-Lieh Huang, Alan Liu
+ * @since 1.1
  */
 public class SimpleDateFormat extends DateFormat {
 
--- a/src/java.base/share/classes/java/text/StringCharacterIterator.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/text/StringCharacterIterator.java	Mon Jun 05 11:00:25 2017 -0700
@@ -47,6 +47,7 @@
  * entire <code>String</code>.
  *
  * @see CharacterIterator
+ * @since 1.1
  */
 
 public final class StringCharacterIterator implements CharacterIterator
--- a/src/java.base/share/classes/java/util/ResourceBundle.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/ResourceBundle.java	Mon Jun 05 11:00:25 2017 -0700
@@ -216,16 +216,17 @@
  * the caller module, those resource bundles need to be loaded from service
  * providers of {@link ResourceBundleProvider}. The caller module must declare
  * "{@code uses}" and the service interface name is the concatenation of the
- * base name of the bundles and the string "{@code Provider}". The
+ * package name of the base name, string "{@code .spi.}", the simple class
+ * name of the base name, and the string "{@code Provider}". The
  * <em>bundle provider modules</em> containing resource bundles must
  * declare "{@code provides}" with the service interface name and
  * its implementation class name. For example, if the base name is
  * "{@code com.example.app.MyResources}", the caller module must declare
- * "{@code uses com.example.app.MyResourcesProvider;}" and a module containing resource
- * bundles must declare "{@code provides com.example.app.MyResourcesProvider
+ * "{@code uses com.example.app.spi.MyResourcesProvider;}" and a module containing resource
+ * bundles must declare "{@code provides com.example.app.spi.MyResourcesProvider
  * with com.example.app.internal.MyResourcesProviderImpl;}"
  * where {@code com.example.app.internal.MyResourcesProviderImpl} is an
- * implementation class of {@code com.example.app.MyResourcesProvider}.</li>
+ * implementation class of {@code com.example.app.spi.MyResourcesProvider}.</li>
  * <li>If you want to use non-standard formats in named modules, such as XML,
  * {@link ResourceBundleProvider} needs to be used.</li>
  * <li>The {@code getBundle} method with a {@code ClassLoader} may not be able to
@@ -243,9 +244,10 @@
  *
  * The {@code getBundle} factory methods load service providers of
  * {@link ResourceBundleProvider}, if available, using {@link ServiceLoader}.
- * The service type is designated by {@code basename+"Provider"}. For
+ * The service type is designated by
+ * {@code <package name> + ".spi." + <simple name> + "Provider"}. For
  * example, if the base name is "{@code com.example.app.MyResources}", the service
- * type is {@code com.example.app.MyResourcesProvider}.
+ * type is {@code com.example.app.spi.MyResourcesProvider}.
  * <p>
  * In named modules, the loaded service providers for the given base name are
  * used to load resource bundles. If no service provider is available, or if
@@ -923,7 +925,12 @@
      * <p> Resource bundles in named modules may be encapsulated.  When
      * the resource bundle is loaded from a provider, the caller module
      * must have an appropriate <i>uses</i> clause in its <i>module descriptor</i>
-     * to declare that the module uses implementations of {@code "baseName"Provider}.
+     * to declare that the module uses implementations of
+     * {@code <package name> + ".spi." + <simple name> + "Provider"}.
+     * Otherwise, it will load the resource bundles that are local in the
+     * given module or that are visible to the class loader of the given module
+     * (refer to the <a href="#bundleprovider">Resource Bundles in Named Modules</a>
+     * section for details).
      * When the resource bundle is loaded from the specified module, it is
      * subject to the encapsulation rules specified by
      * {@link Module#getResourceAsStream Module.getResourceAsStream}.
@@ -958,20 +965,17 @@
      * <p> Resource bundles in named modules may be encapsulated.  When
      * the resource bundle is loaded from a provider, the caller module
      * must have an appropriate <i>uses</i> clause in its <i>module descriptor</i>
-     * to declare that the module uses implementations of {@code "baseName"Provider}.
+     * to declare that the module uses implementations of
+     * {@code <package name> + ".spi." + <simple name> + "Provider"}.
+     * Otherwise, it will load the resource bundles that are local in the
+     * given module or that are visible to the class loader of the given module
+     * (refer to the <a href="#bundleprovider">Resource Bundles in Named Modules</a>
+     * section for details).
      * When the resource bundle is loaded from the specified module, it is
      * subject to the encapsulation rules specified by
      * {@link Module#getResourceAsStream Module.getResourceAsStream}.
      *
      * <p>
-     * If the given {@code module} is a named module, this method will
-     * load the service providers for {@link java.util.spi.ResourceBundleProvider}
-     * and also resource bundles that are local in the given module or that
-     * are visible to the class loader of the given module (refer to the
-     * <a href="#bundleprovider">Resource Bundles in Named Modules</a> section
-     * for details).
-     *
-     * <p>
      * If the given {@code module} is an unnamed module, then this method is
      * equivalent to calling {@link #getBundle(String, Locale, ClassLoader)
      * getBundle(baseName, targetLocale, module.getClassLoader()} to load
@@ -1070,8 +1074,10 @@
      * Resource bundles in a named module are private to that module.  If
      * the caller is in a named module, this method will find resource bundles
      * from the service providers of {@link java.util.spi.ResourceBundleProvider}
-     * and also find resource bundles that are in the caller's module or
-     * that are visible to the given class loader.
+     * if any. Otherwise, it will load the resource bundles that are visible to
+     * the given {@code loader} (refer to the
+     * <a href="#bundleprovider">Resource Bundles in Named Modules</a> section
+     * for details).
      * If the caller is in a named module and the given {@code loader} is
      * different than the caller's class loader, or if the caller is not in
      * a named module, this method will not find resource bundles from named
@@ -1883,8 +1889,15 @@
     private static Class<ResourceBundleProvider>
             getResourceBundleProviderType(String baseName, ClassLoader loader)
     {
-        // Look up <baseName> + "Provider"
-        String providerName = baseName + "Provider";
+        // Look up <packagename> + ".spi." + <name>"Provider"
+        int i = baseName.lastIndexOf('.');
+        if (i <= 0) {
+            return null;
+        }
+
+        String name = baseName.substring(i+1, baseName.length()) + "Provider";
+        String providerName = baseName.substring(0, i) + ".spi." + name;
+
         // Use the class loader of the getBundle caller so that the caller's
         // visibility of the provider type is checked.
         return AccessController.doPrivileged(
--- a/src/java.base/share/classes/java/util/concurrent/CompletionService.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/concurrent/CompletionService.java	Mon Jun 05 11:00:25 2017 -0700
@@ -57,6 +57,8 @@
  * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
  * actions taken by that task, which in turn <i>happen-before</i>
  * actions following a successful return from the corresponding {@code take()}.
+ *
+ * @since 1.5
  */
 public interface CompletionService<V> {
     /**
--- a/src/java.base/share/classes/java/util/concurrent/ExecutorCompletionService.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/concurrent/ExecutorCompletionService.java	Mon Jun 05 11:00:25 2017 -0700
@@ -97,6 +97,8 @@
  *   if (result != null)
  *     use(result);
  * }}</pre>
+ *
+ * @since 1.5
  */
 public class ExecutorCompletionService<V> implements CompletionService<V> {
     private final Executor executor;
--- a/src/java.base/share/classes/java/util/concurrent/locks/LockSupport.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/concurrent/locks/LockSupport.java	Mon Jun 05 11:00:25 2017 -0700
@@ -133,6 +133,8 @@
  *     Class<?> ensureLoaded = LockSupport.class;
  *   }
  * }}</pre>
+ *
+ * @since 1.5
  */
 public class LockSupport {
     private LockSupport() {} // Cannot be instantiated.
--- a/src/java.base/share/classes/java/util/jar/JarEntry.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/jar/JarEntry.java	Mon Jun 05 11:00:25 2017 -0700
@@ -32,6 +32,8 @@
 
 /**
  * This class is used to represent a JAR file entry.
+ *
+ * @since 1.2
  */
 public
 class JarEntry extends ZipEntry {
--- a/src/java.base/share/classes/java/util/package-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/package-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -29,7 +29,7 @@
  * miscellaneous utility classes (a string tokenizer, a random-number
  * generator, and a bit array).
  *
- * <h2><a name="CollectionsFramework"></a>{@index "Java Collections Framework"}</h2>
+ * <h2><a id="CollectionsFramework"></a>{@index "Java Collections Framework"}</h2>
  * <ul>
  *   <li><a href="../../../technotes/guides/collections/overview.html"><b>Collections Framework Overview</b></a>
  *   <li><a href="../../../technotes/guides/collections/reference.html"><b>
--- a/src/java.base/share/classes/java/util/spi/CalendarNameProvider.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/spi/CalendarNameProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -46,7 +46,7 @@
  * Calendar}. The following are calendar-common fields and their values to be
  * supported for each calendar system.
  *
- * <table class="plain" style="border-bottom:1px solid">
+ *  <table class="plain">
  * <caption style="display:none">Field values</caption>
  * <thead>
  *   <tr>
@@ -57,8 +57,8 @@
  * </thead>
  * <tbody>
  *   <tr>
- *     <td valign="top">{@link Calendar#MONTH}</td>
- *     <td valign="top">{@link Calendar#JANUARY} to {@link Calendar#UNDECIMBER}</td>
+ *     <td style="vertical-align:top">{@link Calendar#MONTH}</td>
+ *     <td style="vertical-align:top">{@link Calendar#JANUARY} to {@link Calendar#UNDECIMBER}</td>
  *     <td>Month numbering is 0-based (e.g., 0 - January, ..., 11 -
  *         December). Some calendar systems have 13 months. Month
  *         names need to be supported in both the formatting and
@@ -67,14 +67,14 @@
  *         in both of the forms.</td>
  *   </tr>
  *   <tr>
- *     <td valign="top">{@link Calendar#DAY_OF_WEEK}</td>
- *     <td valign="top">{@link Calendar#SUNDAY} to {@link Calendar#SATURDAY}</td>
+ *     <td style="vertical-align:top">{@link Calendar#DAY_OF_WEEK}</td>
+ *     <td style="vertical-align:top">{@link Calendar#SUNDAY} to {@link Calendar#SATURDAY}</td>
  *     <td>Day-of-week numbering is 1-based starting from Sunday (i.e., 1 - Sunday,
  *         ..., 7 - Saturday).</td>
  *   </tr>
  *   <tr>
- *     <td valign="top">{@link Calendar#AM_PM}</td>
- *     <td valign="top">{@link Calendar#AM} to {@link Calendar#PM}</td>
+ *     <td style="vertical-align:top">{@link Calendar#AM_PM}</td>
+ *     <td style="vertical-align:top">{@link Calendar#AM} to {@link Calendar#PM}</td>
  *     <td>0 - AM, 1 - PM</td>
  *   </tr>
  * </tbody>
@@ -82,7 +82,7 @@
  *
  * <p style="margin-top:20px">The following are calendar-specific fields and their values to be supported.
  *
- * <table class="plain" style="border-bottom:1px solid">
+ * <table class="plain">
  * <caption style="display:none">Calendar type and field values</caption>
  * <thead>
  *   <tr>
@@ -94,8 +94,8 @@
  * </thead>
  * <tbody>
  *   <tr>
- *     <td rowspan="2" valign="top">{@code "gregory"}</td>
- *     <td rowspan="2" valign="top">{@link Calendar#ERA}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@code "gregory"}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@link Calendar#ERA}</td>
  *     <td>0</td>
  *     <td>{@link java.util.GregorianCalendar#BC} (BCE)</td>
  *   </tr>
@@ -104,8 +104,8 @@
  *     <td>{@link java.util.GregorianCalendar#AD} (CE)</td>
  *   </tr>
  *   <tr>
- *     <td rowspan="2" valign="top">{@code "buddhist"}</td>
- *     <td rowspan="2" valign="top">{@link Calendar#ERA}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@code "buddhist"}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@link Calendar#ERA}</td>
  *     <td>0</td>
  *     <td>BC (BCE)</td>
  *   </tr>
@@ -114,8 +114,8 @@
  *     <td>B.E. (Buddhist Era)</td>
  *   </tr>
  *   <tr>
- *     <td rowspan="6" valign="top">{@code "japanese"}</td>
- *     <td rowspan="5" valign="top">{@link Calendar#ERA}</td>
+ *     <td rowspan="6" style="vertical-align:top">{@code "japanese"}</td>
+ *     <td rowspan="5" style="vertical-align:top">{@link Calendar#ERA}</td>
  *     <td>0</td>
  *     <td>Seireki (Before Meiji)</td>
  *   </tr>
@@ -144,8 +144,8 @@
  *     Year representation in {@code SimpleDateFormat}</a>.</td>
  *   </tr>
  *   <tr>
- *     <td rowspan="2" valign="top">{@code "roc"}</td>
- *     <td rowspan="2" valign="top">{@link Calendar#ERA}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@code "roc"}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@link Calendar#ERA}</td>
  *     <td>0</td>
  *     <td>Before R.O.C.</td>
  *   </tr>
@@ -154,8 +154,8 @@
  *     <td>R.O.C.</td>
  *   </tr>
  *   <tr>
- *     <td rowspan="2" valign="top">{@code "islamic"}</td>
- *     <td rowspan="2" valign="top">{@link Calendar#ERA}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@code "islamic"}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@link Calendar#ERA}</td>
  *     <td>0</td>
  *     <td>Before AH</td>
  *   </tr>
--- a/src/java.base/share/classes/java/util/spi/ResourceBundleProvider.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/spi/ResourceBundleProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * 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
@@ -35,11 +35,11 @@
  * during a call to the
  * {@link ResourceBundle#getBundle(String, Locale, ClassLoader)
  * ResourceBundle.getBundle} method. The provider service type is determined by
- * {@code basename+"Provider"}.
+ * {@code <package name> + ".spi." + <simple name> + "Provider"}.
  *
  * <p>
  * For example, if the base name is "com.example.app.MyResources",
- * {@code com.example.app.MyResourcesProvider} will be the provider service type:
+ * {@code com.example.app.spi.MyResourcesProvider} will be the provider service type:
  * <pre>{@code
  * public interface MyResourcesProvider extends ResourceBundleProvider {
  * }
--- a/src/java.base/share/classes/java/util/zip/Adler32.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/Adler32.java	Mon Jun 05 11:00:25 2017 -0700
@@ -39,6 +39,7 @@
  * a {@link NullPointerException} to be thrown.</p>
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class Adler32 implements Checksum {
--- a/src/java.base/share/classes/java/util/zip/CRC32.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/CRC32.java	Mon Jun 05 11:00:25 2017 -0700
@@ -38,6 +38,7 @@
  * a {@link NullPointerException} to be thrown.</p>
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class CRC32 implements Checksum {
--- a/src/java.base/share/classes/java/util/zip/CheckedInputStream.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/CheckedInputStream.java	Mon Jun 05 11:00:25 2017 -0700
@@ -35,6 +35,7 @@
  *
  * @see         Checksum
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class CheckedInputStream extends FilterInputStream {
--- a/src/java.base/share/classes/java/util/zip/CheckedOutputStream.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/CheckedOutputStream.java	Mon Jun 05 11:00:25 2017 -0700
@@ -36,6 +36,7 @@
  *
  * @see         Checksum
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class CheckedOutputStream extends FilterOutputStream {
--- a/src/java.base/share/classes/java/util/zip/Checksum.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/Checksum.java	Mon Jun 05 11:00:25 2017 -0700
@@ -30,6 +30,7 @@
  * An interface representing a data checksum.
  *
  * @author David Connelly
+ * @since 1.1
  */
 public interface Checksum {
 
--- a/src/java.base/share/classes/java/util/zip/DataFormatException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/DataFormatException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -29,6 +29,7 @@
  * Signals that a data format error has occurred.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class DataFormatException extends Exception {
--- a/src/java.base/share/classes/java/util/zip/Deflater.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/Deflater.java	Mon Jun 05 11:00:25 2017 -0700
@@ -69,6 +69,7 @@
  *
  * @see         Inflater
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class Deflater {
--- a/src/java.base/share/classes/java/util/zip/DeflaterOutputStream.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/DeflaterOutputStream.java	Mon Jun 05 11:00:25 2017 -0700
@@ -37,6 +37,7 @@
  *
  * @see         Deflater
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class DeflaterOutputStream extends FilterOutputStream {
--- a/src/java.base/share/classes/java/util/zip/GZIPInputStream.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/GZIPInputStream.java	Mon Jun 05 11:00:25 2017 -0700
@@ -38,6 +38,7 @@
  *
  * @see         InflaterInputStream
  * @author      David Connelly
+ * @since 1.1
  *
  */
 public
--- a/src/java.base/share/classes/java/util/zip/GZIPOutputStream.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/GZIPOutputStream.java	Mon Jun 05 11:00:25 2017 -0700
@@ -32,6 +32,7 @@
  * This class implements a stream filter for writing compressed data in
  * the GZIP file format.
  * @author      David Connelly
+ * @since 1.1
  *
  */
 public
--- a/src/java.base/share/classes/java/util/zip/Inflater.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/Inflater.java	Mon Jun 05 11:00:25 2017 -0700
@@ -68,6 +68,7 @@
  *
  * @see         Deflater
  * @author      David Connelly
+ * @since 1.1
  *
  */
 public
--- a/src/java.base/share/classes/java/util/zip/InflaterInputStream.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/InflaterInputStream.java	Mon Jun 05 11:00:25 2017 -0700
@@ -37,6 +37,7 @@
  *
  * @see         Inflater
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class InflaterInputStream extends FilterInputStream {
--- a/src/java.base/share/classes/java/util/zip/ZipConstants.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/ZipConstants.java	Mon Jun 05 11:00:25 2017 -0700
@@ -30,6 +30,7 @@
  * which manipulate ZIP files.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 interface ZipConstants {
     /*
--- a/src/java.base/share/classes/java/util/zip/ZipEntry.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/ZipEntry.java	Mon Jun 05 11:00:25 2017 -0700
@@ -39,6 +39,7 @@
  * This class is used to represent a ZIP file entry.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class ZipEntry implements ZipConstants, Cloneable {
--- a/src/java.base/share/classes/java/util/zip/ZipFile.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/ZipFile.java	Mon Jun 05 11:00:25 2017 -0700
@@ -70,6 +70,7 @@
  * thrown.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class ZipFile implements ZipConstants, Closeable {
--- a/src/java.base/share/classes/java/util/zip/ZipInputStream.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/ZipInputStream.java	Mon Jun 05 11:00:25 2017 -0700
@@ -40,6 +40,7 @@
  * entries.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class ZipInputStream extends InflaterInputStream implements ZipConstants {
--- a/src/java.base/share/classes/java/util/zip/ZipOutputStream.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/ZipOutputStream.java	Mon Jun 05 11:00:25 2017 -0700
@@ -41,6 +41,7 @@
  * entries.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class ZipOutputStream extends DeflaterOutputStream implements ZipConstants {
--- a/src/java.base/share/classes/java/util/zip/package-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/java/util/zip/package-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -37,13 +37,13 @@
  *         Info-ZIP Application Note 970311</a> - a detailed description of
  *         the Info-ZIP format upon which the {@code java.util.zip} classes
  *         are based.
- *     <li><a name="zip64">An implementation may optionally support the
+ *     <li><a id="zip64">An implementation may optionally support the
  *         ZIP64(tm) format extensions defined by the</a>
  *         <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">
  *         PKWARE ZIP File Format Specification</a>. The ZIP64(tm) format
  *         extensions are used to overcome the size limitations of the
  *         original ZIP format.
- *     <li><a name="lang_encoding">APPENDIX D of</a>
+ *     <li><a id="lang_encoding">APPENDIX D of</a>
  *         <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">
  *         PKWARE ZIP File Format Specification</a> - Language Encoding Flag
  *         (EFS) to encode ZIP entry filename and comment fields using UTF-8.
--- a/src/java.base/share/classes/javax/crypto/KeyGenerator.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/crypto/KeyGenerator.java	Mon Jun 05 11:00:25 2017 -0700
@@ -83,6 +83,15 @@
  * <p>In case the client does not explicitly initialize the KeyGenerator
  * (via a call to an {@code init} method), each provider must
  * supply (and document) a default initialization.
+ * See the Keysize Restriction sections of the
+ * <a href="{@docRoot}/../technotes/guides/security/SunProviders.html">
+ * JDK Providers</a>
+ * document for information on the KeyGenerator defaults used by
+ * JDK providers.
+ * However, note that defaults may vary across different providers.
+ * Additionally, the default value for a provider may change in a future
+ * version. Therefore, it is recommended to explicitly initialize the
+ * KeyGenerator instead of relying on provider-specific defaults.
  *
  * <p> Every implementation of the Java platform is required to support the
  * following standard {@code KeyGenerator} algorithms with the keysizes in
--- a/src/java.base/share/classes/javax/crypto/KeyGeneratorSpi.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/crypto/KeyGeneratorSpi.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -35,6 +35,19 @@
  * cryptographic service provider who wishes to supply the implementation
  * of a key generator for a particular algorithm.
  *
+ * <p>In case the client does not explicitly initialize the KeyGenerator
+ * (via a call to an {@code init} method), each provider must
+ * supply (and document) a default initialization.
+ * See the Keysize Restriction sections of the
+ * <a href="{@docRoot}/../technotes/guides/security/SunProviders.html">
+ * JDK Providers</a>
+ * document for information on the KeyGenerator defaults used by
+ * JDK providers.
+ * However, note that defaults may vary across different providers.
+ * Additionally, the default value for a provider may change in a future
+ * version. Therefore, it is recommended to explicitly initialize the
+ * KeyGenerator instead of relying on provider-specific defaults.
+ *
  * @author Jan Luehe
  *
  * @see SecretKey
--- a/src/java.base/share/classes/javax/security/auth/AuthPermission.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/AuthPermission.java	Mon Jun 05 11:00:25 2017 -0700
@@ -139,6 +139,7 @@
  * @implNote
  * Implementations may define additional target names, but should use naming
  * conventions such as reverse domain name notation to avoid name clashes.
+ * @since 1.4
  */
 public final class AuthPermission extends
 java.security.BasicPermission {
--- a/src/java.base/share/classes/javax/security/auth/DestroyFailedException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/DestroyFailedException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -32,6 +32,7 @@
  * the {@code Destroyable} interface when the {@code destroy}
  * method fails.
  *
+ * @since 1.4
  */
 public class DestroyFailedException extends Exception {
 
--- a/src/java.base/share/classes/javax/security/auth/Destroyable.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/Destroyable.java	Mon Jun 05 11:00:25 2017 -0700
@@ -29,6 +29,7 @@
  * Objects such as credentials may optionally implement this interface
  * to provide the capability to destroy its contents.
  *
+ * @since 1.4
  * @see javax.security.auth.Subject
  */
 public interface Destroyable {
--- a/src/java.base/share/classes/javax/security/auth/Policy.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/Policy.java	Mon Jun 05 11:00:25 2017 -0700
@@ -153,6 +153,7 @@
  * These two APIs provide callers the means to query the
  * Policy for Principal-based Permission entries.
  *
+ * @since 1.4
  * @see java.security.Security security properties
  */
 @Deprecated(since="1.4")
--- a/src/java.base/share/classes/javax/security/auth/PrivateCredentialPermission.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/PrivateCredentialPermission.java	Mon Jun 05 11:00:25 2017 -0700
@@ -100,6 +100,7 @@
  * "a.b.Principal" with the name, "duke", and "c.d.Principal", with the name,
  * "dukette".
  *
+ * @since 1.4
  */
 public final class PrivateCredentialPermission extends Permission {
 
--- a/src/java.base/share/classes/javax/security/auth/RefreshFailedException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/RefreshFailedException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -32,6 +32,7 @@
  * the {@code Refreshable} interface when the {@code refresh}
  * method fails.
  *
+ * @since 1.4
  */
 public class RefreshFailedException extends Exception {
 
--- a/src/java.base/share/classes/javax/security/auth/Refreshable.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/Refreshable.java	Mon Jun 05 11:00:25 2017 -0700
@@ -32,6 +32,7 @@
  * may implement this interface to allow callers to refresh the time period
  * for which it is valid.
  *
+ * @since 1.4
  * @see javax.security.auth.Subject
  */
 public interface Refreshable {
--- a/src/java.base/share/classes/javax/security/auth/Subject.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/Subject.java	Mon Jun 05 11:00:25 2017 -0700
@@ -94,6 +94,7 @@
  * {@code Principal} implementations associated with Subjects
  * must implement {@code Serializable}.
  *
+ * @since 1.4
  * @see java.security.Principal
  * @see java.security.DomainCombiner
  */
--- a/src/java.base/share/classes/javax/security/auth/SubjectDomainCombiner.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/SubjectDomainCombiner.java	Mon Jun 05 11:00:25 2017 -0700
@@ -43,6 +43,7 @@
  * with Principals from the {@code Subject} associated with this
  * {@code SubjectDomainCombiner}.
  *
+ * @since 1.4
  */
 public class SubjectDomainCombiner implements java.security.DomainCombiner {
 
--- a/src/java.base/share/classes/javax/security/auth/callback/Callback.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/callback/Callback.java	Mon Jun 05 11:00:25 2017 -0700
@@ -40,6 +40,7 @@
  * if appropriate, to return requested information back to the
  * underlying security services.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  * @see javax.security.auth.callback.ChoiceCallback
  * @see javax.security.auth.callback.ConfirmationCallback
--- a/src/java.base/share/classes/javax/security/auth/callback/CallbackHandler.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/callback/CallbackHandler.java	Mon Jun 05 11:00:25 2017 -0700
@@ -63,6 +63,7 @@
  * <p> All default handler implementations must provide a public
  * zero-argument constructor.
  *
+ * @since 1.4
  * @see java.security.Security security properties
  */
 public interface CallbackHandler {
--- a/src/java.base/share/classes/javax/security/auth/callback/ChoiceCallback.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/callback/ChoiceCallback.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * method of a {@code CallbackHandler} to display a list of choices
  * and to retrieve the selected choice(s).
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class ChoiceCallback implements Callback, java.io.Serializable {
--- a/src/java.base/share/classes/javax/security/auth/callback/ConfirmationCallback.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/callback/ConfirmationCallback.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * method of a {@code CallbackHandler} to ask for YES/NO,
  * OK/CANCEL, YES/NO/CANCEL or other similar confirmations.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class ConfirmationCallback implements Callback, java.io.Serializable {
--- a/src/java.base/share/classes/javax/security/auth/callback/LanguageCallback.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/callback/LanguageCallback.java	Mon Jun 05 11:00:25 2017 -0700
@@ -33,6 +33,7 @@
  * method of a {@code CallbackHandler} to retrieve the {@code Locale}
  * used for localizing text.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class LanguageCallback implements Callback, java.io.Serializable {
--- a/src/java.base/share/classes/javax/security/auth/callback/NameCallback.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/callback/NameCallback.java	Mon Jun 05 11:00:25 2017 -0700
@@ -30,6 +30,7 @@
  * {@code NameCallback} to the {@code handle}
  * method of a {@code CallbackHandler} to retrieve name information.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class NameCallback implements Callback, java.io.Serializable {
--- a/src/java.base/share/classes/javax/security/auth/callback/PasswordCallback.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/callback/PasswordCallback.java	Mon Jun 05 11:00:25 2017 -0700
@@ -30,6 +30,7 @@
  * {@code PasswordCallback} to the {@code handle}
  * method of a {@code CallbackHandler} to retrieve password information.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class PasswordCallback implements Callback, java.io.Serializable {
--- a/src/java.base/share/classes/javax/security/auth/callback/TextInputCallback.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/callback/TextInputCallback.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * method of a {@code CallbackHandler} to retrieve generic text
  * information.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class TextInputCallback implements Callback, java.io.Serializable {
--- a/src/java.base/share/classes/javax/security/auth/callback/TextOutputCallback.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/callback/TextOutputCallback.java	Mon Jun 05 11:00:25 2017 -0700
@@ -31,6 +31,7 @@
  * method of a {@code CallbackHandler} to display information messages,
  * warning messages and error messages.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class TextOutputCallback implements Callback, java.io.Serializable {
--- a/src/java.base/share/classes/javax/security/auth/callback/UnsupportedCallbackException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/callback/UnsupportedCallbackException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -29,6 +29,7 @@
  * Signals that a {@code CallbackHandler} does not
  * recognize a particular {@code Callback}.
  *
+ * @since 1.4
  */
 public class UnsupportedCallbackException extends Exception {
 
--- a/src/java.base/share/classes/javax/security/auth/login/AccountExpiredException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/login/AccountExpiredException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -35,6 +35,7 @@
  * throws this exception to notify the application.  The application can
  * then take the appropriate steps to notify the user.
  *
+ * @since 1.4
  */
 public class AccountExpiredException extends AccountException {
 
--- a/src/java.base/share/classes/javax/security/auth/login/AppConfigurationEntry.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/login/AppConfigurationEntry.java	Mon Jun 05 11:00:25 2017 -0700
@@ -39,6 +39,7 @@
  * options.  Please refer to the {@code Configuration} class for
  * more information on the different control flags and their semantics.
  *
+ * @since 1.4
  * @see javax.security.auth.login.Configuration
  */
 public class AppConfigurationEntry {
--- a/src/java.base/share/classes/javax/security/auth/login/Configuration.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/login/Configuration.java	Mon Jun 05 11:00:25 2017 -0700
@@ -182,6 +182,7 @@
  * Java Security Standard Algorithm Names Specification</a>
  * for a list of standard Configuration types.
  *
+ * @since 1.4
  * @see javax.security.auth.login.LoginContext
  * @see java.security.Security security properties
  */
--- a/src/java.base/share/classes/javax/security/auth/login/CredentialExpiredException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/login/CredentialExpiredException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -37,6 +37,7 @@
  * the application.  The application can then take the appropriate
  * steps to assist the user in updating the password.
  *
+ * @since 1.4
  */
 public class CredentialExpiredException extends CredentialException {
 
--- a/src/java.base/share/classes/javax/security/auth/login/FailedLoginException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/login/FailedLoginException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -32,6 +32,7 @@
  * For example, a {@code LoginModule} throws this exception if
  * the user entered an incorrect password.
  *
+ * @since 1.4
  */
 public class FailedLoginException extends LoginException {
 
--- a/src/java.base/share/classes/javax/security/auth/login/LoginContext.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/login/LoginContext.java	Mon Jun 05 11:00:25 2017 -0700
@@ -182,6 +182,7 @@
  * </ul>
  * </ol>
  *
+ * @since 1.4
  * @see java.security.Security
  * @see javax.security.auth.AuthPermission
  * @see javax.security.auth.Subject
--- a/src/java.base/share/classes/javax/security/auth/login/LoginException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/login/LoginException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -28,6 +28,7 @@
 /**
  * This is the basic login exception.
  *
+ * @since 1.4
  * @see javax.security.auth.login.LoginContext
  */
 
--- a/src/java.base/share/classes/javax/security/auth/spi/LoginModule.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/spi/LoginModule.java	Mon Jun 05 11:00:25 2017 -0700
@@ -122,6 +122,7 @@
  * no arguments.  This allows classes which load the {@code LoginModule}
  * to instantiate it.
  *
+ * @since 1.4
  * @see javax.security.auth.login.LoginContext
  * @see javax.security.auth.login.Configuration
  */
--- a/src/java.base/share/classes/javax/security/auth/x500/X500PrivateCredential.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.base/share/classes/javax/security/auth/x500/X500PrivateCredential.java	Mon Jun 05 11:00:25 2017 -0700
@@ -36,6 +36,7 @@
  * This enables looking up the private credentials for an X.500 principal
  * in a subject.
  *
+ * @since 1.4
  */
 public final class X500PrivateCredential implements Destroyable {
     private X509Certificate cert;
--- a/src/java.base/share/classes/overview-core.html	Fri Jun 02 18:40:55 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-
-Copyright (c) 1998, 2015, 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.  Oracle designates this
-particular file as subject to the "Classpath" exception as provided
-by Oracle in the LICENSE file that accompanied this code.
-
-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.
--->
-
-</head>
-<body bgcolor="white">
-
-This document is the API specification for the Java&#x2122;
-Platform, Standard Edition.
-
-</body>
-</html>
--- a/src/java.datatransfer/share/classes/java/awt/datatransfer/Clipboard.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.datatransfer/share/classes/java/awt/datatransfer/Clipboard.java	Mon Jun 05 11:00:25 2017 -0700
@@ -48,6 +48,7 @@
  *
  * @author      Amy Fowler
  * @author      Alexander Gerasimov
+ * @since 1.1
  */
 public class Clipboard {
 
--- a/src/java.datatransfer/share/classes/java/awt/datatransfer/ClipboardOwner.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.datatransfer/share/classes/java/awt/datatransfer/ClipboardOwner.java	Mon Jun 05 11:00:25 2017 -0700
@@ -39,6 +39,7 @@
  * @see java.awt.datatransfer.Clipboard
  *
  * @author      Amy Fowler
+ * @since 1.1
  */
 
 public interface ClipboardOwner {
--- a/src/java.datatransfer/share/classes/java/awt/datatransfer/DataFlavor.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.datatransfer/share/classes/java/awt/datatransfer/DataFlavor.java	Mon Jun 05 11:00:25 2017 -0700
@@ -112,6 +112,7 @@
  * @author      Blake Sullivan
  * @author      Laurence P. G. Cable
  * @author      Jeff Dunn
+ * @since 1.1
  */
 public class DataFlavor implements Externalizable, Cloneable {
 
--- a/src/java.datatransfer/share/classes/java/awt/datatransfer/StringSelection.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.datatransfer/share/classes/java/awt/datatransfer/StringSelection.java	Mon Jun 05 11:00:25 2017 -0700
@@ -39,6 +39,7 @@
  * and all equivalent flavors is <b>deprecated</b>. No other
  * <code>DataFlavor</code>s are supported.
  *
+ * @since 1.1
  * @see java.awt.datatransfer.DataFlavor#stringFlavor
  * @see java.awt.datatransfer.DataFlavor#plainTextFlavor
  */
--- a/src/java.datatransfer/share/classes/java/awt/datatransfer/Transferable.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.datatransfer/share/classes/java/awt/datatransfer/Transferable.java	Mon Jun 05 11:00:25 2017 -0700
@@ -37,6 +37,7 @@
  * a section in <em>The Java Tutorial</em>, for more information.
  *
  * @author      Amy Fowler
+ * @since 1.1
  */
 
 public interface Transferable {
--- a/src/java.datatransfer/share/classes/java/awt/datatransfer/UnsupportedFlavorException.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.datatransfer/share/classes/java/awt/datatransfer/UnsupportedFlavorException.java	Mon Jun 05 11:00:25 2017 -0700
@@ -30,6 +30,7 @@
  * @see Transferable#getTransferData
  *
  * @author      Amy Fowler
+ * @since 1.1
  */
 public class UnsupportedFlavorException extends Exception {
 
--- a/src/java.rmi/share/classes/sun/rmi/registry/RegistryImpl.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/java.rmi/share/classes/sun/rmi/registry/RegistryImpl.java	Mon Jun 05 11:00:25 2017 -0700
@@ -102,10 +102,10 @@
     private static final String REGISTRY_FILTER_PROPNAME = "sun.rmi.registry.registryFilter";
 
     /** Registry max depth of remote invocations. **/
-    private static int REGISTRY_MAX_DEPTH = 5;
+    private static final int REGISTRY_MAX_DEPTH = 20;
 
     /** Registry maximum array size in remote invocations. **/
-    private static int REGISTRY_MAX_ARRAY_SIZE = 10000;
+    private static final int REGISTRY_MAX_ARRAY_SIZE = 10000;
 
     /**
      * The registryFilter created from the value of the {@code "sun.rmi.registry.registryFilter"}
--- a/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/MultiExchange.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/MultiExchange.java	Mon Jun 05 11:00:25 2017 -0700
@@ -316,13 +316,14 @@
                 })
             // 5. Handle errors and cancel any timer set
             .handle((response, ex) -> {
-                if (response != null) {
+                cancelTimer();
+                if (ex == null) {
+                    assert response != null;
                     return MinimalFuture.completedFuture(response);
                 }
                 // all exceptions thrown are handled here
                 CompletableFuture<Response> error = getExceptionalCF(ex);
                 if (error == null) {
-                    cancelTimer();
                     return responseAsyncImpl();
                 } else {
                     return error;
--- a/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java	Mon Jun 05 11:00:25 2017 -0700
@@ -274,9 +274,7 @@
                 int x;
                 do {
                     if (needData) {
-                        do {
-                            x = chan.read (unwrap_src);
-                        } while (x == 0);
+                        x = chan.read (unwrap_src);
                         if (x == -1) {
                             throw new IOException ("connection closed for reading");
                         }
--- a/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/Receiver.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/Receiver.java	Mon Jun 05 11:00:25 2017 -0700
@@ -28,7 +28,6 @@
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.channels.SelectionKey;
-import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
 
 /*
@@ -58,23 +57,24 @@
     private final Frame.Reader reader = new Frame.Reader();
     private final RawChannel.RawEvent event = createHandler();
     private final AtomicLong demand = new AtomicLong();
-    private final CooperativeHandler handler =
-              new CooperativeHandler(this::pushContinuously);
-    /*
-     * Used to ensure registering the channel event at most once (i.e. to avoid
-     * multiple registrations).
-     */
-    private final AtomicBoolean readable = new AtomicBoolean();
+    private final CooperativeHandler handler;
+
     private ByteBuffer data;
+    private volatile int state;
+
+    private static final int UNREGISTERED = 0;
+    private static final int AVAILABLE    = 1;
+    private static final int WAITING      = 2;
 
     Receiver(MessageStreamConsumer messageConsumer, RawChannel channel) {
         this.messageConsumer = messageConsumer;
         this.channel = channel;
+        this.frameConsumer = new FrameConsumer(this.messageConsumer);
         this.data = channel.initialByteBuffer();
-        this.frameConsumer = new FrameConsumer(this.messageConsumer);
-        // To ensure the initial non-final `data` will be read correctly
-        // (happens-before) by reader after executing readable.get()
-        readable.set(true);
+        // To ensure the initial non-final `data` will be visible
+        // (happens-before) when `handler` invokes `pushContinuously`
+        // the following assignment is done last:
+        handler = new CooperativeHandler(this::pushContinuously);
     }
 
     private RawChannel.RawEvent createHandler() {
@@ -87,7 +87,7 @@
 
             @Override
             public void handle() {
-                readable.set(true);
+                state = AVAILABLE;
                 handler.handle();
             }
         };
@@ -110,54 +110,63 @@
 
     /*
      * Stops the machinery from reading and delivering messages permanently,
-     * regardless of the current demand.
+     * regardless of the current demand and data availability.
      */
     void close() {
         handler.stop();
     }
 
     private void pushContinuously() {
-        while (readable.get() && demand.get() > 0 && !handler.isStopped()) {
-            pushOnce();
-        }
-    }
-
-    private void pushOnce() {
-        if (data == null && !readData()) {
-            return;
-        }
-        try {
-            reader.readFrame(data, frameConsumer); // Pushing frame parts to the consumer
-        } catch (FailWebSocketException e) {
-            messageConsumer.onError(e);
-            return;
-        }
-        if (!data.hasRemaining()) {
-            data = null;
+        while (!handler.isStopped()) {
+            if (data.hasRemaining()) {
+                if (demand.get() > 0) {
+                    try {
+                        int oldPos = data.position();
+                        reader.readFrame(data, frameConsumer);
+                        int newPos = data.position();
+                        assert oldPos != newPos : data; // reader always consumes bytes
+                    } catch (FailWebSocketException e) {
+                        handler.stop();
+                        messageConsumer.onError(e);
+                    }
+                    continue;
+                }
+                break;
+            }
+            switch (state) {
+                case WAITING:
+                    return;
+                case UNREGISTERED:
+                    try {
+                        state = WAITING;
+                        channel.registerEvent(event);
+                    } catch (IOException e) {
+                        handler.stop();
+                        messageConsumer.onError(e);
+                    }
+                    return;
+                case AVAILABLE:
+                    try {
+                        data = channel.read();
+                    } catch (IOException e) {
+                        handler.stop();
+                        messageConsumer.onError(e);
+                        return;
+                    }
+                    if (data == null) { // EOF
+                        handler.stop();
+                        messageConsumer.onComplete();
+                        return;
+                    } else if (!data.hasRemaining()) { // No data at the moment
+                        // Pretty much a "goto", reusing the existing code path
+                        // for registration
+                        state = UNREGISTERED;
+                    }
+                    continue;
+                default:
+                    throw new InternalError(String.valueOf(state));
+            }
         }
     }
+}
 
-    private boolean readData() {
-        try {
-            data = channel.read();
-        } catch (IOException e) {
-            messageConsumer.onError(e);
-            return false;
-        }
-        if (data == null) { // EOF
-            messageConsumer.onComplete();
-            return false;
-        } else if (!data.hasRemaining()) { // No data in the socket at the moment
-            data = null;
-            readable.set(false);
-            try {
-                channel.registerEvent(event);
-            } catch (IOException e) {
-                messageConsumer.onError(e);
-            }
-            return false;
-        }
-        assert data.hasRemaining();
-        return true;
-    }
-}
--- a/test/java/rmi/registry/serialFilter/RegistryFilterTest.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/rmi/registry/serialFilter/RegistryFilterTest.java	Mon Jun 05 11:00:25 2017 -0700
@@ -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
@@ -21,24 +21,18 @@
  * questions.
  */
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.ObjectOutputStream;
 import java.io.Serializable;
 
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
+import java.rmi.AlreadyBoundException;
 import java.rmi.MarshalledObject;
 import java.rmi.NotBoundException;
 import java.rmi.Remote;
 import java.rmi.RemoteException;
-import java.rmi.AlreadyBoundException;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.registry.Registry;
+import java.security.Security;
 import java.util.Objects;
-import java.security.Security;
 
 import org.testng.Assert;
 import org.testng.TestNG;
@@ -57,7 +51,8 @@
  * @summary Test filters for the RMI Registry
  * @run testng/othervm RegistryFilterTest
  * @run testng/othervm
- *        -Dsun.rmi.registry.registryFilter=!java.lang.Long;!RegistryFilterTest$RejectableClass
+ *        -Dsun.rmi.registry.registryFilter=!java.lang.Long;!RegistryFilterTest$RejectableClass;maxdepth=19
+ *        -Dtest.maxdepth=19
  *        RegistryFilterTest
  * @run testng/othervm/policy=security.policy
  *        -Djava.security.properties=${test.src}/java.security-extra1
@@ -68,6 +63,8 @@
     private static int port;
     private static Registry registry;
 
+    static final int REGISTRY_MAX_DEPTH = 20;
+
     static final int REGISTRY_MAX_ARRAY = 10000;
 
     static final String registryFilter =
@@ -125,7 +122,7 @@
 
 
     /*
-     * Test registry rejects an object with the max array size  + 1.
+     * Test registry rejects an object with the max array size + 1.
      */
     @Test(dataProvider="bindData")
     public void simpleBind(String name, Remote obj, boolean blacklisted) throws RemoteException, AlreadyBoundException, NotBoundException {
@@ -139,9 +136,9 @@
     }
 
     /*
-    * Test registry rejects an object with a well known class
-    * if blacklisted in the security properties.
-    */
+     * Test registry rejects an object with a well known class
+     * if blacklisted in the security properties.
+     */
     @Test
     public void simpleRejectableClass() throws RemoteException, AlreadyBoundException, NotBoundException {
         RejectableClass r1 = null;
@@ -150,9 +147,46 @@
             r1 = new RejectableClass();
             registry.bind(name, r1);
             registry.unbind(name);
-            Assert.assertNull(registryFilter, "Registry filter should not have rejected");
+            Assert.assertNull(registryFilter, "Registry filter should have rejected");
+        } catch (Exception rex) {
+            Assert.assertNotNull(registryFilter, "Registry filter should not have rejected");
+        }
+    }
+
+    /*
+     * Test registry does not reject an object with depth at the built-in limit.
+     */
+    @Test
+    public void simpleDepthBuiltinNonRejectable() throws RemoteException, AlreadyBoundException, NotBoundException {
+        int depthOverride = Integer.getInteger("test.maxdepth", REGISTRY_MAX_DEPTH);
+        depthOverride = Math.min(depthOverride, REGISTRY_MAX_DEPTH);
+        System.out.printf("overrideDepth: %d, filter: %s%n", depthOverride, registryFilter);
+        try {
+            String name = "reject2";
+            DepthRejectableClass r1 = DepthRejectableClass.create(depthOverride);
+            registry.bind(name, r1);
+            registry.unbind(name);
         } catch (Exception rex) {
-            Assert.assertNotNull(registryFilter, "Registry filter should have rejected");
+            Assert.fail("Registry filter should not have rejected depth: "
+                            + depthOverride);
+        }
+    }
+
+    /*
+     * Test registry rejects an object with depth at the limit + 1.
+     */
+    @Test
+    public void simpleDepthRejectable() throws RemoteException, AlreadyBoundException, NotBoundException {
+        int depthOverride = Integer.getInteger("test.maxdepth", REGISTRY_MAX_DEPTH);
+        depthOverride = Math.min(depthOverride, REGISTRY_MAX_DEPTH);
+        System.out.printf("overrideDepth: %d, filter: %s%n", depthOverride, registryFilter);
+        try {
+            String name = "reject3";
+            DepthRejectableClass r1 = DepthRejectableClass.create(depthOverride + 1);
+            registry.bind(name, r1);
+            Assert.fail("Registry filter should have rejected depth: " + depthOverride + 1);
+        } catch (Exception rex) {
+            // Rejection expected
         }
     }
 
@@ -173,6 +207,7 @@
             return super.toString() + "//" + Objects.toString(obj);
         }
     }
+
     /**
      * A simple Serializable Remote object that is passed by value.
      * It and its contents are checked by the Registry serial filter.
@@ -183,4 +218,25 @@
         RejectableClass() {}
     }
 
+    /**
+     * A simple Serializable Remote object that is passed by value.
+     * It and its contents are checked by the Registry serial filter.
+     */
+    static class DepthRejectableClass implements Serializable, Remote {
+        private static final long serialVersionUID = 362498820763181264L;
+        private final DepthRejectableClass next;
+
+        private DepthRejectableClass(DepthRejectableClass next) {
+            this.next = next;
+        }
+
+        static DepthRejectableClass create(int depth) {
+            DepthRejectableClass next = new DepthRejectableClass(null);
+            for (int i = 1; i < depth; i++) {
+                next = new DepthRejectableClass(next);
+            }
+            return next;
+        }
+    }
+
 }
--- a/test/java/util/ResourceBundle/modules/appbasic/src/asiabundles/jdk/test/resources/asia/MyResourcesAsia.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/appbasic/src/asiabundles/jdk/test/resources/asia/MyResourcesAsia.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * 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
@@ -28,7 +28,7 @@
 import java.util.Set;
 import java.util.spi.AbstractResourceBundleProvider;
 
-import jdk.test.resources.MyResourcesProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesAsia extends AbstractResourceBundleProvider
     implements MyResourcesProvider
--- a/test/java/util/ResourceBundle/modules/appbasic/src/asiabundles/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/appbasic/src/asiabundles/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,6 +24,6 @@
 module asiabundles {
     requires test;
 
-    provides jdk.test.resources.MyResourcesProvider
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.asia.MyResourcesAsia;
 }
--- a/test/java/util/ResourceBundle/modules/appbasic/src/eubundles/jdk/test/resources/eu/MyResourcesEU.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/appbasic/src/eubundles/jdk/test/resources/eu/MyResourcesEU.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * 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
@@ -28,7 +28,7 @@
 import java.util.Set;
 import java.util.spi.AbstractResourceBundleProvider;
 
-import jdk.test.resources.MyResourcesProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesEU extends AbstractResourceBundleProvider
     implements MyResourcesProvider
--- a/test/java/util/ResourceBundle/modules/appbasic/src/eubundles/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/appbasic/src/eubundles/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,6 +24,6 @@
 module eubundles {
     requires test;
 
-    provides jdk.test.resources.MyResourcesProvider
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.eu.MyResourcesEU;
 }
--- a/test/java/util/ResourceBundle/modules/appbasic/src/test/jdk/test/resources/MyResourcesProvider.java	Fri Jun 02 18:40:55 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2015, 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.
- */
-
-package jdk.test.resources;
-
-import java.util.spi.ResourceBundleProvider;
-
-public interface MyResourcesProvider extends ResourceBundleProvider {
-}
--- a/test/java/util/ResourceBundle/modules/appbasic/src/test/jdk/test/resources/MyResourcesProviderImpl.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/appbasic/src/test/jdk/test/resources/MyResourcesProviderImpl.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * 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
@@ -26,6 +26,7 @@
 import java.util.Locale;
 import java.util.ResourceBundle;
 import java.util.spi.AbstractResourceBundleProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesProviderImpl extends AbstractResourceBundleProvider
     implements MyResourcesProvider
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/appbasic/src/test/jdk/test/resources/spi/MyResourcesProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,29 @@
+/*
+ * 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
+ * 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.
+ */
+
+package jdk.test.resources.spi;
+
+import java.util.spi.ResourceBundleProvider;
+
+public interface MyResourcesProvider extends ResourceBundleProvider {
+}
--- a/test/java/util/ResourceBundle/modules/appbasic/src/test/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/appbasic/src/test/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -22,7 +22,7 @@
  */
 
 module test {
-    exports jdk.test.resources to eubundles, asiabundles;
-    uses jdk.test.resources.MyResourcesProvider;
-    provides jdk.test.resources.MyResourcesProvider with jdk.test.resources.MyResourcesProviderImpl;
+    exports jdk.test.resources.spi to eubundles, asiabundles;
+    uses jdk.test.resources.spi.MyResourcesProvider;
+    provides jdk.test.resources.spi.MyResourcesProvider with jdk.test.resources.MyResourcesProviderImpl;
 }
--- a/test/java/util/ResourceBundle/modules/appbasic2/src/asiabundles/jdk/test/resources/asia/MyResourcesAsia.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/appbasic2/src/asiabundles/jdk/test/resources/asia/MyResourcesAsia.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,7 +24,7 @@
 package jdk.test.resources.asia;
 
 import java.util.Locale;
-import jdk.test.resources.MyResourcesProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesAsia extends MyResourcesProvider {
     public MyResourcesAsia() {
--- a/test/java/util/ResourceBundle/modules/appbasic2/src/asiabundles/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/appbasic2/src/asiabundles/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,6 +24,6 @@
 module asiabundles {
     requires test;
 
-    provides jdk.test.resources.MyResourcesProvider
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.asia.MyResourcesAsia;
 }
--- a/test/java/util/ResourceBundle/modules/appbasic2/src/eubundles/jdk/test/resources/eu/MyResourcesEU.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/appbasic2/src/eubundles/jdk/test/resources/eu/MyResourcesEU.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,7 +24,7 @@
 package jdk.test.resources.eu;
 
 import java.util.Locale;
-import jdk.test.resources.MyResourcesProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesEU extends MyResourcesProvider {
     public MyResourcesEU() {
--- a/test/java/util/ResourceBundle/modules/appbasic2/src/eubundles/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/appbasic2/src/eubundles/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,6 +24,6 @@
 module eubundles {
     requires test;
 
-    provides jdk.test.resources.MyResourcesProvider
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.eu.MyResourcesEU;
 }
--- a/test/java/util/ResourceBundle/modules/appbasic2/src/test/jdk/test/resources/MyResourcesProvider.java	Fri Jun 02 18:40:55 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2015, 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.
- */
-
-package jdk.test.resources;
-
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-import java.util.spi.AbstractResourceBundleProvider;
-
-public abstract class MyResourcesProvider extends AbstractResourceBundleProvider {
-    protected MyResourcesProvider(String... formats) {
-        super(formats);
-    }
-
-    @Override
-    public ResourceBundle getBundle(String baseName, Locale locale) {
-        if (isSupportedInModule(locale)) {
-            return super.getBundle(baseName, locale);
-        }
-        return null;
-    }
-
-    protected abstract boolean isSupportedInModule(Locale locale);
-}
--- a/test/java/util/ResourceBundle/modules/appbasic2/src/test/jdk/test/resources/MyResourcesProviderImpl.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/appbasic2/src/test/jdk/test/resources/MyResourcesProviderImpl.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,6 +24,7 @@
 package jdk.test.resources;
 
 import java.util.Locale;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesProviderImpl extends MyResourcesProvider {
     public MyResourcesProviderImpl() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/appbasic2/src/test/jdk/test/resources/spi/MyResourcesProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,45 @@
+/*
+ * 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
+ * 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.
+ */
+
+package jdk.test.resources.spi;
+
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public abstract class MyResourcesProvider extends AbstractResourceBundleProvider {
+    protected MyResourcesProvider(String... formats) {
+        super(formats);
+    }
+
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        if (isSupportedInModule(locale)) {
+            return super.getBundle(baseName, locale);
+        }
+        return null;
+    }
+
+    protected abstract boolean isSupportedInModule(Locale locale);
+}
--- a/test/java/util/ResourceBundle/modules/appbasic2/src/test/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/appbasic2/src/test/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -22,7 +22,7 @@
  */
 
 module test {
-    exports jdk.test.resources to eubundles, asiabundles;
-    uses jdk.test.resources.MyResourcesProvider;
-    provides jdk.test.resources.MyResourcesProvider with jdk.test.resources.MyResourcesProviderImpl;
+    exports jdk.test.resources.spi to eubundles, asiabundles;
+    uses jdk.test.resources.spi.MyResourcesProvider;
+    provides jdk.test.resources.spi.MyResourcesProvider with jdk.test.resources.MyResourcesProviderImpl;
 }
--- a/test/java/util/ResourceBundle/modules/basic/src/asiabundles/jdk/test/resources/asia/MyResourcesAsia.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/basic/src/asiabundles/jdk/test/resources/asia/MyResourcesAsia.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,7 +24,7 @@
 package jdk.test.resources.asia;
 
 import java.util.Locale;
-import jdk.test.resources.MyResourcesProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 /**
  *
--- a/test/java/util/ResourceBundle/modules/basic/src/asiabundles/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/basic/src/asiabundles/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,6 +24,6 @@
 module asiabundles {
     requires mainbundles;
 
-    provides jdk.test.resources.MyResourcesProvider
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.asia.MyResourcesAsia;
 }
--- a/test/java/util/ResourceBundle/modules/basic/src/eubundles/jdk/test/resources/eu/MyResourcesEU.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/basic/src/eubundles/jdk/test/resources/eu/MyResourcesEU.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,7 +24,7 @@
 package jdk.test.resources.eu;
 
 import java.util.Locale;
-import jdk.test.resources.MyResourcesProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 /**
  *
--- a/test/java/util/ResourceBundle/modules/basic/src/eubundles/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/basic/src/eubundles/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,6 +24,6 @@
 module eubundles {
     requires mainbundles;
 
-    provides jdk.test.resources.MyResourcesProvider
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.eu.MyResourcesEU;
 }
--- a/test/java/util/ResourceBundle/modules/basic/src/mainbundles/jdk/test/resources/MyResourcesMain.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/basic/src/mainbundles/jdk/test/resources/MyResourcesMain.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,6 +24,7 @@
 package jdk.test.resources;
 
 import java.util.Locale;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesMain extends MyResourcesProvider {
     public MyResourcesMain() {
--- a/test/java/util/ResourceBundle/modules/basic/src/mainbundles/jdk/test/resources/MyResourcesProvider.java	Fri Jun 02 18:40:55 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2015, 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.
- */
-
-package jdk.test.resources;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.ResourceBundle;
-import java.util.ResourceBundle.Control;
-import java.util.Set;
-import java.util.spi.AbstractResourceBundleProvider;
-
-
-public class MyResourcesProvider extends AbstractResourceBundleProvider {
-    private final String region;
-    private final Set<Locale> supportedLocales;
-    private final List<String> formats;
-
-    protected MyResourcesProvider() {
-        region = "";
-        supportedLocales = null;
-        formats = Collections.emptyList();
-    }
-
-    protected MyResourcesProvider(String format, String region, Locale... locales) {
-        super(format);
-        this.region = region;
-        this.supportedLocales = new HashSet<>(Arrays.asList(locales));
-        this.formats = Collections.singletonList(format);
-    }
-
-    @Override
-    public ResourceBundle getBundle(String baseName, Locale locale) {
-        if (isSupportedInModule(locale)) {
-           return super.getBundle(baseName, locale);
-        }
-        return null;
-    }
-
-    @Override
-    protected String toBundleName(String baseName, Locale locale) {
-        String name = addRegion(baseName);
-        return Control.getControl(Control.FORMAT_DEFAULT).toBundleName(name, locale);
-    }
-
-    private String addRegion(String baseName) {
-        if (region.isEmpty()) {
-            return baseName;
-        }
-        int index = baseName.lastIndexOf('.');
-        return baseName.substring(0, index + 1) + region + baseName.substring(index);
-    }
-
-    protected boolean isSupportedInModule(Locale locale) {
-        return supportedLocales.contains(locale);
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/basic/src/mainbundles/jdk/test/resources/spi/MyResourcesProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,80 @@
+/*
+ * 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
+ * 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.
+ */
+
+package jdk.test.resources.spi;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.ResourceBundle.Control;
+import java.util.Set;
+import java.util.spi.AbstractResourceBundleProvider;
+
+
+public class MyResourcesProvider extends AbstractResourceBundleProvider {
+    private final String region;
+    private final Set<Locale> supportedLocales;
+    private final List<String> formats;
+
+    protected MyResourcesProvider() {
+        region = "";
+        supportedLocales = null;
+        formats = Collections.emptyList();
+    }
+
+    protected MyResourcesProvider(String format, String region, Locale... locales) {
+        super(format);
+        this.region = region;
+        this.supportedLocales = new HashSet<>(Arrays.asList(locales));
+        this.formats = Collections.singletonList(format);
+    }
+
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        if (isSupportedInModule(locale)) {
+           return super.getBundle(baseName, locale);
+        }
+        return null;
+    }
+
+    @Override
+    protected String toBundleName(String baseName, Locale locale) {
+        String name = addRegion(baseName);
+        return Control.getControl(Control.FORMAT_DEFAULT).toBundleName(name, locale);
+    }
+
+    private String addRegion(String baseName) {
+        if (region.isEmpty()) {
+            return baseName;
+        }
+        int index = baseName.lastIndexOf('.');
+        return baseName.substring(0, index + 1) + region + baseName.substring(index);
+    }
+
+    protected boolean isSupportedInModule(Locale locale) {
+        return supportedLocales.contains(locale);
+    }
+}
--- a/test/java/util/ResourceBundle/modules/basic/src/mainbundles/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/basic/src/mainbundles/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -22,7 +22,7 @@
  */
 
 module mainbundles {
-    exports jdk.test.resources to test, eubundles, asiabundles;
-    provides jdk.test.resources.MyResourcesProvider
+    exports jdk.test.resources.spi to test, eubundles, asiabundles;
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.MyResourcesMain;
 }
--- a/test/java/util/ResourceBundle/modules/basic/src/test/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/basic/src/test/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -23,5 +23,5 @@
 
 module test {
     requires mainbundles;
-    uses jdk.test.resources.MyResourcesProvider;
+    uses jdk.test.resources.spi.MyResourcesProvider;
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/layer/run.sh	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 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
+# 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 8180375
+# @summary Tests resource bundles are correctly loaded from
+#   modules through "<packageName>.spi.<simpleName>Provider" types.
+
+set -e
+
+if [ -z "$TESTJAVA" ]; then
+  if [ $# -lt 1 ]; then exit 1; fi
+  TESTJAVA="$1"; shift
+  COMPILEJAVA="${TESTJAVA}"
+  TESTSRC="`pwd`"
+  TESTCLASSES="`pwd`"
+fi
+
+JAVAC="$COMPILEJAVA/bin/javac"
+JAVA="$TESTJAVA/bin/java"
+
+rm -rf mods
+$JAVAC --module-source-path $TESTSRC/src -d mods --module m1,m2
+
+mkdir -p mods/m1/p/resources mods/m2/p/resources
+cp $TESTSRC/src/m1/p/resources/*.properties mods/m1/p/resources
+cp $TESTSRC/src/m2/p/resources/*.properties mods/m2/p/resources
+
+mkdir classes
+$JAVAC -d classes $TESTSRC/src/Main.java
+
+$JAVA -cp classes Main
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/layer/src/Main.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 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
+ * 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.
+ */
+
+import java.lang.module.Configuration;
+import java.lang.module.ModuleFinder;
+import java.lang.reflect.Method;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+public class Main {
+    public static void main(String... args) throws Exception {
+        ModuleFinder afterFinder = ModuleFinder.of(Paths.get("mods"));
+
+        Configuration cf = ModuleLayer.boot().configuration()
+                .resolveAndBind(ModuleFinder.of(), afterFinder,
+                    List.of("m1", "m2"));
+
+        System.out.println("Configuration: " + cf);
+
+        ModuleLayer l = ModuleLayer.defineModulesWithManyLoaders(cf,
+                List.of(ModuleLayer.boot()),
+                        ClassLoader.getPlatformClassLoader())
+                .layer();
+
+        Module m1 = l.findModule("m1").get();
+        ResourceBundle bundle =
+            ResourceBundle.getBundle("p.resources.MyResource",
+                                     Locale.US, m1);
+        ResourceBundle jabundle =
+            ResourceBundle.getBundle("p.resources.MyResource",
+                                     Locale.JAPANESE, m1);
+
+        String enResult = bundle.getString("key");
+        String jaResult = jabundle.getString("key");
+        if (!"hi".equals(enResult) || !"ja".equals(jaResult)) {
+            throw new RuntimeException("Unexpected resources loaded: en: " +
+                                        enResult + ", ja: " + jaResult);
+        }
+
+        Class<?> c = Class.forName(m1, "p.Main");
+        Method m = c.getDeclaredMethod("run");
+        m.invoke(null);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/layer/src/m1/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 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
+ * 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.
+ */
+
+module m1 {
+    exports p;
+    exports p.resources.spi;
+    uses p.resources.spi.MyResourceProvider;
+    provides p.resources.spi.MyResourceProvider with p.internal.BundleProvider;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/layer/src/m1/p/Main.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 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
+ * 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.
+ */
+
+package p;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.io.InputStream;
+
+public class Main {
+    public static void main(String... args) {
+        run();
+    }
+
+    public static void run() {
+        ClassLoader loader =
+            Main.class.getModule().getLayer().findLoader("m1");
+        ClassLoader loader2 =
+            Main.class.getModule().getLayer().findLoader("m2");
+
+        ResourceBundle bundle =
+            ResourceBundle.getBundle("p.resources.MyResource", Locale.US);
+        ResourceBundle bundle1 =
+            ResourceBundle.getBundle("p.resources.MyResource", Locale.JAPANESE);
+
+        String enResult = bundle.getString("key");
+        String jaResult = bundle1.getString("key");
+        if (!"hi".equals(enResult) || !"ja".equals(jaResult)) {
+            throw new RuntimeException("Unexpected resources loaded: en: " +
+                                        enResult + ", ja: " + jaResult);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/layer/src/m1/p/internal/BundleProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 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
+ * 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.
+ */
+
+package p.internal;
+
+import p.resources.spi.MyResourceProvider;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UncheckedIOException;
+import java.util.Locale;
+import java.util.PropertyResourceBundle;
+import java.util.ResourceBundle;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public class BundleProvider extends AbstractResourceBundleProvider
+    implements MyResourceProvider {
+    public BundleProvider() {
+        super();
+    }
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        if (locale.equals(Locale.ENGLISH) || locale.equals(Locale.ROOT)) {
+            return super.getBundle(baseName, locale);
+        }
+
+        return null;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/layer/src/m1/p/resources/MyResource.properties	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 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
+# 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.
+#
+
+key=hi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/layer/src/m1/p/resources/spi/MyResourceProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 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
+ * 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.
+ */
+
+package p.resources.spi;
+
+import java.util.spi.ResourceBundleProvider;
+
+
+public interface MyResourceProvider extends ResourceBundleProvider {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/layer/src/m2/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 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
+ * 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.
+ */
+
+module m2 {
+    requires m1;
+    provides p.resources.spi.MyResourceProvider with p.internal.BundleProvider;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/layer/src/m2/p/internal/BundleProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 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
+ * 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.
+ */
+
+package p.internal;
+
+import p.resources.spi.MyResourceProvider;
+
+
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public class BundleProvider extends AbstractResourceBundleProvider
+    implements MyResourceProvider {
+    public BundleProvider() {
+        super();
+    }
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        if (locale.equals(Locale.JAPANESE)) {
+            return super.getBundle(baseName, locale);
+        }
+        return null;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/layer/src/m2/p/resources/MyResource_ja.properties	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 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
+# 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.
+#
+
+key=ja
--- a/test/java/util/ResourceBundle/modules/simple/src/bundles/jdk/test/resources/MyResourcesProvider.java	Fri Jun 02 18:40:55 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2015, 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.
- */
-
-package jdk.test.resources;
-
-import java.util.Locale;
-import java.util.spi.AbstractResourceBundleProvider;
-
-public class MyResourcesProvider extends AbstractResourceBundleProvider {
-    public MyResourcesProvider() {
-        super("java.class", "java.properties");
-        System.err.println("MyResourcesProvider called " + this);
-    }
-
-    @Override
-    protected String toBundleName(String baseName, Locale locale) {
-        StringBuilder sb = new StringBuilder(baseName);
-        String lang = locale.getLanguage();
-        if (!lang.isEmpty()) {
-            sb.append('_').append(lang);
-            String country = locale.getCountry();
-            if (!country.isEmpty()) {
-                sb.append('_').append(country);
-            }
-        }
-        return sb.toString();
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/simple/src/bundles/jdk/test/resources/spi/MyResourcesProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,48 @@
+/*
+ * 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
+ * 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.
+ */
+
+package jdk.test.resources.spi;
+
+import java.util.Locale;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public class MyResourcesProvider extends AbstractResourceBundleProvider {
+    public MyResourcesProvider() {
+        super("java.class", "java.properties");
+        System.err.println("MyResourcesProvider called " + this);
+    }
+
+    @Override
+    protected String toBundleName(String baseName, Locale locale) {
+        StringBuilder sb = new StringBuilder(baseName);
+        String lang = locale.getLanguage();
+        if (!lang.isEmpty()) {
+            sb.append('_').append(lang);
+            String country = locale.getCountry();
+            if (!country.isEmpty()) {
+                sb.append('_').append(country);
+            }
+        }
+        return sb.toString();
+    }
+}
--- a/test/java/util/ResourceBundle/modules/simple/src/bundles/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/simple/src/bundles/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -22,6 +22,6 @@
  */
 
 module bundles {
-    exports jdk.test.resources to test;
-    provides jdk.test.resources.MyResourcesProvider with jdk.test.resources.MyResourcesProvider;
+    exports jdk.test.resources.spi to test;
+    provides jdk.test.resources.spi.MyResourcesProvider with jdk.test.resources.spi.MyResourcesProvider;
 }
--- a/test/java/util/ResourceBundle/modules/simple/src/test/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/simple/src/test/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,5 +24,5 @@
 module test {
     requires bundles;
 
-    uses jdk.test.resources.MyResourcesProvider;
+    uses jdk.test.resources.spi.MyResourcesProvider;
 }
--- a/test/java/util/ResourceBundle/modules/visibility/src/exported.named.bundles/jdk/test/resources/exported/classes/MyResourcesProvider.java	Fri Jun 02 18:40:55 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2015, 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.
- */
-
-package jdk.test.resources.exported.classes;
-
-import java.util.Locale;
-import java.util.spi.AbstractResourceBundleProvider;
-
-public class MyResourcesProvider extends AbstractResourceBundleProvider {
-    public MyResourcesProvider() {
-        super("java.class", "java.properties");
-        System.err.println("MyResourcesProvider called " + this);
-    }
-
-    @Override
-    protected String toBundleName(String baseName, Locale locale) {
-        StringBuilder sb = new StringBuilder(baseName);
-        String lang = locale.getLanguage();
-        if (!lang.isEmpty()) {
-            sb.append('_').append(lang);
-            String country = locale.getCountry();
-            if (!country.isEmpty()) {
-                sb.append('_').append(country);
-            }
-        }
-        return sb.toString();
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/visibility/src/exported.named.bundles/jdk/test/resources/exported/classes/spi/MyResourcesProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,48 @@
+/*
+ * 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
+ * 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.
+ */
+
+package jdk.test.resources.exported.classes.spi;
+
+import java.util.Locale;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public class MyResourcesProvider extends AbstractResourceBundleProvider {
+    public MyResourcesProvider() {
+        super("java.class", "java.properties");
+        System.err.println("MyResourcesProvider called " + this);
+    }
+
+    @Override
+    protected String toBundleName(String baseName, Locale locale) {
+        StringBuilder sb = new StringBuilder(baseName);
+        String lang = locale.getLanguage();
+        if (!lang.isEmpty()) {
+            sb.append('_').append(lang);
+            String country = locale.getCountry();
+            if (!country.isEmpty()) {
+                sb.append('_').append(country);
+            }
+        }
+        return sb.toString();
+    }
+}
--- a/test/java/util/ResourceBundle/modules/visibility/src/exported.named.bundles/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/visibility/src/exported.named.bundles/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -25,6 +25,6 @@
     // unqualified exports to verify that resource bundles are not picked
     // up by other named modules
     exports jdk.test.resources.exported.classes;
-    provides jdk.test.resources.exported.classes.MyResourcesProvider
-        with jdk.test.resources.exported.classes.MyResourcesProvider;
+    provides jdk.test.resources.exported.classes.spi.MyResourcesProvider
+        with jdk.test.resources.exported.classes.spi.MyResourcesProvider;
 }
--- a/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/classes/MyResourcesProvider.java	Fri Jun 02 18:40:55 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2015, 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.
- */
-
-package jdk.test.resources.classes;
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-import java.util.spi.AbstractResourceBundleProvider;
-
-public class MyResourcesProvider extends AbstractResourceBundleProvider {
-    public MyResourcesProvider() {
-        super("java.class");
-    }
-
-    @Override
-    protected String toBundleName(String baseName, Locale locale) {
-        StringBuilder sb = new StringBuilder(baseName);
-        String lang = locale.getLanguage();
-        if (!lang.isEmpty()) {
-            sb.append('_').append(lang);
-            String country = locale.getCountry();
-            if (!country.isEmpty()) {
-                sb.append('_').append(country);
-            }
-        }
-        return sb.toString();
-    }
-
-    @Override
-    public ResourceBundle getBundle(String baseName, Locale locale) {
-        ResourceBundle rb = super.getBundle(baseName, locale);
-        String tag = locale.toLanguageTag();
-        if (tag.equals("und")) {
-            tag = "ROOT"; // to a human friendly name
-        }
-        System.out.printf("    MyResourcesProvider.getBundle(%s, %s)%n         -> %s%n",
-                          baseName, tag, rb);
-        return rb;
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/classes/spi/MyResourcesProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,60 @@
+/*
+ * 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
+ * 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.
+ */
+
+package jdk.test.resources.classes.spi;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public class MyResourcesProvider extends AbstractResourceBundleProvider {
+    public MyResourcesProvider() {
+        super("java.class");
+    }
+
+    @Override
+    protected String toBundleName(String baseName, Locale locale) {
+        StringBuilder sb = new StringBuilder(baseName);
+        String lang = locale.getLanguage();
+        if (!lang.isEmpty()) {
+            sb.append('_').append(lang);
+            String country = locale.getCountry();
+            if (!country.isEmpty()) {
+                sb.append('_').append(country);
+            }
+        }
+        return sb.toString();
+    }
+
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        ResourceBundle rb = super.getBundle(baseName, locale);
+        String tag = locale.toLanguageTag();
+        if (tag.equals("und")) {
+            tag = "ROOT"; // to a human friendly name
+        }
+        System.out.printf("    MyResourcesProvider.getBundle(%s, %s)%n         -> %s%n",
+                          baseName, tag, rb);
+        return rb;
+    }
+}
--- a/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/props/MyResourcesProvider.java	Fri Jun 02 18:40:55 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2015, 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.
- */
-
-package jdk.test.resources.props;
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-import java.util.spi.AbstractResourceBundleProvider;
-
-public class MyResourcesProvider extends AbstractResourceBundleProvider {
-    public MyResourcesProvider() {
-        super("java.properties");
-    }
-
-    @Override
-    protected String toBundleName(String baseName, Locale locale) {
-        StringBuilder sb = new StringBuilder(baseName);
-        String lang = locale.getLanguage();
-        if (!lang.isEmpty()) {
-            sb.append('_').append(lang);
-            String country = locale.getCountry();
-            if (!country.isEmpty()) {
-                sb.append('_').append(country);
-            }
-        }
-        return sb.toString();
-    }
-
-    @Override
-    public ResourceBundle getBundle(String baseName, Locale locale) {
-        ResourceBundle rb = super.getBundle(baseName, locale);
-        String tag = locale.toLanguageTag();
-        if (tag.equals("und")) {
-            tag = "ROOT"; // to a human friendly name
-        }
-        System.out.printf("    MyResourcesProvider.getBundle(%s, %s)%n         -> %s%n",
-                          baseName, tag, rb);
-        return rb;
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/props/spi/MyResourcesProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,60 @@
+/*
+ * 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
+ * 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.
+ */
+
+package jdk.test.resources.props.spi;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public class MyResourcesProvider extends AbstractResourceBundleProvider {
+    public MyResourcesProvider() {
+        super("java.properties");
+    }
+
+    @Override
+    protected String toBundleName(String baseName, Locale locale) {
+        StringBuilder sb = new StringBuilder(baseName);
+        String lang = locale.getLanguage();
+        if (!lang.isEmpty()) {
+            sb.append('_').append(lang);
+            String country = locale.getCountry();
+            if (!country.isEmpty()) {
+                sb.append('_').append(country);
+            }
+        }
+        return sb.toString();
+    }
+
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        ResourceBundle rb = super.getBundle(baseName, locale);
+        String tag = locale.toLanguageTag();
+        if (tag.equals("und")) {
+            tag = "ROOT"; // to a human friendly name
+        }
+        System.out.printf("    MyResourcesProvider.getBundle(%s, %s)%n         -> %s%n",
+                          baseName, tag, rb);
+        return rb;
+    }
+}
--- a/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -22,10 +22,10 @@
  */
 
 module named.bundles {
-    exports jdk.test.resources.classes to test; // exports only to test
-    exports jdk.test.resources.props to test;   // exports only to test
-    provides jdk.test.resources.classes.MyResourcesProvider
-        with jdk.test.resources.classes.MyResourcesProvider;
-    provides jdk.test.resources.props.MyResourcesProvider
-        with jdk.test.resources.props.MyResourcesProvider;
+    exports jdk.test.resources.classes.spi to test; // exports only to test
+    exports jdk.test.resources.props.spi to test;   // exports only to test
+    provides jdk.test.resources.classes.spi.MyResourcesProvider
+        with jdk.test.resources.classes.spi.MyResourcesProvider;
+    provides jdk.test.resources.props.spi.MyResourcesProvider
+        with jdk.test.resources.props.spi.MyResourcesProvider;
 }
--- a/test/java/util/ResourceBundle/modules/visibility/src/test/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/visibility/src/test/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -22,8 +22,8 @@
  */
 
 module test {
-    // jdk.test.resources.classes.MyResourcesProvider is in named.bundles.
+    // jdk.test.resources.classes.spi.MyResourcesProvider is in named.bundles.
     requires named.bundles;
-    uses jdk.test.resources.classes.MyResourcesProvider;
-    uses jdk.test.resources.props.MyResourcesProvider;
+    uses jdk.test.resources.classes.spi.MyResourcesProvider;
+    uses jdk.test.resources.props.spi.MyResourcesProvider;
 }
--- a/test/java/util/ResourceBundle/modules/xmlformat/src/bundles/jdk/test/resources/MyResourcesProvider.java	Fri Jun 02 18:40:55 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2015, 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.
- */
-
-package jdk.test.resources;
-
-import java.io.BufferedInputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.ResourceBundle;
-import java.util.spi.ResourceBundleProvider;
-
-public class MyResourcesProvider implements ResourceBundleProvider {
-    @Override
-    public ResourceBundle getBundle(String baseName, Locale locale) {
-        String xmlName = toXMLName(baseName, locale);
-        try (InputStream is = this.getClass().getModule().getResourceAsStream(xmlName)) {
-            return new XMLResourceBundle(new BufferedInputStream(is));
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private String toXMLName(String baseName, Locale locale) {
-        StringBuilder sb = new StringBuilder(baseName.replace('.', '/'));
-        String lang = locale.getLanguage();
-        if (!lang.isEmpty()) {
-            sb.append('_').append(lang);
-            String country = locale.getCountry();
-            if (!country.isEmpty()) {
-                sb.append('_').append(country);
-            }
-        }
-        return sb.append(".xml").toString();
-    }
-
-    private static class XMLResourceBundle extends ResourceBundle {
-        private Properties props;
-
-        XMLResourceBundle(InputStream stream) throws IOException {
-            props = new Properties();
-            props.loadFromXML(stream);
-        }
-
-        @Override
-        protected Object handleGetObject(String key) {
-            if (key == null) {
-                throw new NullPointerException();
-            }
-            return props.get(key);
-        }
-
-        @Override
-        public Enumeration<String> getKeys() {
-            // Not implemented
-            return null;
-        }
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/ResourceBundle/modules/xmlformat/src/bundles/jdk/test/resources/spi/MyResourcesProvider.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,81 @@
+/*
+ * 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
+ * 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.
+ */
+
+package jdk.test.resources.spi;
+
+import java.io.BufferedInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.ResourceBundle;
+import java.util.spi.ResourceBundleProvider;
+
+public class MyResourcesProvider implements ResourceBundleProvider {
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        String xmlName = toXMLName(baseName, locale);
+        try (InputStream is = this.getClass().getModule().getResourceAsStream(xmlName)) {
+            return new XMLResourceBundle(new BufferedInputStream(is));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private String toXMLName(String baseName, Locale locale) {
+        StringBuilder sb = new StringBuilder(baseName.replace('.', '/'));
+        String lang = locale.getLanguage();
+        if (!lang.isEmpty()) {
+            sb.append('_').append(lang);
+            String country = locale.getCountry();
+            if (!country.isEmpty()) {
+                sb.append('_').append(country);
+            }
+        }
+        return sb.append(".xml").toString();
+    }
+
+    private static class XMLResourceBundle extends ResourceBundle {
+        private Properties props;
+
+        XMLResourceBundle(InputStream stream) throws IOException {
+            props = new Properties();
+            props.loadFromXML(stream);
+        }
+
+        @Override
+        protected Object handleGetObject(String key) {
+            if (key == null) {
+                throw new NullPointerException();
+            }
+            return props.get(key);
+        }
+
+        @Override
+        public Enumeration<String> getKeys() {
+            // Not implemented
+            return null;
+        }
+    }
+}
--- a/test/java/util/ResourceBundle/modules/xmlformat/src/bundles/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/xmlformat/src/bundles/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -22,6 +22,6 @@
  */
 
 module bundles {
-    exports jdk.test.resources to test;
-    provides jdk.test.resources.MyResourcesProvider with jdk.test.resources.MyResourcesProvider;
+    exports jdk.test.resources.spi to test;
+    provides jdk.test.resources.spi.MyResourcesProvider with jdk.test.resources.spi.MyResourcesProvider;
 }
--- a/test/java/util/ResourceBundle/modules/xmlformat/src/test/module-info.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/java/util/ResourceBundle/modules/xmlformat/src/test/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 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
@@ -24,5 +24,5 @@
 module test {
     requires bundles;
 
-    uses jdk.test.resources.MyResourcesProvider;
+    uses jdk.test.resources.spi.MyResourcesProvider;
 }
--- a/test/tools/launcher/modules/patch/systemmodules/PatchSystemModules.java	Fri Jun 02 18:40:55 2017 +0300
+++ b/test/tools/launcher/modules/patch/systemmodules/PatchSystemModules.java	Mon Jun 05 11:00:25 2017 -0700
@@ -51,7 +51,6 @@
     private static final String JAVA_HOME = System.getProperty("java.home");
 
     private static final Path TEST_SRC = Paths.get(System.getProperty("test.src"));
-    private static final Path PATCH_SRC_DIR = TEST_SRC.resolve("src1");
 
     private static final Path JMODS = Paths.get(JAVA_HOME, "jmods");
     private static final Path MODS_DIR = Paths.get("mods");
@@ -66,6 +65,8 @@
     @BeforeTest
     private void setup() throws Throwable {
         Path src = TEST_SRC.resolve("src");
+        Path src1 = TEST_SRC.resolve("src1");
+
         for (String name : modules) {
             assertTrue(CompilerUtils.compile(src.resolve(name),
                                              MODS_DIR,
@@ -73,11 +74,11 @@
         }
 
         // compile patched source
-        String patchDir = PATCH_SRC_DIR.resolve(JAVA_BASE).toString();
-        assertTrue(CompilerUtils.compile(PATCH_SRC_DIR.resolve(JAVA_BASE),
+        String patchDir = src1.resolve(JAVA_BASE).toString();
+        assertTrue(CompilerUtils.compile(src1.resolve(JAVA_BASE),
                                          PATCH_DIR.resolve(JAVA_BASE),
                                          "--patch-module", "java.base=" + patchDir));
-        assertTrue(CompilerUtils.compile(PATCH_SRC_DIR.resolve("m2"),
+        assertTrue(CompilerUtils.compile(src1.resolve("m2"),
                                          PATCH_DIR.resolve("m2")));
 
         createJars();
@@ -88,10 +89,16 @@
             createImage();
         }
 
-        // create new copy of m1.jar
+        // compile a different version of m1
+        Path tmp = Paths.get("tmp");
+        assertTrue(CompilerUtils.compile(src1.resolve("m1"), tmp,
+                                         "--module-path", MODS_DIR.toString(),
+                                         "--module-source-path", src1.toString()));
+
+        // package new_m1.jar
         jar("--create",
             "--file=" + NEW_M1_JAR.toString(),
-            "-C", MODS_DIR.resolve("m1").toString(), ".");
+            "-C", tmp.resolve("m1").toString(), ".");
     }
 
     /*
@@ -150,13 +157,13 @@
         // Fail to upgrade m1.jar with mismatched hash
         runTestWithExitCode(getJava(IMAGE),
                 "--upgrade-module-path", NEW_M1_JAR.toString(),
-                "-m", "m1/p1.Main", "ShouldNeverRun");
+                "-m", "m1/p1.Main");
 
         // test when SystemModules fast path is not enabled, i.e. exploded image
         runTestWithExitCode(getJava(IMAGE),
                 "--patch-module", "java.base=" + PATCH_DIR.resolve(JAVA_BASE),
                 "--upgrade-module-path", NEW_M1_JAR.toString(),
-                "-m", "m1/p1.Main", "ShouldNeverRun");
+                "-m", "m1/p1.Main");
     }
 
     /*
@@ -173,14 +180,14 @@
         runTestWithExitCode(getJava(IMAGE),
                 "--patch-module", "m1=.jar",
                 "--upgrade-module-path", NEW_M1_JAR.toString(),
-                "-m", "m1/p1.Main", "ShouldNeverRun");
+                "-m", "m1/p1.Main");
 
         // test when SystemModules fast path is not enabled, i.e. exploded image
         runTestWithExitCode(getJava(IMAGE),
                 "--patch-module", "java.base=" + PATCH_DIR.resolve(JAVA_BASE),
                 "--patch-module", "m1=.jar",
                 "--upgrade-module-path", NEW_M1_JAR.toString(),
-                "-m", "m1/p1.Main", "ShouldNeverRun");
+                "-m", "m1/p1.Main");
     }
 
     private void runTestWithExitCode(String... options) throws Throwable {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/launcher/modules/patch/systemmodules/src1/m1/module-info.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,26 @@
+/**
+ * Copyright (c) 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
+ * 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.
+ */
+
+module m1 {
+    requires m2;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/launcher/modules/patch/systemmodules/src1/m1/p1/Main.java	Mon Jun 05 11:00:25 2017 -0700
@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) 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
+ * 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.
+ */
+
+package p1;
+
+public class Main {
+    public static void main(String[] args) throws Exception {
+        throw new RuntimeException("should not reach here");
+    }
+}