Merge
authorlana
Thu, 01 Jun 2017 18:48:56 +0000
changeset 45438 243c3da2cb0c
parent 45383 256e2cdc130a (current diff)
parent 45437 c48b8edad8dd (diff)
child 45439 5673d77a787b
Merge
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/src/classes/build/tools/jigsaw/ListPackages.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/lang/RuntimePermission.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/RuntimePermission.java	Thu Jun 01 18:48:56 2017 +0000
@@ -403,6 +403,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class RuntimePermission extends BasicPermission {
--- a/jdk/src/java.base/share/classes/java/lang/invoke/package-info.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/package-info.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/lang/module/package-info.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/module/package-info.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/lang/package-info.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/package-info.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/lang/reflect/Array.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Array.java	Thu Jun 01 18:48:56 2017 +0000
@@ -36,6 +36,7 @@
  * conversion would occur.
  *
  * @author Nakul Saraiya
+ * @since 1.1
  */
 public final
 class Array {
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Constructor.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Constructor.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/lang/reflect/Field.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Field.java	Thu Jun 01 18:48:56 2017 +0000
@@ -60,6 +60,7 @@
  *
  * @author Kenneth Russell
  * @author Nakul Saraiya
+ * @since 1.1
  */
 public final
 class Field extends AccessibleObject implements Member {
--- a/jdk/src/java.base/share/classes/java/lang/reflect/InvocationTargetException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/InvocationTargetException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -38,6 +38,7 @@
  *
  * @see Method
  * @see Constructor
+ * @since 1.1
  */
 public class InvocationTargetException extends ReflectiveOperationException {
     /**
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Member.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Member.java	Thu Jun 01 18:48:56 2017 +0000
@@ -35,6 +35,7 @@
  * @see Constructor
  *
  * @author Nakul Saraiya
+ * @since 1.1
  */
 public
 interface Member {
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Method.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Method.java	Thu Jun 01 18:48:56 2017 +0000
@@ -63,6 +63,7 @@
  *
  * @author Kenneth Russell
  * @author Nakul Saraiya
+ * @since 1.1
  */
 public final class Method extends Executable {
     private Class<?>            clazz;
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Modifier.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Modifier.java	Thu Jun 01 18:48:56 2017 +0000
@@ -43,6 +43,7 @@
  *
  * @author Nakul Saraiya
  * @author Kenneth Russell
+ * @since 1.1
  */
 public class Modifier {
 
--- a/jdk/src/java.base/share/classes/java/math/BigDecimal.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/math/BigDecimal.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/net/InetAddress.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/InetAddress.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/net/NetPermission.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/NetPermission.java	Thu Jun 01 18:48:56 2017 +0000
@@ -167,6 +167,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class NetPermission extends BasicPermission {
--- a/jdk/src/java.base/share/classes/java/net/SocketOptions.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/SocketOptions.java	Thu Jun 01 18:48:56 2017 +0000
@@ -40,6 +40,7 @@
  * DatagramSocket and MulticastSocket.
  *
  * @author David Brown
+ * @since 1.1
  */
 
 
--- a/jdk/src/java.base/share/classes/java/net/SocketPermission.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/SocketPermission.java	Thu Jun 01 18:48:56 2017 +0000
@@ -142,6 +142,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  *
  * @serial exclude
  */
--- a/jdk/src/java.base/share/classes/java/net/URI.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/URI.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/net/doc-files/net-properties.html	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/doc-files/net-properties.html	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/nio/channels/package-info.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/channels/package-info.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/nio/charset/package-info.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/charset/package-info.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/nio/file/attribute/package-info.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/file/attribute/package-info.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/nio/file/package-info.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/file/package-info.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/nio/package-info.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/package-info.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/AccessControlContext.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/AccessControlContext.java	Thu Jun 01 18:48:56 2017 +0000
@@ -74,6 +74,7 @@
  * @see AccessController
  *
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class AccessControlContext {
--- a/jdk/src/java.base/share/classes/java/security/AccessControlException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/AccessControlException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -38,6 +38,7 @@
  *
  * @author Li Gong
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public class AccessControlException extends SecurityException {
--- a/jdk/src/java.base/share/classes/java/security/AccessController.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/AccessController.java	Thu Jun 01 18:48:56 2017 +0000
@@ -259,6 +259,7 @@
  *
  * @author Li Gong
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class AccessController {
--- a/jdk/src/java.base/share/classes/java/security/AlgorithmParameterGenerator.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/AlgorithmParameterGenerator.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/AlgorithmParameterGeneratorSpi.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/AlgorithmParameterGeneratorSpi.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/AllPermission.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/AllPermission.java	Thu Jun 01 18:48:56 2017 +0000
@@ -51,6 +51,7 @@
  *
  *
  * @author Roland Schemers
+ * @since 1.2
  *
  * @serial exclude
  */
--- a/jdk/src/java.base/share/classes/java/security/BasicPermission.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/BasicPermission.java	Thu Jun 01 18:48:56 2017 +0000
@@ -62,6 +62,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public abstract class BasicPermission extends Permission
--- a/jdk/src/java.base/share/classes/java/security/Certificate.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Certificate.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/CodeSource.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/CodeSource.java	Thu Jun 01 18:48:56 2017 +0000
@@ -44,6 +44,7 @@
  *
  * @author Li Gong
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public class CodeSource implements java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/DigestException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/DigestException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -29,6 +29,7 @@
  * This is the generic Message Digest exception.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 public class DigestException extends GeneralSecurityException {
 
--- a/jdk/src/java.base/share/classes/java/security/DigestInputStream.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/DigestInputStream.java	Thu Jun 01 18:48:56 2017 +0000
@@ -59,6 +59,7 @@
  * @see DigestOutputStream
  *
  * @author Benjamin Renaud
+ * @since 1.2
  */
 
 public class DigestInputStream extends FilterInputStream {
--- a/jdk/src/java.base/share/classes/java/security/DigestOutputStream.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/DigestOutputStream.java	Thu Jun 01 18:48:56 2017 +0000
@@ -51,6 +51,7 @@
  * @see DigestInputStream
  *
  * @author Benjamin Renaud
+ * @since 1.2
  */
 public class DigestOutputStream extends FilterOutputStream {
 
--- a/jdk/src/java.base/share/classes/java/security/GeneralSecurityException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/GeneralSecurityException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -31,6 +31,7 @@
  * security-related exception classes that extend from it.
  *
  * @author Jan Luehe
+ * @since 1.2
  */
 
 public class GeneralSecurityException extends Exception {
--- a/jdk/src/java.base/share/classes/java/security/Guard.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Guard.java	Thu Jun 01 18:48:56 2017 +0000
@@ -38,6 +38,7 @@
  *
  * @author Roland Schemers
  * @author Li Gong
+ * @since 1.2
  */
 
 public interface Guard {
--- a/jdk/src/java.base/share/classes/java/security/GuardedObject.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/GuardedObject.java	Thu Jun 01 18:48:56 2017 +0000
@@ -44,6 +44,7 @@
  *
  * @author Roland Schemers
  * @author Li Gong
+ * @since 1.2
  */
 
 public class GuardedObject implements java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/Identity.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Identity.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/IdentityScope.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/IdentityScope.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/InvalidKeyException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/InvalidKeyException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -31,6 +31,7 @@
  * length, uninitialized, etc).
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class InvalidKeyException extends KeyException {
--- a/jdk/src/java.base/share/classes/java/security/InvalidParameterException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/InvalidParameterException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -31,6 +31,7 @@
  * to a method.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class InvalidParameterException extends IllegalArgumentException {
--- a/jdk/src/java.base/share/classes/java/security/Key.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Key.java	Thu Jun 01 18:48:56 2017 +0000
@@ -97,6 +97,7 @@
  * @see Signer
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public interface Key extends java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/KeyException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/KeyException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -33,6 +33,7 @@
  * @see KeyManagementException
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class KeyException extends GeneralSecurityException {
--- a/jdk/src/java.base/share/classes/java/security/KeyManagementException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/KeyManagementException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -38,6 +38,7 @@
  * </ul>
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  * @see Key
  * @see KeyException
--- a/jdk/src/java.base/share/classes/java/security/KeyPair.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/KeyPair.java	Thu Jun 01 18:48:56 2017 +0000
@@ -36,6 +36,7 @@
  * @see PrivateKey
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public final class KeyPair implements java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/KeyPairGenerator.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/KeyPairGenerator.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/KeyPairGeneratorSpi.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/KeyPairGeneratorSpi.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/MessageDigest.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/MessageDigest.java	Thu Jun 01 18:48:56 2017 +0000
@@ -96,6 +96,7 @@
  * other algorithms are supported.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  * @see DigestInputStream
  * @see DigestOutputStream
--- a/jdk/src/java.base/share/classes/java/security/MessageDigestSpi.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/MessageDigestSpi.java	Thu Jun 01 18:48:56 2017 +0000
@@ -43,6 +43,7 @@
  * <p> Implementations are free to implement the Cloneable interface.
  *
  * @author Benjamin Renaud
+ * @since 1.2
  *
  *
  * @see MessageDigest
--- a/jdk/src/java.base/share/classes/java/security/NoSuchAlgorithmException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/NoSuchAlgorithmException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -30,6 +30,7 @@
  * requested but is not available in the environment.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class NoSuchAlgorithmException extends GeneralSecurityException {
--- a/jdk/src/java.base/share/classes/java/security/NoSuchProviderException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/NoSuchProviderException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -30,6 +30,7 @@
  * requested but is not available in the environment.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class NoSuchProviderException extends GeneralSecurityException {
--- a/jdk/src/java.base/share/classes/java/security/Permission.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Permission.java	Thu Jun 01 18:48:56 2017 +0000
@@ -60,6 +60,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public abstract class Permission implements Guard, java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/PermissionCollection.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/PermissionCollection.java	Thu Jun 01 18:48:56 2017 +0000
@@ -91,6 +91,7 @@
  *
  *
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public abstract class PermissionCollection implements java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/Permissions.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Permissions.java	Thu Jun 01 18:48:56 2017 +0000
@@ -75,6 +75,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  *
  * @serial exclude
  */
--- a/jdk/src/java.base/share/classes/java/security/Policy.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Policy.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/Principal.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Principal.java	Thu Jun 01 18:48:56 2017 +0000
@@ -35,6 +35,7 @@
  * @see java.security.cert.X509Certificate
  *
  * @author Li Gong
+ * @since 1.1
  */
 public interface Principal {
 
--- a/jdk/src/java.base/share/classes/java/security/PrivateKey.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/PrivateKey.java	Thu Jun 01 18:48:56 2017 +0000
@@ -54,6 +54,7 @@
  *
  * @author Benjamin Renaud
  * @author Josh Bloch
+ * @since 1.1
  */
 
 public interface PrivateKey extends Key, javax.security.auth.Destroyable {
--- a/jdk/src/java.base/share/classes/java/security/PrivilegedAction.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/PrivilegedAction.java	Thu Jun 01 18:48:56 2017 +0000
@@ -34,6 +34,7 @@
  * throw checked exceptions must use {@code PrivilegedExceptionAction}
  * instead.
  *
+ * @since 1.2
  * @see AccessController
  * @see AccessController#doPrivileged(PrivilegedAction)
  * @see PrivilegedExceptionAction
--- a/jdk/src/java.base/share/classes/java/security/PrivilegedActionException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/PrivilegedActionException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/PrivilegedExceptionAction.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/PrivilegedExceptionAction.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/ProtectionDomain.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/ProtectionDomain.java	Thu Jun 01 18:48:56 2017 +0000
@@ -59,6 +59,7 @@
  * @author Li Gong
  * @author Roland Schemers
  * @author Gary Ellison
+ * @since 1.2
  */
 
 public class ProtectionDomain {
--- a/jdk/src/java.base/share/classes/java/security/Provider.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Provider.java	Thu Jun 01 18:48:56 2017 +0000
@@ -102,6 +102,7 @@
  *
  * @author Benjamin Renaud
  * @author Andreas Sterbenz
+ * @since 1.1
  */
 public abstract class Provider extends Properties {
 
--- a/jdk/src/java.base/share/classes/java/security/ProviderException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/ProviderException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -32,6 +32,7 @@
  * throw specialized, provider-specific runtime errors.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 public class ProviderException extends RuntimeException {
 
--- a/jdk/src/java.base/share/classes/java/security/PublicKey.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/PublicKey.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/SecureClassLoader.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/SecureClassLoader.java	Thu Jun 01 18:48:56 2017 +0000
@@ -39,6 +39,7 @@
  *
  * @author  Li Gong
  * @author  Roland Schemers
+ * @since 1.2
  */
 public class SecureClassLoader extends ClassLoader {
     /*
--- a/jdk/src/java.base/share/classes/java/security/SecureRandom.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/SecureRandom.java	Thu Jun 01 18:48:56 2017 +0000
@@ -143,6 +143,7 @@
  *
  * @author Benjamin Renaud
  * @author Josh Bloch
+ * @since 1.1
  */
 
 public class SecureRandom extends java.util.Random {
--- a/jdk/src/java.base/share/classes/java/security/Security.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Security.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/SecurityPermission.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/SecurityPermission.java	Thu Jun 01 18:48:56 2017 +0000
@@ -333,6 +333,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class SecurityPermission extends BasicPermission {
--- a/jdk/src/java.base/share/classes/java/security/Signature.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Signature.java	Thu Jun 01 18:48:56 2017 +0000
@@ -113,6 +113,7 @@
  * other algorithms are supported.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  */
 
--- a/jdk/src/java.base/share/classes/java/security/SignatureException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/SignatureException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -29,6 +29,7 @@
  * This is the generic Signature exception.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class SignatureException extends GeneralSecurityException {
--- a/jdk/src/java.base/share/classes/java/security/SignatureSpi.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/SignatureSpi.java	Thu Jun 01 18:48:56 2017 +0000
@@ -44,6 +44,7 @@
  * of a particular signature algorithm.
  *
  * @author Benjamin Renaud
+ * @since 1.2
  *
  *
  * @see Signature
--- a/jdk/src/java.base/share/classes/java/security/SignedObject.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/SignedObject.java	Thu Jun 01 18:48:56 2017 +0000
@@ -114,6 +114,7 @@
  * @see Signature
  *
  * @author Li Gong
+ * @since 1.2
  */
 
 public final class SignedObject implements Serializable {
--- a/jdk/src/java.base/share/classes/java/security/Signer.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Signer.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/UnresolvedPermission.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/UnresolvedPermission.java	Thu Jun 01 18:48:56 2017 +0000
@@ -96,6 +96,7 @@
  *
  *
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class UnresolvedPermission extends Permission
--- a/jdk/src/java.base/share/classes/java/security/UnresolvedPermissionCollection.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/UnresolvedPermissionCollection.java	Thu Jun 01 18:48:56 2017 +0000
@@ -43,6 +43,7 @@
  *
  *
  * @author Roland Schemers
+ * @since 1.2
  *
  * @serial include
  */
--- a/jdk/src/java.base/share/classes/java/security/acl/Acl.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/acl/Acl.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/acl/AclEntry.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/acl/AclEntry.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/acl/AclNotFoundException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/acl/AclNotFoundException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/acl/Group.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/acl/Group.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/acl/LastOwnerException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/acl/LastOwnerException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/acl/NotOwnerException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/acl/NotOwnerException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/acl/Owner.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/acl/Owner.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/acl/Permission.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/acl/Permission.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/cert/CRLException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/CRLException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -31,6 +31,7 @@
  * CRL (Certificate Revocation List) Exception.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CRLException extends GeneralSecurityException {
 
--- a/jdk/src/java.base/share/classes/java/security/cert/Certificate.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/Certificate.java	Thu Jun 01 18:48:56 2017 +0000
@@ -57,6 +57,7 @@
  * @see CertificateFactory
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 
 public abstract class Certificate implements java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/cert/CertificateEncodingException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateEncodingException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -30,6 +30,7 @@
  * occurs while attempting to encode a certificate.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CertificateEncodingException extends CertificateException {
 
--- a/jdk/src/java.base/share/classes/java/security/cert/CertificateException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/cert/CertificateExpiredException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateExpiredException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -32,6 +32,7 @@
  * of the certificate.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CertificateExpiredException extends CertificateException {
 
--- a/jdk/src/java.base/share/classes/java/security/cert/CertificateNotYetValidException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateNotYetValidException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -32,6 +32,7 @@
  * validity period.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CertificateNotYetValidException extends CertificateException {
 
--- a/jdk/src/java.base/share/classes/java/security/cert/CertificateParsingException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateParsingException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -31,6 +31,7 @@
  * are found in the Certificate.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CertificateParsingException extends CertificateException {
 
--- a/jdk/src/java.base/share/classes/java/security/cert/X509CRL.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/X509CRL.java	Thu Jun 01 18:48:56 2017 +0000
@@ -102,6 +102,7 @@
  * }</pre>
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  *
  *
  * @see CRL
--- a/jdk/src/java.base/share/classes/java/security/cert/X509CRLEntry.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/X509CRLEntry.java	Thu Jun 01 18:48:56 2017 +0000
@@ -62,6 +62,7 @@
  * @see X509Extension
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 
 public abstract class X509CRLEntry implements X509Extension {
--- a/jdk/src/java.base/share/classes/java/security/cert/X509Certificate.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/X509Certificate.java	Thu Jun 01 18:48:56 2017 +0000
@@ -95,6 +95,7 @@
  * </pre>
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  *
  *
  * @see Certificate
--- a/jdk/src/java.base/share/classes/java/security/cert/X509Extension.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/X509Extension.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/interfaces/DSAKey.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/DSAKey.java	Thu Jun 01 18:48:56 2017 +0000
@@ -35,6 +35,7 @@
  *
  * @author Benjamin Renaud
  * @author Josh Bloch
+ * @since 1.1
  */
 public interface DSAKey {
 
--- a/jdk/src/java.base/share/classes/java/security/interfaces/DSAKeyPairGenerator.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/DSAKeyPairGenerator.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/security/interfaces/DSAParams.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/DSAParams.java	Thu Jun 01 18:48:56 2017 +0000
@@ -38,6 +38,7 @@
  *
  * @author Benjamin Renaud
  * @author Josh Bloch
+ * @since 1.1
  */
 public interface DSAParams {
 
--- a/jdk/src/java.base/share/classes/java/security/interfaces/DSAPrivateKey.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/DSAPrivateKey.java	Thu Jun 01 18:48:56 2017 +0000
@@ -37,6 +37,7 @@
  * @see DSAPublicKey
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 public interface DSAPrivateKey extends DSAKey, java.security.PrivateKey {
 
--- a/jdk/src/java.base/share/classes/java/security/interfaces/DSAPublicKey.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/DSAPublicKey.java	Thu Jun 01 18:48:56 2017 +0000
@@ -37,6 +37,7 @@
  * @see DSAPrivateKey
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 public interface DSAPublicKey extends DSAKey, java.security.PublicKey {
 
--- a/jdk/src/java.base/share/classes/java/security/interfaces/RSAPrivateCrtKey.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/RSAPrivateCrtKey.java	Thu Jun 01 18:48:56 2017 +0000
@@ -32,6 +32,7 @@
  * using the <i>Chinese Remainder Theorem</i> (CRT) information values.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see RSAPrivateKey
--- a/jdk/src/java.base/share/classes/java/security/interfaces/RSAPrivateKey.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/RSAPrivateKey.java	Thu Jun 01 18:48:56 2017 +0000
@@ -31,6 +31,7 @@
  * The interface to an RSA private key.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see RSAPrivateCrtKey
--- a/jdk/src/java.base/share/classes/java/security/interfaces/RSAPublicKey.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/RSAPublicKey.java	Thu Jun 01 18:48:56 2017 +0000
@@ -31,6 +31,7 @@
  * The interface to an RSA public key.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  */
 
--- a/jdk/src/java.base/share/classes/java/security/spec/RSAPrivateCrtKeySpec.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/spec/RSAPrivateCrtKeySpec.java	Thu Jun 01 18:48:56 2017 +0000
@@ -33,6 +33,7 @@
  * efficiency.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see java.security.Key
--- a/jdk/src/java.base/share/classes/java/security/spec/RSAPrivateKeySpec.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/spec/RSAPrivateKeySpec.java	Thu Jun 01 18:48:56 2017 +0000
@@ -31,6 +31,7 @@
  * This class specifies an RSA private key.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see java.security.Key
--- a/jdk/src/java.base/share/classes/java/security/spec/RSAPublicKeySpec.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/spec/RSAPublicKeySpec.java	Thu Jun 01 18:48:56 2017 +0000
@@ -31,6 +31,7 @@
  * This class specifies an RSA public key.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see java.security.Key
--- a/jdk/src/java.base/share/classes/java/text/BreakIterator.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/BreakIterator.java	Thu Jun 01 18:48:56 2017 +0000
@@ -221,6 +221,7 @@
  * and the next is a word; otherwise, it's the material between words.)
  * </blockquote>
  *
+ * @since 1.1
  * @see CharacterIterator
  *
  */
--- a/jdk/src/java.base/share/classes/java/text/CharacterIterator.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/CharacterIterator.java	Thu Jun 01 18:48:56 2017 +0000
@@ -98,6 +98,7 @@
  * }
  * }</pre>
  *
+ * @since 1.1
  * @see StringCharacterIterator
  * @see AttributedCharacterIterator
  */
--- a/jdk/src/java.base/share/classes/java/text/ChoiceFormat.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/ChoiceFormat.java	Thu Jun 01 18:48:56 2017 +0000
@@ -163,6 +163,7 @@
  * @see          DecimalFormat
  * @see          MessageFormat
  * @author       Mark Davis
+ * @since 1.1
  */
 public class ChoiceFormat extends NumberFormat {
 
--- a/jdk/src/java.base/share/classes/java/text/CollationElementIterator.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/CollationElementIterator.java	Thu Jun 01 18:48:56 2017 +0000
@@ -104,6 +104,7 @@
  * @see                Collator
  * @see                RuleBasedCollator
  * @author             Helena Shih, Laura Werner, Richard Gillam
+ * @since 1.1
  */
 public final class CollationElementIterator
 {
--- a/jdk/src/java.base/share/classes/java/text/CollationKey.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/CollationKey.java	Thu Jun 01 18:48:56 2017 +0000
@@ -95,6 +95,7 @@
  * @see          Collator
  * @see          RuleBasedCollator
  * @author       Helena Shih
+ * @since 1.1
  */
 
 public abstract class CollationKey implements Comparable<CollationKey> {
--- a/jdk/src/java.base/share/classes/java/text/Collator.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/Collator.java	Thu Jun 01 18:48:56 2017 +0000
@@ -123,6 +123,7 @@
  * @see         CollationElementIterator
  * @see         Locale
  * @author      Helena Shih, Laura Werner, Richard Gillam
+ * @since 1.1
  */
 
 public abstract class Collator
--- a/jdk/src/java.base/share/classes/java/text/DateFormat.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/DateFormat.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/text/DateFormatSymbols.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/DateFormatSymbols.java	Thu Jun 01 18:48:56 2017 +0000
@@ -98,6 +98,7 @@
  * @see          SimpleDateFormat
  * @see          java.util.SimpleTimeZone
  * @author       Chen-Lieh Huang
+ * @since 1.1
  */
 public class DateFormatSymbols implements Serializable, Cloneable {
 
--- a/jdk/src/java.base/share/classes/java/text/DecimalFormat.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/DecimalFormat.java	Thu Jun 01 18:48:56 2017 +0000
@@ -381,6 +381,7 @@
  * @see          ParsePosition
  * @author       Mark Davis
  * @author       Alan Liu
+ * @since 1.1
  */
 public class DecimalFormat extends NumberFormat {
 
--- a/jdk/src/java.base/share/classes/java/text/DecimalFormatSymbols.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/DecimalFormatSymbols.java	Thu Jun 01 18:48:56 2017 +0000
@@ -60,6 +60,7 @@
  * @see          DecimalFormat
  * @author       Mark Davis
  * @author       Alan Liu
+ * @since 1.1
  */
 
 public class DecimalFormatSymbols implements Cloneable, Serializable {
--- a/jdk/src/java.base/share/classes/java/text/FieldPosition.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/FieldPosition.java	Thu Jun 01 18:48:56 2017 +0000
@@ -68,6 +68,7 @@
  * <code>formatToCharacterIterator</code>.
  *
  * @author      Mark Davis
+ * @since 1.1
  * @see         java.text.Format
  */
 public class FieldPosition {
--- a/jdk/src/java.base/share/classes/java/text/Format.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/Format.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/text/MessageFormat.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/MessageFormat.java	Thu Jun 01 18:48:56 2017 +0000
@@ -344,6 +344,7 @@
  * @see          SimpleDateFormat
  *
  * @author       Mark Davis
+ * @since 1.1
  */
 
 public class MessageFormat extends Format {
--- a/jdk/src/java.base/share/classes/java/text/NumberFormat.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/NumberFormat.java	Thu Jun 01 18:48:56 2017 +0000
@@ -185,6 +185,7 @@
  * @see          ChoiceFormat
  * @author       Mark Davis
  * @author       Helena Shih
+ * @since 1.1
  */
 public abstract class NumberFormat extends Format  {
 
--- a/jdk/src/java.base/share/classes/java/text/ParseException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/ParseException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -45,6 +45,7 @@
  * @see java.text.Format
  * @see java.text.FieldPosition
  * @author      Mark Davis
+ * @since 1.1
  */
 public
 class ParseException extends Exception {
--- a/jdk/src/java.base/share/classes/java/text/ParsePosition.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/ParsePosition.java	Thu Jun 01 18:48:56 2017 +0000
@@ -51,6 +51,7 @@
  * records the current position.
  *
  * @author      Mark Davis
+ * @since 1.1
  * @see         java.text.Format
  */
 
--- a/jdk/src/java.base/share/classes/java/text/RuleBasedCollator.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/RuleBasedCollator.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/text/StringCharacterIterator.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/StringCharacterIterator.java	Thu Jun 01 18:48:56 2017 +0000
@@ -47,6 +47,7 @@
  * entire <code>String</code>.
  *
  * @see CharacterIterator
+ * @since 1.1
  */
 
 public final class StringCharacterIterator implements CharacterIterator
--- a/jdk/src/java.base/share/classes/java/util/concurrent/CompletionService.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/CompletionService.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/util/concurrent/ExecutorCompletionService.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ExecutorCompletionService.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/util/concurrent/locks/LockSupport.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/locks/LockSupport.java	Thu Jun 01 18:48:56 2017 +0000
@@ -133,6 +133,8 @@
  *     Class<?> ensureLoaded = LockSupport.class;
  *   }
  * }}</pre>
+ *
+ * @since 1.5
  */
 public class LockSupport {
     private LockSupport() {} // Cannot be instantiated.
--- a/jdk/src/java.base/share/classes/java/util/jar/JarEntry.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/jar/JarEntry.java	Thu Jun 01 18:48:56 2017 +0000
@@ -32,6 +32,8 @@
 
 /**
  * This class is used to represent a JAR file entry.
+ *
+ * @since 1.2
  */
 public
 class JarEntry extends ZipEntry {
--- a/jdk/src/java.base/share/classes/java/util/package-info.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/package-info.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/util/spi/CalendarNameProvider.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/spi/CalendarNameProvider.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/util/zip/Adler32.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/Adler32.java	Thu Jun 01 18:48:56 2017 +0000
@@ -39,6 +39,7 @@
  * a {@link NullPointerException} to be thrown.</p>
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class Adler32 implements Checksum {
--- a/jdk/src/java.base/share/classes/java/util/zip/CRC32.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/CRC32.java	Thu Jun 01 18:48:56 2017 +0000
@@ -38,6 +38,7 @@
  * a {@link NullPointerException} to be thrown.</p>
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class CRC32 implements Checksum {
--- a/jdk/src/java.base/share/classes/java/util/zip/CheckedInputStream.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/CheckedInputStream.java	Thu Jun 01 18:48:56 2017 +0000
@@ -35,6 +35,7 @@
  *
  * @see         Checksum
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class CheckedInputStream extends FilterInputStream {
--- a/jdk/src/java.base/share/classes/java/util/zip/CheckedOutputStream.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/CheckedOutputStream.java	Thu Jun 01 18:48:56 2017 +0000
@@ -36,6 +36,7 @@
  *
  * @see         Checksum
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class CheckedOutputStream extends FilterOutputStream {
--- a/jdk/src/java.base/share/classes/java/util/zip/Checksum.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/Checksum.java	Thu Jun 01 18:48:56 2017 +0000
@@ -30,6 +30,7 @@
  * An interface representing a data checksum.
  *
  * @author David Connelly
+ * @since 1.1
  */
 public interface Checksum {
 
--- a/jdk/src/java.base/share/classes/java/util/zip/DataFormatException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/DataFormatException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -29,6 +29,7 @@
  * Signals that a data format error has occurred.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class DataFormatException extends Exception {
--- a/jdk/src/java.base/share/classes/java/util/zip/Deflater.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/Deflater.java	Thu Jun 01 18:48:56 2017 +0000
@@ -69,6 +69,7 @@
  *
  * @see         Inflater
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class Deflater {
--- a/jdk/src/java.base/share/classes/java/util/zip/DeflaterOutputStream.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/DeflaterOutputStream.java	Thu Jun 01 18:48:56 2017 +0000
@@ -37,6 +37,7 @@
  *
  * @see         Deflater
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class DeflaterOutputStream extends FilterOutputStream {
--- a/jdk/src/java.base/share/classes/java/util/zip/GZIPInputStream.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/GZIPInputStream.java	Thu Jun 01 18:48:56 2017 +0000
@@ -38,6 +38,7 @@
  *
  * @see         InflaterInputStream
  * @author      David Connelly
+ * @since 1.1
  *
  */
 public
--- a/jdk/src/java.base/share/classes/java/util/zip/GZIPOutputStream.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/GZIPOutputStream.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/util/zip/Inflater.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/Inflater.java	Thu Jun 01 18:48:56 2017 +0000
@@ -68,6 +68,7 @@
  *
  * @see         Deflater
  * @author      David Connelly
+ * @since 1.1
  *
  */
 public
--- a/jdk/src/java.base/share/classes/java/util/zip/InflaterInputStream.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/InflaterInputStream.java	Thu Jun 01 18:48:56 2017 +0000
@@ -37,6 +37,7 @@
  *
  * @see         Inflater
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class InflaterInputStream extends FilterInputStream {
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipConstants.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipConstants.java	Thu Jun 01 18:48:56 2017 +0000
@@ -30,6 +30,7 @@
  * which manipulate ZIP files.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 interface ZipConstants {
     /*
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipEntry.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipEntry.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java	Thu Jun 01 18:48:56 2017 +0000
@@ -70,6 +70,7 @@
  * thrown.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class ZipFile implements ZipConstants, Closeable {
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipInputStream.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipInputStream.java	Thu Jun 01 18:48:56 2017 +0000
@@ -40,6 +40,7 @@
  * entries.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class ZipInputStream extends InflaterInputStream implements ZipConstants {
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipOutputStream.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipOutputStream.java	Thu Jun 01 18:48:56 2017 +0000
@@ -41,6 +41,7 @@
  * entries.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class ZipOutputStream extends DeflaterOutputStream implements ZipConstants {
--- a/jdk/src/java.base/share/classes/java/util/zip/package-info.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/zip/package-info.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/crypto/KeyGenerator.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/crypto/KeyGenerator.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/crypto/KeyGeneratorSpi.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/crypto/KeyGeneratorSpi.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/AuthPermission.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/AuthPermission.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/DestroyFailedException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/DestroyFailedException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -32,6 +32,7 @@
  * the {@code Destroyable} interface when the {@code destroy}
  * method fails.
  *
+ * @since 1.4
  */
 public class DestroyFailedException extends Exception {
 
--- a/jdk/src/java.base/share/classes/javax/security/auth/Destroyable.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/Destroyable.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/Policy.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/Policy.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/PrivateCredentialPermission.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/PrivateCredentialPermission.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/RefreshFailedException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/RefreshFailedException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -32,6 +32,7 @@
  * the {@code Refreshable} interface when the {@code refresh}
  * method fails.
  *
+ * @since 1.4
  */
 public class RefreshFailedException extends Exception {
 
--- a/jdk/src/java.base/share/classes/javax/security/auth/Refreshable.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/Refreshable.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/Subject.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/Subject.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/SubjectDomainCombiner.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/SubjectDomainCombiner.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/callback/Callback.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/Callback.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/callback/CallbackHandler.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/CallbackHandler.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/callback/ChoiceCallback.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/ChoiceCallback.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/callback/ConfirmationCallback.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/ConfirmationCallback.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/callback/LanguageCallback.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/LanguageCallback.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/callback/NameCallback.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/NameCallback.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/callback/PasswordCallback.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/PasswordCallback.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/callback/TextInputCallback.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/TextInputCallback.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/callback/TextOutputCallback.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/TextOutputCallback.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/callback/UnsupportedCallbackException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/UnsupportedCallbackException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/login/AccountExpiredException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/AccountExpiredException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/login/AppConfigurationEntry.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/AppConfigurationEntry.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/login/Configuration.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/Configuration.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/login/CredentialExpiredException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/CredentialExpiredException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/login/FailedLoginException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/FailedLoginException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/login/LoginContext.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/LoginContext.java	Thu Jun 01 18:48:56 2017 +0000
@@ -182,6 +182,7 @@
  * </ul>
  * </ol>
  *
+ * @since 1.4
  * @see java.security.Security
  * @see javax.security.auth.AuthPermission
  * @see javax.security.auth.Subject
--- a/jdk/src/java.base/share/classes/javax/security/auth/login/LoginException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/LoginException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -28,6 +28,7 @@
 /**
  * This is the basic login exception.
  *
+ * @since 1.4
  * @see javax.security.auth.login.LoginContext
  */
 
--- a/jdk/src/java.base/share/classes/javax/security/auth/spi/LoginModule.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/spi/LoginModule.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.base/share/classes/javax/security/auth/x500/X500PrivateCredential.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/x500/X500PrivateCredential.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/Clipboard.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/Clipboard.java	Thu Jun 01 18:48:56 2017 +0000
@@ -48,6 +48,7 @@
  *
  * @author      Amy Fowler
  * @author      Alexander Gerasimov
+ * @since 1.1
  */
 public class Clipboard {
 
--- a/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/ClipboardOwner.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/ClipboardOwner.java	Thu Jun 01 18:48:56 2017 +0000
@@ -39,6 +39,7 @@
  * @see java.awt.datatransfer.Clipboard
  *
  * @author      Amy Fowler
+ * @since 1.1
  */
 
 public interface ClipboardOwner {
--- a/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/DataFlavor.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/DataFlavor.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/StringSelection.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/StringSelection.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/Transferable.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/Transferable.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/UnsupportedFlavorException.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/UnsupportedFlavorException.java	Thu Jun 01 18:48:56 2017 +0000
@@ -30,6 +30,7 @@
  * @see Transferable#getTransferData
  *
  * @author      Amy Fowler
+ * @since 1.1
  */
 public class UnsupportedFlavorException extends Exception {
 
--- a/jdk/src/java.rmi/share/classes/sun/rmi/registry/RegistryImpl.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/src/java.rmi/share/classes/sun/rmi/registry/RegistryImpl.java	Thu Jun 01 18:48:56 2017 +0000
@@ -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/jdk/test/java/rmi/registry/serialFilter/RegistryFilterTest.java	Thu Jun 01 18:26:35 2017 +0000
+++ b/jdk/test/java/rmi/registry/serialFilter/RegistryFilterTest.java	Thu Jun 01 18:48:56 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -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;
+        }
+    }
+
 }