changeset 45314:d50641964075

Merge
author duke
date Wed, 05 Jul 2017 23:33:24 +0200
parents 29f1867af4e0 475d2eee0071
children faf6c48f1f71
files jdk/make/data/docs-resources/specs/resources/jdk-default.css jdk/test/java/io/Serializable/evolution/AddedExternField/run.sh jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh jdk/test/java/io/Serializable/maskSyntheticModifier/Test.java jdk/test/java/io/Serializable/maskSyntheticModifier/run.sh jdk/test/java/io/Serializable/packageAccess/Test.java jdk/test/java/io/Serializable/packageAccess/run.sh jdk/test/java/io/Serializable/resolveClass/consTest/Test.java jdk/test/java/io/Serializable/resolveClass/consTest/run.sh jdk/test/java/io/Serializable/resolveClass/deserializeButton/Test.java jdk/test/java/io/Serializable/resolveClass/deserializeButton/run.sh jdk/test/java/io/Serializable/serialver/classpath/Test.java jdk/test/java/io/Serializable/serialver/classpath/run.sh jdk/test/java/io/Serializable/serialver/nested/Test.java jdk/test/java/io/Serializable/serialver/nested/run.sh jdk/test/java/io/Serializable/subclass/Test.java jdk/test/java/io/Serializable/subclass/run.sh jdk/test/java/io/Serializable/superclassDataLoss/Test.java jdk/test/java/io/Serializable/superclassDataLoss/run.sh jdk/test/java/io/Serializable/unnamedPackageSwitch/Test.java jdk/test/java/io/Serializable/unnamedPackageSwitch/run.sh jdk/test/java/net/Socket/OldSocketImpl.sh jdk/test/java/net/URL/B5086147.sh jdk/test/java/net/URLClassLoader/B5077773.java jdk/test/java/net/URLClassLoader/B5077773.sh jdk/test/java/net/URLClassLoader/closetest/build.sh jdk/test/java/net/URLClassLoader/closetest/build2.sh jdk/test/java/net/URLClassLoader/getresourceasstream/test.sh jdk/test/java/net/URLClassLoader/sealing/checksealed.sh jdk/test/java/net/URLConnection/6212146/test.sh jdk/test/java/net/URLConnection/UNCTest.sh jdk/test/java/nio/Buffer/LimitDirectMemory.sh jdk/test/java/nio/channels/AsynchronousChannelGroup/Attack.java jdk/test/java/nio/channels/AsynchronousChannelGroup/PrivilegedThreadFactory.java jdk/test/java/nio/channels/AsynchronousChannelGroup/run_any_task.sh jdk/test/lib/testlibrary/JavaToolUtils.java jdk/test/lib/testlibrary/jdk/testlibrary/FileUtils.java jdk/test/lib/testlibrary/jdk/testlibrary/JarUtils.java jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/CodeCacheOverflowProcessor.java jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Helper.java jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Main.java jdk/test/tools/jar/multiRelease/data/runtimetest/base/versionResource jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Helper.java jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Main.java jdk/test/tools/jar/multiRelease/data/runtimetest/v10/versionResource jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Helper.java jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Main.java jdk/test/tools/jar/multiRelease/data/runtimetest/v9/versionResource test/lib/jdk/test/lib/wrappers/InfiniteLoop.java test/lib/jdk/test/lib/wrappers/TimeLimitedRunner.java
diffstat 302 files changed, 5147 insertions(+), 5578 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags-top-repo	Wed May 31 17:49:11 2017 +0000
+++ b/.hgtags-top-repo	Wed Jul 05 23:33:24 2017 +0200
@@ -420,6 +420,7 @@
 03fe61bb7670644cf6e46b5cfafb6b27c0e0157e jdk-10+6
 b25838a28195f4b6dab34668411eedd2d366a16c jdk-9+169
 4d163ec59d989a9261ed7f848bc6303f90869af5 jdk-9+170
-
 aa3c97810d7c484c93a2fd75d3c76ff574deb6d8 jdk-10+7
 df33ef1dc163f994177fd97d4d0e73a1e3cb5d85 jdk-10+8
+b94be69cbb1d2943b886bf2d458745756df146e4 jdk-10+9
+4c12464a907db4656c1033f56fa49cba643ac629 jdk-9+171
--- a/common/autoconf/spec.gmk.in	Wed May 31 17:49:11 2017 +0000
+++ b/common/autoconf/spec.gmk.in	Wed Jul 05 23:33:24 2017 +0200
@@ -651,7 +651,7 @@
 MV:=@MV@
 NAWK:=@NAWK@
 NICE:=@NICE@
-PANDOC:=@PANDOC@
+PANDOC:=@FIXPATH@ @PANDOC@
 PATCH:=@PATCH@
 PRINTF:=@PRINTF@
 RM:=@RM@
--- a/common/doc/building.html	Wed May 31 17:49:11 2017 +0000
+++ b/common/doc/building.html	Wed Jul 05 23:33:24 2017 +0200
@@ -1,21 +1,23 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
+<!DOCTYPE html>
+<html>
 <head>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <meta http-equiv="Content-Style-Type" content="text/css" />
-  <meta name="generator" content="pandoc" />
+  <meta charset="utf-8">
+  <meta name="generator" content="pandoc">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
   <title>OpenJDK Build README</title>
   <style type="text/css">code{white-space: pre;}</style>
-  <link rel="stylesheet" href=" ../../jdk/make/data/docs-resources/specs/resources/jdk-default.css" type="text/css" />
+  <link rel="stylesheet" href="../../jdk/make/data/docs-resources/specs/resources/jdk-default.css">
+  <!--[if lt IE 9]>
+    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
+  <![endif]-->
 </head>
 <body>
-<div id="header">
+<header>
 <h1 class="title">OpenJDK Build README</h1>
-</div>
-<div class="figure">
-<img src="http://openjdk.java.net/images/openjdk.png" alt="OpenJDK" />
-<p class="caption">OpenJDK</p>
-</div>
+</header>
+<figure>
+<img src="http://openjdk.java.net/images/openjdk.png" alt="OpenJDK" /><figcaption>OpenJDK</figcaption>
+</figure>
 <hr />
 <h2 id="introduction">Introduction</h2>
 <p>This README file contains build instructions for the <a href="http://openjdk.java.net">OpenJDK</a>. Building the source code for the OpenJDK requires a certain degree of technical expertise.</p>
@@ -149,50 +151,50 @@
 <table>
 <thead>
 <tr class="header">
-<th align="left">Package</th>
-<th align="left">Version</th>
+<th style="text-align: left;">Package</th>
+<th style="text-align: left;">Version</th>
 </tr>
 </thead>
 <tbody>
 <tr class="odd">
-<td align="left">developer/solarisstudio-124/backend</td>
-<td align="left">12.4-1.0.6.0</td>
+<td style="text-align: left;">developer/solarisstudio-124/backend</td>
+<td style="text-align: left;">12.4-1.0.6.0</td>
 </tr>
 <tr class="even">
-<td align="left">developer/solarisstudio-124/c++</td>
-<td align="left">12.4-1.0.10.0</td>
+<td style="text-align: left;">developer/solarisstudio-124/c++</td>
+<td style="text-align: left;">12.4-1.0.10.0</td>
 </tr>
 <tr class="odd">
-<td align="left">developer/solarisstudio-124/cc</td>
-<td align="left">12.4-1.0.4.0</td>
+<td style="text-align: left;">developer/solarisstudio-124/cc</td>
+<td style="text-align: left;">12.4-1.0.4.0</td>
 </tr>
 <tr class="even">
-<td align="left">developer/solarisstudio-124/library/c++-libs</td>
-<td align="left">12.4-1.0.10.0</td>
+<td style="text-align: left;">developer/solarisstudio-124/library/c++-libs</td>
+<td style="text-align: left;">12.4-1.0.10.0</td>
 </tr>
 <tr class="odd">
-<td align="left">developer/solarisstudio-124/library/math-libs</td>
-<td align="left">12.4-1.0.0.1</td>
+<td style="text-align: left;">developer/solarisstudio-124/library/math-libs</td>
+<td style="text-align: left;">12.4-1.0.0.1</td>
 </tr>
 <tr class="even">
-<td align="left">developer/solarisstudio-124/library/studio-gccrt</td>
-<td align="left">12.4-1.0.0.1</td>
+<td style="text-align: left;">developer/solarisstudio-124/library/studio-gccrt</td>
+<td style="text-align: left;">12.4-1.0.0.1</td>
 </tr>
 <tr class="odd">
-<td align="left">developer/solarisstudio-124/studio-common</td>
-<td align="left">12.4-1.0.0.1</td>
+<td style="text-align: left;">developer/solarisstudio-124/studio-common</td>
+<td style="text-align: left;">12.4-1.0.0.1</td>
 </tr>
 <tr class="even">
-<td align="left">developer/solarisstudio-124/studio-ja</td>
-<td align="left">12.4-1.0.0.1</td>
+<td style="text-align: left;">developer/solarisstudio-124/studio-ja</td>
+<td style="text-align: left;">12.4-1.0.0.1</td>
 </tr>
 <tr class="odd">
-<td align="left">developer/solarisstudio-124/studio-legal</td>
-<td align="left">12.4-1.0.0.1</td>
+<td style="text-align: left;">developer/solarisstudio-124/studio-legal</td>
+<td style="text-align: left;">12.4-1.0.0.1</td>
 </tr>
 <tr class="even">
-<td align="left">developer/solarisstudio-124/studio-zhCN</td>
-<td align="left">12.4-1.0.0.1</td>
+<td style="text-align: left;">developer/solarisstudio-124/studio-zhCN</td>
+<td style="text-align: left;">12.4-1.0.0.1</td>
 </tr>
 </tbody>
 </table>
@@ -211,66 +213,66 @@
 <table>
 <thead>
 <tr class="header">
-<th align="left">Binary Name</th>
-<th align="left">Category</th>
-<th align="left">Package</th>
-<th align="left">Description</th>
+<th style="text-align: left;">Binary Name</th>
+<th style="text-align: left;">Category</th>
+<th style="text-align: left;">Package</th>
+<th style="text-align: left;">Description</th>
 </tr>
 </thead>
 <tbody>
 <tr class="odd">
-<td align="left">ar.exe</td>
-<td align="left">Devel</td>
-<td align="left">binutils</td>
-<td align="left">The GNU assembler, linker and binary utilities</td>
+<td style="text-align: left;">ar.exe</td>
+<td style="text-align: left;">Devel</td>
+<td style="text-align: left;">binutils</td>
+<td style="text-align: left;">The GNU assembler, linker and binary utilities</td>
 </tr>
 <tr class="even">
-<td align="left">make.exe</td>
-<td align="left">Devel</td>
-<td align="left">make</td>
-<td align="left">The GNU version of the 'make' utility built for CYGWIN</td>
+<td style="text-align: left;">make.exe</td>
+<td style="text-align: left;">Devel</td>
+<td style="text-align: left;">make</td>
+<td style="text-align: left;">The GNU version of the 'make' utility built for CYGWIN</td>
 </tr>
 <tr class="odd">
-<td align="left">m4.exe</td>
-<td align="left">Interpreters</td>
-<td align="left">m4</td>
-<td align="left">GNU implementation of the traditional Unix macro processor</td>
+<td style="text-align: left;">m4.exe</td>
+<td style="text-align: left;">Interpreters</td>
+<td style="text-align: left;">m4</td>
+<td style="text-align: left;">GNU implementation of the traditional Unix macro processor</td>
 </tr>
 <tr class="even">
-<td align="left">cpio.exe</td>
-<td align="left">Utils</td>
-<td align="left">cpio</td>
-<td align="left">A program to manage archives of files</td>
+<td style="text-align: left;">cpio.exe</td>
+<td style="text-align: left;">Utils</td>
+<td style="text-align: left;">cpio</td>
+<td style="text-align: left;">A program to manage archives of files</td>
 </tr>
 <tr class="odd">
-<td align="left">gawk.exe</td>
-<td align="left">Utils</td>
-<td align="left">awk</td>
-<td align="left">Pattern-directed scanning and processing language</td>
+<td style="text-align: left;">gawk.exe</td>
+<td style="text-align: left;">Utils</td>
+<td style="text-align: left;">awk</td>
+<td style="text-align: left;">Pattern-directed scanning and processing language</td>
 </tr>
 <tr class="even">
-<td align="left">file.exe</td>
-<td align="left">Utils</td>
-<td align="left">file</td>
-<td align="left">Determines file type using 'magic' numbers</td>
+<td style="text-align: left;">file.exe</td>
+<td style="text-align: left;">Utils</td>
+<td style="text-align: left;">file</td>
+<td style="text-align: left;">Determines file type using 'magic' numbers</td>
 </tr>
 <tr class="odd">
-<td align="left">zip.exe</td>
-<td align="left">Archive</td>
-<td align="left">zip</td>
-<td align="left">Package and compress (archive) files</td>
+<td style="text-align: left;">zip.exe</td>
+<td style="text-align: left;">Archive</td>
+<td style="text-align: left;">zip</td>
+<td style="text-align: left;">Package and compress (archive) files</td>
 </tr>
 <tr class="even">
-<td align="left">unzip.exe</td>
-<td align="left">Archive</td>
-<td align="left">unzip</td>
-<td align="left">Extract compressed files in a ZIP archive</td>
+<td style="text-align: left;">unzip.exe</td>
+<td style="text-align: left;">Archive</td>
+<td style="text-align: left;">unzip</td>
+<td style="text-align: left;">Extract compressed files in a ZIP archive</td>
 </tr>
 <tr class="odd">
-<td align="left">free.exe</td>
-<td align="left">System</td>
-<td align="left">procps</td>
-<td align="left">Display amount of free and used memory in the system</td>
+<td style="text-align: left;">free.exe</td>
+<td style="text-align: left;">System</td>
+<td style="text-align: left;">procps</td>
+<td style="text-align: left;">Display amount of free and used memory in the system</td>
 </tr>
 </tbody>
 </table>
@@ -561,14 +563,14 @@
 This is probably an issue with SELinux (See <a href="http://en.wikipedia.org/wiki/SELinux">SELinux on Wikipedia</a>). Parts of the VM is built without the <code>-fPIC</code> for performance reasons.</p></li>
 </ul>
 <p>To completely disable SELinux:</p>
-<ol style="list-style-type: decimal">
+<ol type="1">
 <li><code>$ su root</code></li>
 <li><code># system-config-securitylevel</code></li>
 <li><code>In the window that appears, select the SELinux tab</code></li>
 <li><code>Disable SELinux</code></li>
 </ol>
 <p>Alternatively, instead of completely disabling it you could disable just this one check.</p>
-<ol style="list-style-type: decimal">
+<ol type="1">
 <li>Select System-&gt;Administration-&gt;SELinux Management</li>
 <li>In the SELinux Management Tool which appears, select &quot;Boolean&quot; from the menu on the left</li>
 <li>Expand the &quot;Memory Protection&quot; group</li>
@@ -616,62 +618,62 @@
 <table>
 <thead>
 <tr class="header">
-<th align="left">Base OS and Architecture</th>
-<th align="left">OS</th>
-<th align="left">C/C++ Compiler</th>
-<th align="left">Processors</th>
-<th align="left">RAM Minimum</th>
-<th align="left">DISK Needs</th>
+<th style="text-align: left;">Base OS and Architecture</th>
+<th style="text-align: left;">OS</th>
+<th style="text-align: left;">C/C++ Compiler</th>
+<th style="text-align: left;">Processors</th>
+<th style="text-align: left;">RAM Minimum</th>
+<th style="text-align: left;">DISK Needs</th>
 </tr>
 </thead>
 <tbody>
 <tr class="odd">
-<td align="left">Linux X86 (32-bit) and X64 (64-bit)</td>
-<td align="left">Oracle Enterprise Linux 6.4</td>
-<td align="left">gcc 4.9.2</td>
-<td align="left">2 or more</td>
-<td align="left">1 GB</td>
-<td align="left">6 GB</td>
+<td style="text-align: left;">Linux X86 (32-bit) and X64 (64-bit)</td>
+<td style="text-align: left;">Oracle Enterprise Linux 6.4</td>
+<td style="text-align: left;">gcc 4.9.2</td>
+<td style="text-align: left;">2 or more</td>
+<td style="text-align: left;">1 GB</td>
+<td style="text-align: left;">6 GB</td>
 </tr>
 <tr class="even">
-<td align="left">Solaris SPARCV9 (64-bit)</td>
-<td align="left">Solaris 11 Update 1</td>
-<td align="left">Studio 12 Update 4 + patches</td>
-<td align="left">4 or more</td>
-<td align="left">4 GB</td>
-<td align="left">8 GB</td>
+<td style="text-align: left;">Solaris SPARCV9 (64-bit)</td>
+<td style="text-align: left;">Solaris 11 Update 1</td>
+<td style="text-align: left;">Studio 12 Update 4 + patches</td>
+<td style="text-align: left;">4 or more</td>
+<td style="text-align: left;">4 GB</td>
+<td style="text-align: left;">8 GB</td>
 </tr>
 <tr class="odd">
-<td align="left">Solaris X64 (64-bit)</td>
-<td align="left">Solaris 11 Update 1</td>
-<td align="left">Studio 12 Update 4 + patches</td>
-<td align="left">4 or more</td>
-<td align="left">4 GB</td>
-<td align="left">8 GB</td>
+<td style="text-align: left;">Solaris X64 (64-bit)</td>
+<td style="text-align: left;">Solaris 11 Update 1</td>
+<td style="text-align: left;">Studio 12 Update 4 + patches</td>
+<td style="text-align: left;">4 or more</td>
+<td style="text-align: left;">4 GB</td>
+<td style="text-align: left;">8 GB</td>
 </tr>
 <tr class="even">
-<td align="left">Windows X86 (32-bit)</td>
-<td align="left">Windows Server 2012 R2 x64</td>
-<td align="left">Microsoft Visual Studio C++ 2013 Professional Edition</td>
-<td align="left">2 or more</td>
-<td align="left">2 GB</td>
-<td align="left">6 GB</td>
+<td style="text-align: left;">Windows X86 (32-bit)</td>
+<td style="text-align: left;">Windows Server 2012 R2 x64</td>
+<td style="text-align: left;">Microsoft Visual Studio C++ 2013 Professional Edition</td>
+<td style="text-align: left;">2 or more</td>
+<td style="text-align: left;">2 GB</td>
+<td style="text-align: left;">6 GB</td>
 </tr>
 <tr class="odd">
-<td align="left">Windows X64 (64-bit)</td>
-<td align="left">Windows Server 2012 R2 x64</td>
-<td align="left">Microsoft Visual Studio C++ 2013 Professional Edition</td>
-<td align="left">2 or more</td>
-<td align="left">2 GB</td>
-<td align="left">6 GB</td>
+<td style="text-align: left;">Windows X64 (64-bit)</td>
+<td style="text-align: left;">Windows Server 2012 R2 x64</td>
+<td style="text-align: left;">Microsoft Visual Studio C++ 2013 Professional Edition</td>
+<td style="text-align: left;">2 or more</td>
+<td style="text-align: left;">2 GB</td>
+<td style="text-align: left;">6 GB</td>
 </tr>
 <tr class="even">
-<td align="left">Mac OS X X64 (64-bit)</td>
-<td align="left">Mac OS X 10.9 &quot;Mavericks&quot;</td>
-<td align="left">Xcode 6.3 or newer</td>
-<td align="left">2 or more</td>
-<td align="left">4 GB</td>
-<td align="left">6 GB</td>
+<td style="text-align: left;">Mac OS X X64 (64-bit)</td>
+<td style="text-align: left;">Mac OS X 10.9 &quot;Mavericks&quot;</td>
+<td style="text-align: left;">Xcode 6.3 or newer</td>
+<td style="text-align: left;">2 or more</td>
+<td style="text-align: left;">4 GB</td>
+<td style="text-align: left;">6 GB</td>
 </tr>
 </tbody>
 </table>
--- a/common/doc/testing.html	Wed May 31 17:49:11 2017 +0000
+++ b/common/doc/testing.html	Wed Jul 05 23:33:24 2017 +0200
@@ -1,19 +1,22 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
+<!DOCTYPE html>
+<html>
 <head>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <meta http-equiv="Content-Style-Type" content="text/css" />
-  <meta name="generator" content="pandoc" />
+  <meta charset="utf-8">
+  <meta name="generator" content="pandoc">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
   <title>Testing OpenJDK</title>
   <style type="text/css">code{white-space: pre;}</style>
-  <link rel="stylesheet" href=" ../../jdk/make/data/docs-resources/specs/resources/jdk-default.css" type="text/css" />
+  <link rel="stylesheet" href="../../jdk/make/data/docs-resources/specs/resources/jdk-default.css">
+  <!--[if lt IE 9]>
+    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
+  <![endif]-->
   <style type="text/css">pre, code, tt { color: #1d6ae5; }</style>
 </head>
 <body>
-<div id="header">
+<header>
 <h1 class="title">Testing OpenJDK</h1>
-</div>
-<div id="TOC">
+</header>
+<nav id="TOC">
 <ul>
 <li><a href="#using-the-run-test-framework">Using the run-test framework</a></li>
 <li><a href="#test-selection">Test selection</a><ul>
@@ -26,16 +29,18 @@
 <li><a href="#gtest-keywords">Gtest keywords</a></li>
 </ul></li>
 </ul>
-</div>
+</nav>
 <h2 id="using-the-run-test-framework">Using the run-test framework</h2>
 <p>This new way of running tests is developer-centric. It assumes that you have built a jdk locally and want to test it. Running common test targets is simple, and more complex ad-hoc combination of tests is possible. The user interface is forgiving, and clearly report errors it cannot resolve.</p>
+<p>The main target &quot;run-test&quot; uses the jdk-image as the tested product. There is also an alternate target &quot;exploded-run-test&quot; that uses the exploded image instead. Not all tests will run successfully on the exploded image, but using this target can greatly improve rebuild times for certain workflows.</p>
 <p>Some example command-lines:</p>
 <pre><code>$ make run-test-tier1
 $ make run-test-jdk_lang JTREG=&quot;JOBS=8&quot;
 $ make run-test TEST=jdk_lang
 $ make run-test-only TEST=&quot;gtest:LogTagSet gtest:LogTagSetDescriptions&quot; GTEST=&quot;REPEAT=-1&quot;
 $ make run-test TEST=&quot;hotspot/test:hotspot_gc&quot; JTREG=&quot;JOBS=1;TIMEOUT=8;VM_OTIONS=-XshowSettings -Xlog:gc+ref=debug&quot;
-$ make run-test TEST=&quot;jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java&quot;</code></pre>
+$ make run-test TEST=&quot;jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java&quot;
+$ make exploded-run-test TEST=hotspot_tier1</code></pre>
 <h2 id="test-selection">Test selection</h2>
 <p>All functionality is available using the run-test make target. In this use case, the test or tests to be executed is controlled using the <code>TEST</code> variable. To speed up subsequent test runs with no source code changes, run-test-only can be used instead, which do not depend on the source and test image build.</p>
 <p>For some common top-level tests, direct make targets have been generated. This includes all JTreg test groups, the hotspot gtest, and custom tests (if present). This means that <code>make run-test-tier1</code> is equivalent to <code>make run-test TEST=&quot;tier1&quot;</code>, but the latter is more tab-completion friendly. For more complex test runs, the <code>run-test TEST=&quot;x&quot;</code> solution needs to be used.</p>
--- a/common/doc/testing.md	Wed May 31 17:49:11 2017 +0000
+++ b/common/doc/testing.md	Wed Jul 05 23:33:24 2017 +0200
@@ -7,6 +7,11 @@
 and more complex ad-hoc combination of tests is possible. The user interface is
 forgiving, and clearly report errors it cannot resolve.
 
+The main target "run-test" uses the jdk-image as the tested product. There is
+also an alternate target "exploded-run-test" that uses the exploded image
+instead. Not all tests will run successfully on the exploded image, but using
+this target can greatly improve rebuild times for certain workflows.
+
 Some example command-lines:
 
     $ make run-test-tier1
@@ -15,6 +20,7 @@
     $ make run-test-only TEST="gtest:LogTagSet gtest:LogTagSetDescriptions" GTEST="REPEAT=-1"
     $ make run-test TEST="hotspot/test:hotspot_gc" JTREG="JOBS=1;TIMEOUT=8;VM_OTIONS=-XshowSettings -Xlog:gc+ref=debug"
     $ make run-test TEST="jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java"
+    $ make exploded-run-test TEST=hotspot_tier1
 
 ## Test selection
 
--- a/corba/.hgtags	Wed May 31 17:49:11 2017 +0000
+++ b/corba/.hgtags	Wed Jul 05 23:33:24 2017 +0200
@@ -422,3 +422,5 @@
 8a4ab3b0ab9a86df73d9a1e337134f2dbe006725 jdk-9+170
 aed5a4edc8275c1c50195503756ff92bfe0197f5 jdk-10+7
 648b0a00824eb29e71936bc3258d309a25e3b8c0 jdk-10+8
+54c6621f7b34cc6ce6c0882d047f61fe0962c257 jdk-10+9
+c62e5964cfcf144d8f72e9ba69757897785349a9 jdk-9+171
--- a/hotspot/.hgtags	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/.hgtags	Wed Jul 05 23:33:24 2017 +0200
@@ -582,3 +582,5 @@
 38a240fd58a287acb1963920b92ed4d9c2fd39e3 jdk-9+170
 9d4746eca95aec3e5a344bf2520745dcc1d17eed jdk-10+7
 f5ded0cf954c770deeecb80f2ba1ba6a05cd979b jdk-10+8
+233647e3d3800e76d7612014b745b37a88098f63 jdk-10+9
+d53171650a2cc6c6f699c966c533b914ca9c0602 jdk-9+171
--- a/hotspot/.mx.jvmci/mx_jvmci.py	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/.mx.jvmci/mx_jvmci.py	Wed Jul 05 23:33:24 2017 +0200
@@ -303,9 +303,9 @@
                         out.close('link')
 
                     out.open('link')
-                    out.element('name', data='generated')
+                    out.element('name', data='gensrc')
                     out.element('type', data='2')
-                    generated = join(_get_hotspot_build_dir(jvmVariant, debugLevel), 'generated')
+                    generated = join(_get_hotspot_build_dir(jvmVariant, debugLevel), 'gensrc')
                     out.element('locationURI', data=mx.get_eclipse_project_rel_locationURI(generated, eclProjectDir))
                     out.close('link')
 
@@ -620,18 +620,12 @@
 def _get_hotspot_build_dir(jvmVariant=None, debugLevel=None):
     """
     Gets the directory in which a particular HotSpot configuration is built
-    (e.g., <JDK_REPO_ROOT>/build/macosx-x86_64-normal-server-release/hotspot/bsd_amd64_compiler2)
+    (e.g., <JDK_REPO_ROOT>/build/macosx-x86_64-normal-server-release/hotspot/variant-<variant>)
     """
     if jvmVariant is None:
         jvmVariant = _vm.jvmVariant
 
-    os = mx.get_os()
-    if os == 'darwin':
-        os = 'bsd'
-    arch = mx.get_arch()
-    buildname = {'client': 'compiler1', 'server': 'compiler2'}.get(jvmVariant, jvmVariant)
-
-    name = '{}_{}_{}'.format(os, arch, buildname)
+    name = 'variant-{}'.format(jvmVariant)
     return join(_get_jdk_build_dir(debugLevel=debugLevel), 'hotspot', name)
 
 class JVMCI9JDKConfig(mx.JDKConfig):
--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp	Wed Jul 05 23:33:24 2017 +0200
@@ -4134,28 +4134,33 @@
   if ((dst_enc < 16) && (nds_enc < 16)) {
     vandps(dst, nds, negate_field, vector_len);
   } else if ((src_enc < 16) && (dst_enc < 16)) {
-    movss(src, nds);
+    evmovdqul(src, nds, Assembler::AVX_512bit);
     vandps(dst, src, negate_field, vector_len);
   } else if (src_enc < 16) {
-    movss(src, nds);
+    evmovdqul(src, nds, Assembler::AVX_512bit);
     vandps(src, src, negate_field, vector_len);
-    movss(dst, src);
+    evmovdqul(dst, src, Assembler::AVX_512bit);
   } else if (dst_enc < 16) {
-    movdqu(src, xmm0);
-    movss(xmm0, nds);
+    evmovdqul(src, xmm0, Assembler::AVX_512bit);
+    evmovdqul(xmm0, nds, Assembler::AVX_512bit);
     vandps(dst, xmm0, negate_field, vector_len);
-    movdqu(xmm0, src);
-  } else if (nds_enc < 16) {
-    movdqu(src, xmm0);
-    vandps(xmm0, nds, negate_field, vector_len);
-    movss(dst, xmm0);
-    movdqu(xmm0, src);
-  } else {
-    movdqu(src, xmm0);
-    movss(xmm0, nds);
-    vandps(xmm0, xmm0, negate_field, vector_len);
-    movss(dst, xmm0);
-    movdqu(xmm0, src);
+    evmovdqul(xmm0, src, Assembler::AVX_512bit);
+  } else {
+    if (src_enc != dst_enc) {
+      evmovdqul(src, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, nds, Assembler::AVX_512bit);
+      vandps(xmm0, xmm0, negate_field, vector_len);
+      evmovdqul(dst, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, src, Assembler::AVX_512bit);
+    } else {
+      subptr(rsp, 64);
+      evmovdqul(Address(rsp, 0), xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, nds, Assembler::AVX_512bit);
+      vandps(xmm0, xmm0, negate_field, vector_len);
+      evmovdqul(dst, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, Address(rsp, 0), Assembler::AVX_512bit);
+      addptr(rsp, 64);
+    }
   }
 }
 
@@ -4166,28 +4171,33 @@
   if ((dst_enc < 16) && (nds_enc < 16)) {
     vandpd(dst, nds, negate_field, vector_len);
   } else if ((src_enc < 16) && (dst_enc < 16)) {
-    movsd(src, nds);
+    evmovdqul(src, nds, Assembler::AVX_512bit);
     vandpd(dst, src, negate_field, vector_len);
   } else if (src_enc < 16) {
-    movsd(src, nds);
+    evmovdqul(src, nds, Assembler::AVX_512bit);
     vandpd(src, src, negate_field, vector_len);
-    movsd(dst, src);
+    evmovdqul(dst, src, Assembler::AVX_512bit);
   } else if (dst_enc < 16) {
-    movdqu(src, xmm0);
-    movsd(xmm0, nds);
+    evmovdqul(src, xmm0, Assembler::AVX_512bit);
+    evmovdqul(xmm0, nds, Assembler::AVX_512bit);
     vandpd(dst, xmm0, negate_field, vector_len);
-    movdqu(xmm0, src);
-  } else if (nds_enc < 16) {
-    movdqu(src, xmm0);
-    vandpd(xmm0, nds, negate_field, vector_len);
-    movsd(dst, xmm0);
-    movdqu(xmm0, src);
-  } else {
-    movdqu(src, xmm0);
-    movsd(xmm0, nds);
-    vandpd(xmm0, xmm0, negate_field, vector_len);
-    movsd(dst, xmm0);
-    movdqu(xmm0, src);
+    evmovdqul(xmm0, src, Assembler::AVX_512bit);
+  } else {
+    if (src_enc != dst_enc) {
+      evmovdqul(src, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, nds, Assembler::AVX_512bit);
+      vandpd(xmm0, xmm0, negate_field, vector_len);
+      evmovdqul(dst, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, src, Assembler::AVX_512bit);
+    } else {
+      subptr(rsp, 64);
+      evmovdqul(Address(rsp, 0), xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, nds, Assembler::AVX_512bit);
+      vandpd(xmm0, xmm0, negate_field, vector_len);
+      evmovdqul(dst, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, Address(rsp, 0), Assembler::AVX_512bit);
+      addptr(rsp, 64);
+    }
   }
 }
 
@@ -4934,6 +4944,24 @@
   }
 }
 
+void MacroAssembler::pshufd(XMMRegister dst, Address src, int mode) {
+  if (VM_Version::supports_avx512vl()) {
+    Assembler::pshufd(dst, src, mode);
+  } else {
+    int dst_enc = dst->encoding();
+    if (dst_enc < 16) {
+      Assembler::pshufd(dst, src, mode);
+    } else {
+      subptr(rsp, 64);
+      evmovdqul(Address(rsp, 0), xmm0, Assembler::AVX_512bit);
+      Assembler::pshufd(xmm0, src, mode);
+      evmovdqul(dst, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, Address(rsp, 0), Assembler::AVX_512bit);
+      addptr(rsp, 64);
+    }
+  }
+}
+
 // This instruction exists within macros, ergo we cannot control its input
 // when emitted through those patterns.
 void MacroAssembler::pshuflw(XMMRegister dst, XMMRegister src, int mode) {
--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp	Wed Jul 05 23:33:24 2017 +0200
@@ -1232,6 +1232,9 @@
   void punpcklbw(XMMRegister dst, XMMRegister src);
   void punpcklbw(XMMRegister dst, Address src) { Assembler::punpcklbw(dst, src); }
 
+  void pshufd(XMMRegister dst, Address src, int mode);
+  void pshufd(XMMRegister dst, XMMRegister src, int mode) { Assembler::pshufd(dst, src, mode); }
+
   void pshuflw(XMMRegister dst, XMMRegister src, int mode);
   void pshuflw(XMMRegister dst, Address src, int mode) { Assembler::pshuflw(dst, src, mode); }
 
--- a/hotspot/src/jdk.hotspot.agent/share/classes/module-info.java	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/module-info.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,12 @@
  * questions.
  */
 
+/**
+ * Defines the implementation of the HotSpot Serviceability Agent.
+ *
+ * @moduleGraph
+ * @since 9
+ */
 module jdk.hotspot.agent {
     requires java.datatransfer;
     requires java.desktop;
--- a/hotspot/src/share/vm/oops/constMethod.cpp	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/src/share/vm/oops/constMethod.cpp	Wed Jul 05 23:33:24 2017 +0200
@@ -407,8 +407,12 @@
   ResourceMark rm;
   assert(is_constMethod(), "must be constMethod");
   st->print_cr("%s", internal_name());
-  st->print(" - method:       " INTPTR_FORMAT " ", p2i((address)method()));
-  method()->print_value_on(st); st->cr();
+  Method* m = method();
+  st->print(" - method:       " INTPTR_FORMAT " ", p2i((address)m));
+  if (m != NULL) {
+    m->print_value_on(st);
+  }
+  st->cr();
   if (has_stackmap_table()) {
     st->print(" - stackmap data:       ");
     stackmap_data()->print_value_on(st);
@@ -421,7 +425,12 @@
 void ConstMethod::print_value_on(outputStream* st) const {
   assert(is_constMethod(), "must be constMethod");
   st->print(" const part of method " );
-  method()->print_value_on(st);
+  Method* m = method();
+  if (m != NULL) {
+    m->print_value_on(st);
+  } else {
+    st->print("NULL");
+  }
 }
 
 #if INCLUDE_SERVICES
@@ -461,7 +470,7 @@
 
   // Verification can occur during oop construction before the method or
   // other fields have been initialized.
-  guarantee(method()->is_method(), "should be method");
+  guarantee(method() != NULL && method()->is_method(), "should be method");
 
   address m_end = (address)((intptr_t) this + size());
   address compressed_table_start = code_end();
--- a/hotspot/src/share/vm/opto/matcher.cpp	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/src/share/vm/opto/matcher.cpp	Wed Jul 05 23:33:24 2017 +0200
@@ -1000,7 +1000,7 @@
             if (C->failing())  return NULL;
             if (m == NULL) { Matcher::soft_match_failure(); return NULL; }
           } else {                  // Nothing the matcher cares about
-            if( n->is_Proj() && n->in(0)->is_Multi()) {       // Projections?
+            if (n->is_Proj() && n->in(0) != NULL && n->in(0)->is_Multi()) {       // Projections?
               // Convert to machine-dependent projection
               m = n->in(0)->as_Multi()->match( n->as_Proj(), this );
 #ifdef ASSERT
@@ -1645,6 +1645,7 @@
 
   // Build the object to represent this state & prepare for recursive calls
   MachNode *mach = s->MachNodeGenerator(rule);
+  guarantee(mach != NULL, "Missing MachNode");
   mach->_opnds[0] = s->MachOperGenerator(_reduceOp[rule]);
   assert( mach->_opnds[0] != NULL, "Missing result operand" );
   Node *leaf = s->_leaf;
--- a/hotspot/src/share/vm/opto/memnode.cpp	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/src/share/vm/opto/memnode.cpp	Wed Jul 05 23:33:24 2017 +0200
@@ -1123,6 +1123,9 @@
       // Use _idx of address base (could be Phi node) for boxed values.
       intptr_t   ignore = 0;
       Node*      base = AddPNode::Ideal_base_and_offset(in(Address), phase, ignore);
+      if (base == NULL) {
+        return this;
+      }
       this_iid = base->_idx;
     }
     const Type* this_type = bottom_type();
@@ -3947,9 +3950,10 @@
     // if it is the last unused 4 bytes of an instance, forget about it
     intptr_t size_limit = phase->find_intptr_t_con(size_in_bytes, max_jint);
     if (zeroes_done + BytesPerLong >= size_limit) {
-      assert(allocation() != NULL, "");
-      if (allocation()->Opcode() == Op_Allocate) {
-        Node* klass_node = allocation()->in(AllocateNode::KlassNode);
+      AllocateNode* alloc = allocation();
+      assert(alloc != NULL, "must be present");
+      if (alloc != NULL && alloc->Opcode() == Op_Allocate) {
+        Node* klass_node = alloc->in(AllocateNode::KlassNode);
         ciKlass* k = phase->type(klass_node)->is_klassptr()->klass();
         if (zeroes_done == k->layout_helper())
           zeroes_done = size_limit;
--- a/hotspot/test/ProblemList.txt	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/test/ProblemList.txt	Wed Jul 05 23:33:24 2017 +0200
@@ -64,14 +64,14 @@
 runtime/CompressedOops/UseCompressedOops.java 8079353 generic-all
 # This test is disabled since it will stress NMT and timeout during normal testing
 runtime/NMT/MallocStressTest.java 8166548 generic-all
-runtime/SharedArchiveFile/BootAppendTests.java 8150683 generic-all
+runtime/SharedArchiveFile/BootAppendTests.java 8179103 generic-all
 runtime/SharedArchiveFile/DefaultUseWithClient.java 8154204 generic-all
 
 #############################################################################
 
 # :hotspot_serviceability
 
-serviceability/jdwp/AllModulesCommandTest.java 8168478 generic-all
+serviceability/jdwp/AllModulesCommandTest.java 8170541 generic-all
 serviceability/sa/sadebugd/SADebugDTest.java 8163805 generic-all
 serviceability/jvmti/ModuleAwareAgents/ClassFileLoadHook/MAAClassFileLoadHook.java 8173936 generic-all
 
--- a/hotspot/test/compiler/codecache/stress/CodeCacheStressRunner.java	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/test/compiler/codecache/stress/CodeCacheStressRunner.java	Wed Jul 05 23:33:24 2017 +0200
@@ -23,7 +23,7 @@
 
 package compiler.codecache.stress;
 
-import jdk.test.lib.wrappers.TimeLimitedRunner;
+import jdk.test.lib.TimeLimitedRunner;
 import jdk.test.lib.Utils;
 
 public class CodeCacheStressRunner {
--- a/hotspot/test/compiler/codecache/stress/Helper.java	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/test/compiler/codecache/stress/Helper.java	Wed Jul 05 23:33:24 2017 +0200
@@ -25,7 +25,7 @@
 
 import jdk.test.lib.Asserts;
 import jdk.test.lib.ByteCodeLoader;
-import jdk.test.lib.wrappers.InfiniteLoop;
+import jdk.test.lib.InfiniteLoop;
 import jdk.test.lib.Utils;
 import sun.hotspot.WhiteBox;
 
--- a/hotspot/test/compiler/compilercontrol/jcmd/StressAddJcmdBase.java	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/test/compiler/compilercontrol/jcmd/StressAddJcmdBase.java	Wed Jul 05 23:33:24 2017 +0200
@@ -29,7 +29,7 @@
 import compiler.compilercontrol.share.pool.PoolHelper;
 import compiler.compilercontrol.share.scenario.Executor;
 import jdk.test.lib.process.OutputAnalyzer;
-import jdk.test.lib.wrappers.TimeLimitedRunner;
+import jdk.test.lib.TimeLimitedRunner;
 import jdk.test.lib.Utils;
 
 import java.util.ArrayList;
--- a/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -44,7 +44,7 @@
 package compiler.whitebox;
 
 import jdk.test.lib.Asserts;
-import jdk.test.lib.wrappers.InfiniteLoop;
+import jdk.test.lib.InfiniteLoop;
 import sun.hotspot.WhiteBox;
 import sun.hotspot.code.BlobType;
 
--- a/hotspot/test/serviceability/jdwp/AllModulesCommandTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/hotspot/test/serviceability/jdwp/AllModulesCommandTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -32,7 +32,6 @@
  * @test
  * @summary Tests the modules-related JDWP commands
  * @library /test/lib
- * @ignore 8170541
  * @modules jdk.jdwp.agent
  * @modules java.base/jdk.internal.misc
  * @compile AllModulesCommandTestDebuggee.java
--- a/jaxp/.hgtags	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/.hgtags	Wed Jul 05 23:33:24 2017 +0200
@@ -422,3 +422,5 @@
 6e78f902f477a093afca85a1042f97410d01eb69 jdk-9+170
 09cae4c36242734f5450de739b8264523a030809 jdk-10+7
 856998840907b67b7e1fc49259f785ac085a189b jdk-10+8
+3c75f07b2a49cb0a4f4eb5df8bbcbc64dda3153f jdk-10+9
+c27321c889cf4c8e465a61b84572c00ef7ee6004 jdk-9+171
--- a/jaxp/src/java.xml/share/classes/javax/xml/catalog/CatalogFeatures.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/catalog/CatalogFeatures.java	Wed Jul 05 23:33:24 2017 +0200
@@ -34,9 +34,9 @@
  * The CatalogFeatures holds a collection of features and properties.
  * <p>
  *
- * <center><h2><a name="CatalogFeatures">Catalog Features</a></h2></center></p>
  *
- * <table border="1">
+ * <table class="plain">
+ * <caption>Catalog Features</caption>
  * <thead>
  * <tr>
  * <th rowspan="2">Feature</th>
@@ -44,7 +44,7 @@
  * <th rowspan="2">Property Name</th>
  * <th rowspan="2">System Property [1]</th>
  * <th rowspan="2">jaxp.properties [1]</th>
- * <th colspan="2" align="center">Value [2]</th>
+ * <th colspan="2" style="text-align:center">Value [2]</th>
  * <th rowspan="2">Action</th>
  * </tr>
  * <tr>
@@ -55,7 +55,7 @@
  * <tbody>
  *
  * <tr>
- * <td><a name="FILES">FILES</a></td>
+ * <td><a id="FILES">FILES</a></td>
  * <td>A semicolon-delimited list of URIs to locate the catalog files.
  * The URIs must be absolute and have a URL protocol handler for the URI scheme.
  * </td>
@@ -71,7 +71,7 @@
  * </tr>
  *
  * <tr>
- * <td rowspan="2"><a name="PREFER">PREFER</a></td>
+ * <td rowspan="2"><a id="PREFER">PREFER</a></td>
  * <td rowspan="2">Indicates the preference between the public and system
  * identifiers. The default value is public [3].</td>
  * <td rowspan="2">javax.xml.catalog.prefer</td>
@@ -89,7 +89,7 @@
  * </tr>
  *
  * <tr>
- * <td rowspan="2"><a name="DEFER">DEFER</a></td>
+ * <td rowspan="2"><a id="DEFER">DEFER</a></td>
  * <td rowspan="2">Indicates that the alternative catalogs including those
  * specified in delegate entries or nextCatalog are not read until they are
  * needed. The default value is true.</td>
@@ -107,7 +107,7 @@
  * </tr>
  *
  * <tr>
- * <td rowspan="3"><a name="RESOLVE">RESOLVE</a></td>
+ * <td rowspan="3"><a id="RESOLVE">RESOLVE</a></td>
  * <td rowspan="3">Determines the action if there is no matching entry found after
  * all of the specified catalogs are exhausted. The default is strict.</td>
  * <td rowspan="3">javax.xml.catalog.resolve [4]</td>
@@ -241,9 +241,10 @@
  * supports a resolver. The following table lists all such processes.
  *
  * <p>
- * <center><h3><a name="CatalogFeatures">Processes with Catalog Support</a></h3></center></p>
+ * <h3><a id="ProcessesWithCatalogSupport">Processes with Catalog Support</a></h3>
  *
- * <table border="1">
+ * <table class="striped">
+ * <caption>Processes with Catalog Support</caption>
  * <thead>
  * <tr>
  * <th>Process</th>
--- a/jaxp/src/java.xml/share/classes/javax/xml/catalog/package.html	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/catalog/package.html	Wed Jul 05 23:33:24 2017 +0200
@@ -1,8 +1,8 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!DOCTYPE HTML>
 <html>
 <head>
 <!--
-Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 questions. 
 -->
 </head>
-<body bgcolor="white">
+<body>
 
     Provides the classes for implementing 
     <a href="https://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html">
@@ -35,7 +35,7 @@
     <p>
         Unless otherwise noted, passing a null argument to 
         a constructor or method in any class or interface in this package will 
-        cause a <tt>NullPointerException</tt> to be thrown.
+        cause a <code>NullPointerException</code> to be thrown.
     </p>
 
 @since 9
--- a/jaxp/src/java.xml/share/classes/javax/xml/datatype/DatatypeFactory.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/datatype/DatatypeFactory.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 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
@@ -774,15 +774,11 @@
     /**
      * Create an {@code XMLGregorianCalendar} from a {@link GregorianCalendar}.
      *
-     * <table border="2" rules="all" cellpadding="2">
+     * <table class="striped">
+     *   <caption>Field by Field Conversion from
+     *          {@link GregorianCalendar} to an {@link XMLGregorianCalendar}</caption>
      *   <thead>
      *     <tr>
-     *       <th align="center" colspan="2">
-     *          Field by Field Conversion from
-     *          {@link GregorianCalendar} to an {@link XMLGregorianCalendar}
-     *       </th>
-     *     </tr>
-     *     <tr>
      *        <th>{@code java.util.GregorianCalendar} field</th>
      *        <th>{@code javax.xml.datatype.XMLGregorianCalendar} field</th>
      *     </tr>
--- a/jaxp/src/java.xml/share/classes/javax/xml/datatype/Duration.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/datatype/Duration.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -120,26 +120,22 @@
      * maps to. Type is computed based on fields that are set,
      * i.e. {@link #isSet(DatatypeConstants.Field field)} == {@code true}.
      *
-     * <table border="2" rules="all" cellpadding="2">
+     * <table class="striped">
+     *   <caption>Required fields for XML Schema 1.0 Date/Time Datatypes.<br>
+     *         <i>(timezone is optional for all date/time datatypes)</i></caption>
      *   <thead>
      *     <tr>
-     *       <th align="center" colspan="7">
-     *         Required fields for XML Schema 1.0 Date/Time Datatypes.<br>
-     *         <i>(timezone is optional for all date/time datatypes)</i>
-     *       </th>
+     *       <th>Datatype</th>
+     *       <th>year</th>
+     *       <th>month</th>
+     *       <th>day</th>
+     *       <th>hour</th>
+     *       <th>minute</th>
+     *       <th>second</th>
      *     </tr>
      *   </thead>
      *   <tbody>
      *     <tr>
-     *       <td>Datatype</td>
-     *       <td>year</td>
-     *       <td>month</td>
-     *       <td>day</td>
-     *       <td>hour</td>
-     *       <td>minute</td>
-     *       <td>second</td>
-     *     </tr>
-     *     <tr>
      *       <td>{@link DatatypeConstants#DURATION}</td>
      *       <td>X</td>
      *       <td>X</td>
--- a/jaxp/src/java.xml/share/classes/javax/xml/datatype/XMLGregorianCalendar.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/datatype/XMLGregorianCalendar.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -53,25 +53,21 @@
  * <a href="http://www.w3.org/TR/xmlschema-2/#isoformats">W3C XML Schema 1.0 Part 2, Appendix D,
  * <i>ISO 8601 Date and Time Formats</i></a>.
  *
- * <a name="datetimefieldmapping"></a>
- * <table border="2" rules="all" cellpadding="2">
+ * <a id="datetimefieldmapping"></a>
+ * <table class="striped">
+ *   <caption>Date/Time Datatype Field Mapping Between XML Schema 1.0 and Java Representation</caption>
  *   <thead>
  *     <tr>
- *       <th align="center" colspan="3">
- *         Date/Time Datatype Field Mapping Between XML Schema 1.0 and Java Representation
- *       </th>
- *     </tr>
- *   </thead>
- *   <tbody>
- *     <tr>
  *       <th>XML Schema 1.0<br>
  *           datatype<br>
  *            field</th>
  *       <th>Related<br>XMLGregorianCalendar<br>Accessor(s)</th>
  *       <th>Value Range</th>
  *     </tr>
+ *   </thead>
+ *   <tbody>
  *     <tr>
- *       <td><a name="datetimefield-year">year</a></td>
+ *       <td><a id="datetimefield-year">year</a></td>
  *       <td> {@link #getYear()} + {@link #getEon()} or<br>
  *            {@link #getEonAndYear}
  *       </td>
@@ -89,12 +85,12 @@
  *            </td>
  *     </tr>
  *     <tr>
- *       <td><a name="datetimefield-month">month</a></td>
+ *       <td><a id="datetimefield-month">month</a></td>
  *       <td> {@link #getMonth()} </td>
  *       <td> 1 to 12 or {@link DatatypeConstants#FIELD_UNDEFINED} </td>
  *     </tr>
  *     <tr>
- *       <td><a name="datetimefield-day">day</a></td>
+ *       <td><a id="datetimefield-day">day</a></td>
  *       <td> {@link #getDay()} </td>
  *       <td> Independent of month, max range is 1 to 31 or {@link DatatypeConstants#FIELD_UNDEFINED}.<br>
  *            The normative value constraint stated relative to month
@@ -102,7 +98,7 @@
  *       </td>
  *     </tr>
  *     <tr>
- *       <td><a name="datetimefield-hour">hour</a></td>
+ *       <td><a id="datetimefield-hour">hour</a></td>
  *       <td>{@link #getHour()}</td>
  *       <td>
  *         0 to 23 or {@link DatatypeConstants#FIELD_UNDEFINED}.
@@ -114,12 +110,12 @@
  *       </td>
  *     </tr>
  *     <tr>
- *       <td><a name="datetimefield-minute">minute</a></td>
+ *       <td><a id="datetimefield-minute">minute</a></td>
  *       <td> {@link #getMinute()} </td>
  *       <td> 0 to 59 or {@link DatatypeConstants#FIELD_UNDEFINED} </td>
  *     </tr>
  *     <tr>
- *       <td><a name="datetimefield-second">second</a></td>
+ *       <td><a id="datetimefield-second">second</a></td>
  *       <td>
  *         {@link #getSecond()} + {@link #getMillisecond()}/1000 or<br>
  *         {@link #getSecond()} + {@link #getFractionalSecond()}
@@ -135,7 +131,7 @@
  *       </td>
  *     </tr>
  *     <tr>
- *       <td><a name="datetimefield-timezone">timezone</a></td>
+ *       <td><a id="datetimefield-timezone">timezone</a></td>
  *       <td> {@link #getTimezone()} </td>
  *       <td> Number of minutes or {@link DatatypeConstants#FIELD_UNDEFINED}.
  *         Value range from -14 hours (-14 * 60 minutes) to 14 hours (14 * 60 minutes).
@@ -748,26 +744,22 @@
      * Return the name of the XML Schema date/time type that this instance
      * maps to. Type is computed based on fields that are set.
      *
-     * <table border="2" rules="all" cellpadding="2">
+     * <table class="striped">
+     *   <caption>Required fields for XML Schema 1.0 Date/Time Datatypes.<br>
+     *         <i>(timezone is optional for all date/time datatypes)</i></caption>
      *   <thead>
      *     <tr>
-     *       <th align="center" colspan="7">
-     *         Required fields for XML Schema 1.0 Date/Time Datatypes.<br>
-     *         <i>(timezone is optional for all date/time datatypes)</i>
-     *       </th>
+     *       <th>Datatype</th>
+     *       <th>year</th>
+     *       <th>month</th>
+     *       <th>day</th>
+     *       <th>hour</th>
+     *       <th>minute</th>
+     *       <th>second</th>
      *     </tr>
      *   </thead>
      *   <tbody>
      *     <tr>
-     *       <td>Datatype</td>
-     *       <td>year</td>
-     *       <td>month</td>
-     *       <td>day</td>
-     *       <td>hour</td>
-     *       <td>minute</td>
-     *       <td>second</td>
-     *     </tr>
-     *     <tr>
      *       <td>{@link DatatypeConstants#DATETIME}</td>
      *       <td>X</td>
      *       <td>X</td>
@@ -911,21 +903,17 @@
      * instance, see
      * {@link #toGregorianCalendar(TimeZone, Locale, XMLGregorianCalendar)}.
      *
-     * <table border="2" rules="all" cellpadding="2">
+     * <table class="striped">
+     *   <caption>Field by Field Conversion from this class to
+     *          {@code java.util.GregorianCalendar}</caption>
      *   <thead>
      *     <tr>
-     *       <th align="center" colspan="2">
-     *          Field by Field Conversion from this class to
-     *          {@code java.util.GregorianCalendar}
-     *       </th>
+     *        <th>{@code java.util.GregorianCalendar} field</th>
+     *        <th>{@code javax.xml.datatype.XMLGregorianCalendar} field</th>
      *     </tr>
      *   </thead>
      *   <tbody>
      *     <tr>
-     *        <td>{@code java.util.GregorianCalendar} field</td>
-     *        <td>{@code javax.xml.datatype.XMLGregorianCalendar} field</td>
-     *     </tr>
-     *     <tr>
      *       <td>{@code ERA}</td>
      *       <td>{@link #getEonAndYear()}{@code .signum() < 0 ? GregorianCalendar.BC : GregorianCalendar.AD}</td>
      *     </tr>
--- a/jaxp/src/java.xml/share/classes/javax/xml/datatype/package.html	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/datatype/package.html	Wed Jul 05 23:33:24 2017 +0200
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<!doctype html>
 <!--
-Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -24,8 +24,7 @@
 questions. 
 -->
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
+<html>
 
 	<head>
 		<title>javax.xml.xpath</title>
@@ -50,9 +49,10 @@
 			<li><a href="http://www.w3.org/TR/xpath-datamodel#dt-yearMonthDuration">XQuery 1.0 and XPath 2.0 Data Model, xdt:yearMonthDuration</a></li>
 		</ul>
 
-		<hr />
+		<hr>
 		
-		<table border="1" cellpadding="2">
+		<table class="striped">
+			<caption> W3C XML Schema/Java Type Mappings</caption>
 			<thead>
 				<tr>
 					<th>W3C XML Schema Data Type</th>
@@ -101,10 +101,11 @@
 			</tbody>
 		</table>
 		
-		<hr />
+		<hr>
 		
 		
-		<table border="1" cellpadding="2">
+		<table class="striped">
+			<caption>XQuery and XPath/Java Type Mappings</caption>
 			<thead>
 				<tr>
 					<th>XQuery 1.0 and XPath 2.0 Data Model</th>
@@ -124,7 +125,7 @@
 			</tbody>
 		</table>
 		
-		<hr />
+		<hr>
 		
 		<p>
 			W3C XML Schema data types that have a "<em>natural</em>" mapping to Java types are defined by
@@ -151,7 +152,7 @@
 			<li>xs:unsignedShort</li>
 		</ul>
 		
-		<hr />
+		<hr>
 		
 
 		<ul>
@@ -162,7 +163,7 @@
 			<li>Since 1.5</li>
 		</ul>
 		
-		<hr />
+		<hr>
 		
 
 	</body>
--- a/jaxp/src/java.xml/share/classes/javax/xml/namespace/NamespaceContext.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/namespace/NamespaceContext.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -88,17 +88,12 @@
      * table describes the returned Namespace URI value for all
      * possible prefix values:
      *
-     * <table border="2" rules="all" cellpadding="4">
+     * <table class="striped">
+     *   <caption>Return value for specified prefixes</caption>
      *   <thead>
      *     <tr>
-     *       <td align="center" colspan="2">
-     *         {@code getNamespaceURI(prefix)}
-     *         return value for specified prefixes
-     *       </td>
-     *     </tr>
-     *     <tr>
-     *       <td>prefix parameter</td>
-     *       <td>Namespace URI return value</td>
+     *       <th>prefix parameter</th>
+     *       <th>Namespace URI return value</th>
      *     </tr>
      *   </thead>
      *   <tbody>
@@ -158,15 +153,10 @@
      * table describes the returned prefix value for all Namespace URI
      * values:
      *
-     * <table border="2" rules="all" cellpadding="4">
+     * <table class="striped">
+     * <caption>Return value for specified Namespace URIs</caption>
      *   <thead>
      *     <tr>
-     *       <th align="center" colspan="2">
-     *         {@code getPrefix(namespaceURI)} return value for
-     *         specified Namespace URIs
-     *       </th>
-     *     </tr>
-     *     <tr>
      *       <th>Namespace URI parameter</th>
      *       <th>prefix value returned</th>
      *     </tr>
@@ -230,14 +220,10 @@
      * table describes the returned prefixes value for all Namespace
      * URI values:
      *
-     * <table border="2" rules="all" cellpadding="4">
+     * <table class="striped">
+     *   <caption>Return value for specified Namespace URIs</caption>
      *   <thead>
      *     <tr>
-     *       <th align="center" colspan="2">{@code
-     *         getPrefixes(namespaceURI)} return value for
-     *         specified Namespace URIs</th>
-     *     </tr>
-     *     <tr>
      *       <th>Namespace URI parameter</th>
      *       <th>prefixes value returned</th>
      *     </tr>
--- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLEventWriter.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLEventWriter.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 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
@@ -64,21 +64,17 @@
    * Add an event to the output stream
    * Adding a START_ELEMENT will open a new namespace scope that
    * will be closed when the corresponding END_ELEMENT is written.
-   * <table border="2" rules="all" cellpadding="4">
+   * <table class="striped">
+   *   <caption>Required and optional fields for events added to the writer</caption>
    *   <thead>
    *     <tr>
-   *       <th align="center" colspan="2">
-   *         Required and optional fields for events added to the writer
-   *       </th>
-   *     </tr>
-   *   </thead>
-   *   <tbody>
-   *     <tr>
    *       <th>Event Type</th>
    *       <th>Required Fields</th>
    *       <th>Optional Fields</th>
    *       <th>Required Behavior</th>
    *     </tr>
+   *   </thead>
+   *   <tbody>
    *     <tr>
    *       <td> START_ELEMENT  </td>
    *       <td> QName name </td>
--- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLInputFactory.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLInputFactory.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,22 +36,18 @@
  * Each property varies in the level of support required by each implementation.
  * The level of support required is described in the 'Required' column.
  *
- *   <table border="2" rules="all" cellpadding="4">
+ *   <table class="striped">
+ *    <caption>Configuration Parameters</caption>
  *    <thead>
  *      <tr>
- *        <th align="center" colspan="5">
- *          Configuration parameters
- *        </th>
- *      </tr>
- *    </thead>
- *    <tbody>
- *      <tr>
  *        <th>Property Name</th>
  *        <th>Behavior</th>
  *        <th>Return type</th>
  *        <th>Default Value</th>
  *        <th>Required</th>
  *      </tr>
+ *    </thead>
+ *    <tbody>
  * <tr><td>javax.xml.stream.isValidating</td><td>Turns on/off implementation specific DTD validation</td><td>Boolean</td><td>False</td><td>No</td></tr>
  * <tr><td>javax.xml.stream.isNamespaceAware</td><td>Turns on/off namespace processing for XML 1.0 support</td><td>Boolean</td><td>True</td><td>True (required) / False (optional)</td></tr>
  * <tr><td>javax.xml.stream.isCoalescing</td><td>Requires the processor to coalesce adjacent character data</td><td>Boolean</td><td>False</td><td>Yes</td></tr>
--- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLOutputFactory.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLOutputFactory.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,22 +36,18 @@
  * Each property varies in the level of support required by each implementation.
  * The level of support required is described in the 'Required' column.
  *
- *     <table border="2" rules="all" cellpadding="4">
+ *     <table class="striped">
+ *     <caption>Configuration Parameters</caption>
  *     <thead>
  *      <tr>
- *        <th align="center" colspan="2">
- *          Configuration parameters
- *        </th>
- *      </tr>
- *    </thead>
- *    <tbody>
- *      <tr>
  *        <th>Property Name</th>
  *        <th>Behavior</th>
  *        <th>Return type</th>
  *        <th>Default Value</th>
  *        <th>Required</th>
  *              </tr>
+ *    </thead>
+ *    <tbody>
  *         <tr><td>javax.xml.stream.isRepairingNamespaces</td><td>defaults prefixes
  *                 on the output side</td><td>Boolean</td><td>False</td><td>Yes</td></tr>
  *      </tbody>
--- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLStreamReader.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLStreamReader.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 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
@@ -71,19 +71,15 @@
  * If a method is called in an invalid state the method will throw a
  * java.lang.IllegalStateException.
  *
- * <table border="2" rules="all" cellpadding="4">
+ * <table class="striped">
+ *   <caption>Valid methods for each state</caption>
  *   <thead>
  *     <tr>
- *       <th align="center" colspan="2">
- *         Valid methods for each state
- *       </th>
- *     </tr>
- *   </thead>
- *   <tbody>
- *     <tr>
  *       <th>Event Type</th>
  *       <th>Valid Methods</th>
  *     </tr>
+ *   </thead>
+ *   <tbody>
  *     <tr>
  *       <td> All States  </td>
  *       <td> getProperty(), hasNext(), require(), close(),
--- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLStreamWriter.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLStreamWriter.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 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
@@ -38,12 +38,10 @@
  * Each NAMESPACE
  * and ATTRIBUTE must be individually written.
  *
- * <table border="1" cellpadding="2" cellspacing="0">
+ * <table class="striped">
+ *     <caption>XML Namespaces, {@code javax.xml.stream.isRepairingNamespaces} and write method behaviour</caption>
  *     <thead>
- *         <tr>
- *             <th colspan="5">XML Namespaces, {@code javax.xml.stream.isRepairingNamespaces} and write method behaviour</th>
- *         </tr>
- *         <tr>
+ *         <tr style="border-bottom: 1px solid black">
  *             <th>Method</th> <!-- method -->
  *             <th colspan="2">{@code isRepairingNamespaces} == true</th>
  *             <th colspan="2">{@code isRepairingNamespaces} == false</th>
--- a/jaxp/src/java.xml/share/classes/javax/xml/transform/package.html	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/transform/package.html	Wed Jul 05 23:33:24 2017 +0200
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<!doctype html>
 <!--
-Copyright (c) 2000, 2005, 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
@@ -24,11 +24,7 @@
 questions. 
 -->
 
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
+<html>
 
 <head>
   <title>javax.xml.transform</title>
@@ -97,7 +93,7 @@
 
 
 <h3>
-<a name="qname-delimiter">Qualified Name Representation</a>
+<a id="qname-delimiter">Qualified Name Representation</a>
 </h3>
 
 <p><a href="http://www.w3.org/TR/REC-xml-names">Namespaces</a>
--- a/jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactory.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactory.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -58,7 +58,7 @@
  * may not attempt to recursively invoke the {@code newSchema} method,
  * even from the same thread.
  *
- * <h2><a name="schemaLanguage"></a>Schema Language</h2>
+ * <h2><a id="schemaLanguage"></a>Schema Language</h2>
  * <p>
  * This spec uses a namespace URI to designate a schema language.
  * The following table shows the values defined by this specification.
@@ -84,7 +84,8 @@
  * validation implemented on this interface necessarily deviate from
  * the XML DTD semantics as defined in the XML 1.0</em>.
  *
- * <table border="1" cellpadding="2">
+ * <table class="striped">
+ *   <caption>URIs for Supported Schema languages</caption>
  *   <thead>
  *     <tr>
  *       <th>value</th>
--- a/jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactoryLoader.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactoryLoader.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 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,7 +60,7 @@
      *      the list of available schema languages</a>.
      *
      * @throws NullPointerException
-     *      If the <tt>schemaLanguage</tt> parameter is null.
+     *      If the <code>schemaLanguage</code> parameter is null.
      *
      * @return <code>null</code> if the callee fails to create one.
      */
--- a/jaxp/src/java.xml/share/classes/javax/xml/validation/Validator.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/validation/Validator.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -131,12 +131,10 @@
      * <p>This method places the following restrictions on the types of
      * the {@link Source}/{@link Result} accepted.
      *
-     * <table border=1>
+     * <table class="plain">
+     * <caption>{@code Source} / {@code Result} Accepted</caption>
      * <thead>
      *  <tr>
-     *   <th colspan="5">{@code Source} / {@code Result} Accepted</th>
-     *  </tr>
-     *  <tr>
      *   <th></th>
      *   <th>{@link javax.xml.transform.stream.StreamSource}</th>
      *   <th>{@link javax.xml.transform.sax.SAXSource}</th>
@@ -144,7 +142,7 @@
      *   <th>{@link javax.xml.transform.stax.StAXSource}</th>
      *  </tr>
      * </thead>
-     * <tbody align="center">
+     * <tbody style="text-align:center">
      *  <tr>
      *   <td>{@code null}</td>
      *   <td>OK</td>
--- a/jaxp/src/java.xml/share/classes/javax/xml/validation/package.html	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/validation/package.html	Wed Jul 05 23:33:24 2017 +0200
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<!doctype html>
 <!--
-Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -24,11 +24,7 @@
 questions. 
 -->
 
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
+<html>
 
 <head>
   <title>javax.xml.validation</title>
@@ -86,7 +82,7 @@
 		        process simple (see <a href="#example-1">example</a> below).</li>
           </ul>
 		<p>
-            <a name="example-1"><strong>Usage example</strong>.</a> The following example demonstrates validating
+            <a id="example-1"><strong>Usage example</strong>.</a> The following example demonstrates validating
             an XML document with the Validation API (for readability, some exception handling is not shown):
 		</p>
             <pre>
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPath.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPath.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -31,14 +31,18 @@
 
 /**
  * {@code XPath} provides access to the XPath evaluation environment and expressions.
+ * The XPath evaluation is affected by the factors described in the following table.
  *
- * <a name="XPath-evaluation"></a>
- * <table border="1" cellpadding="2">
+ * <a id="XPath-evaluation"></a>
+ * <table class="striped">
+ *    <caption>Evaluation of XPath Expressions</caption>
  *    <thead>
  *      <tr>
- *        <th colspan="2">Evaluation of XPath Expressions.</th>
+ *        <th>Factor</th>
+ *        <th>Behavior</th>
  *      </tr>
  *    </thead>
+ *    <tbody>
  *    <tr>
  *      <td>context</td>
  *      <td>
@@ -84,6 +88,7 @@
  *        Conversion to the return type follows XPath conversion rules.
  *      </td>
  *    </tr>
+ *    </tbody>
  * </table>
  *
  * <p>An XPath object is not thread-safe and not reentrant.
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathExpression.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathExpression.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -30,14 +30,18 @@
 
 /**
  * {@code XPathExpression} provides access to compiled XPath expressions.
+ * The XPath evaluation is affected by the factors described in the following table.
  *
- * <a name="XPathExpression-evaluation"></a>
- * <table border="1" cellpadding="2">
+ * <a id="XPathExpression-evaluation"></a>
+ * <table class="striped">
+ *    <caption>Evaluation of XPath Expressions</caption>
  *    <thead>
  *      <tr>
- *        <th colspan="2">Evaluation of XPath Expressions.</th>
+ *        <th>Factor</th>
+ *        <th>Behavior</th>
  *      </tr>
  *    </thead>
+ *    <tbody>
  *    <tr>
  *      <td>context</td>
  *      <td>
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/package.html	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/package.html	Wed Jul 05 23:33:24 2017 +0200
@@ -1,8 +1,8 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!doctype html>
 <html>
 <head>
 <!--
-Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 questions. 
 -->
 </head>
-<body bgcolor="white">
+<body>
 
 This package provides an <em>object-model neutral</em> API for the
 evaluation of XPath expressions and access to the evaluation
@@ -36,7 +36,7 @@
 The XPath API supports <a href="http://www.w3.org/TR/xpath">
     XML Path Language (XPath) Version 1.0</a>
 
-<hr />
+<hr>
 
 <ul>
     <li><a href='#XPath.Overview'>1. XPath Overview</a></li>
@@ -52,7 +52,7 @@
     <li><a href='#XPath.Use'>5. Using the XPath API</a></li>
 </ul>
 <p>
-<a name="XPath.Overview"></a>
+<a id="XPath.Overview"></a>
 <h3>1. XPath Overview</h3>
 
 <p>The XPath language provides a simple, concise syntax for selecting
@@ -69,7 +69,7 @@
 replace many lines of DOM API code.
 </p>
 
-<a name="XPath.Expressions"></a>
+<a id="XPath.Expressions"></a>
 <h3>2. XPath Expressions</h3>
 
 <p>An XPath <em>expression</em> is composed of a <em>location
@@ -139,11 +139,15 @@
 nodes. The following table gives examples of location paths for each
 of these node types:</p>
 
-<table border="1">
+<table class="striped">
+<caption>Examples of Location Path</caption>
+<thead>
 <tr>
-<td>Location Path</td>
-<td>Description</td>
+<th>Location Path</th>
+<th>Description</th>
 </tr>
+</thead>
+<tbody>
 <tr>
 <td>
 <code>/foo/bar/<strong>@id</strong></code>
@@ -171,6 +175,7 @@
 <code>&lt;bar&gt;</code> element.
 </td>
 </tr>
+</tbody>
 </table>
 
 <p>Predicates allow for refining the nodes selected by an XPath
@@ -194,7 +199,7 @@
 </pre>
 </blockquote>
 
-<a name="XPath.Datatypes"></a>
+<a id="XPath.Datatypes"></a>
 <h3>3. XPath Data Types</h3>
 
 <p>While XPath expressions select nodes in the XML document, the XPath
@@ -207,7 +212,7 @@
 <li><code>String</code></li>
 </ul>
 
-<a name="XPath.Datatypes.QName"></a>
+<a id="XPath.Datatypes.QName"></a>
 <h3>3.1 QName types</h3>
 The XPath API defines the following {@link javax.xml.namespace.QName} types to 
 represent return types of an XPath evaluation:
@@ -236,7 +241,7 @@
 <p>The <code>Number</code> return type attempts to coalesce the text
 of a node to a <code>double</code> data type.
 
-<a name="XPath.Datatypes.Class"></a>
+<a id="XPath.Datatypes.Class"></a>
 <h3>3.2 Class types</h3>
 In addition to the QName types, the XPath API supports the use of Class types
 through the <code>XPathExpression.evaluteExpression(...)</code> or 
@@ -254,14 +259,14 @@
 <p>
 Of the subtypes of Number, only Double, Integer and Long are supported.
          
-<a name="XPath.Datatypes.Enum"></a>
+<a id="XPath.Datatypes.Enum"></a>
 <h3>3.3 Enum types</h3>
 Enum types are defined in {@link javax.xml.xpath.XPathEvaluationResult.XPathResultType} 
 that provide mappings between the QName and Class types above. The result of 
 evaluating an expression using the <code>XPathExpression.evaluteExpression(...)</code> 
 or <code>XPath.evaluateExpression(...)</code> methods will be of one of these types.
 
-<a name="XPath.Context"></a>
+<a id="XPath.Context"></a>
 <h3>4. XPath Context</h3>
 
 <p>XPath location paths may be relative to a particular node in the
@@ -278,7 +283,7 @@
 It is an XML document tree represented as a hierarchy of nodes, a 
 {@link org.w3c.dom.Node} for example, in the JDK implementation.
 
-<a name="XPath.Use"></a>
+<a id="XPath.Use"></a>
 <h3>5. Using the XPath API</h3>
 
 Consider the following XML document:
--- a/jaxp/src/java.xml/share/classes/org/w3c/dom/Attr.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/Attr.java	Wed Jul 05 23:33:24 2017 +0200
@@ -111,7 +111,9 @@
  * <p>The following table gives some examples of the relations between the
  * attribute value in the original document (parsed attribute), the value as
  * exposed in the DOM, and the serialization of the value:
- * <table border='1' cellpadding='3'>
+ * <table class="striped">
+ * <caption>Examples of the Original, Normalized and Serialized Values </caption>
+ * <thead>
  * <tr>
  * <th>Examples</th>
  * <th>Parsed
@@ -119,6 +121,8 @@
  * <th>Initial <code>Attr.value</code></th>
  * <th>Serialized attribute value</th>
  * </tr>
+ * </thead>
+ * <tbody>
  * <tr>
  * <td valign='top' rowspan='1' colspan='1'>
  * Character reference</td>
@@ -126,7 +130,7 @@
  * <pre>"x&amp;#178;=5"</pre>
  * </td>
  * <td valign='top' rowspan='1' colspan='1'>
- * <pre>"x\u00b2=5"</pre>
+ * <pre>"x&#178;=5"</pre>
  * </td>
  * <td valign='top' rowspan='1' colspan='1'>
  * <pre>"x&amp;#178;=5"</pre>
@@ -180,6 +184,7 @@
  * <td valign='top' rowspan='1' colspan='1'><em>Dependent on Implementation and Load Options</em></td>
  * <td valign='top' rowspan='1' colspan='1'><em>Dependent on Implementation and Load/Save Options</em></td>
  * </tr>
+ * </tbody>
  * </table>
  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
  */
--- a/jaxp/src/java.xml/share/classes/org/w3c/dom/Document.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/Document.java	Wed Jul 05 23:33:24 2017 +0200
@@ -353,37 +353,42 @@
      *   instantiate.
      * @return A new <code>Element</code> object with the following
      *   attributes:
-     * <table border='1' cellpadding='3'>
+     * <table class="striped">
+     * <caption>Attributes of the {@code Element} object</caption>
+     * <thead>
      * <tr>
      * <th>Attribute</th>
      * <th>Value</th>
      * </tr>
+     * </thead>
+     * <tbody>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'><code>Node.nodeName</code></td>
-     * <td valign='top' rowspan='1' colspan='1'>
+     * <td><code>Node.nodeName</code></td>
+     * <td>
      *   <code>qualifiedName</code></td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'><code>Node.namespaceURI</code></td>
-     * <td valign='top' rowspan='1' colspan='1'>
+     * <td><code>Node.namespaceURI</code></td>
+     * <td>
      *   <code>namespaceURI</code></td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'><code>Node.prefix</code></td>
-     * <td valign='top' rowspan='1' colspan='1'>prefix, extracted
+     * <td><code>Node.prefix</code></td>
+     * <td>prefix, extracted
      *   from <code>qualifiedName</code>, or <code>null</code> if there is
      *   no prefix</td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'><code>Node.localName</code></td>
-     * <td valign='top' rowspan='1' colspan='1'>local name, extracted from
+     * <td><code>Node.localName</code></td>
+     * <td>local name, extracted from
      *   <code>qualifiedName</code></td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'><code>Element.tagName</code></td>
-     * <td valign='top' rowspan='1' colspan='1'>
+     * <td><code>Element.tagName</code></td>
+     * <td>
      *   <code>qualifiedName</code></td>
      * </tr>
+     * </tbody>
      * </table>
      * @exception DOMException
      *   INVALID_CHARACTER_ERR: Raised if the specified
@@ -417,43 +422,48 @@
      * @param qualifiedName The qualified name of the attribute to
      *   instantiate.
      * @return A new <code>Attr</code> object with the following attributes:
-     * <table border='1' cellpadding='3'>
+     * <table class="striped">
+     * <caption>Attributes of the {@code Attr} object </caption>
+     * <thead>
      * <tr>
      * <th>
      *   Attribute</th>
      * <th>Value</th>
      * </tr>
+     * </thead>
+     * <tbody>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'><code>Node.nodeName</code></td>
-     * <td valign='top' rowspan='1' colspan='1'>qualifiedName</td>
+     * <td><code>Node.nodeName</code></td>
+     * <td>qualifiedName</td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'>
+     * <td>
      *   <code>Node.namespaceURI</code></td>
-     * <td valign='top' rowspan='1' colspan='1'><code>namespaceURI</code></td>
+     * <td><code>namespaceURI</code></td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'>
+     * <td>
      *   <code>Node.prefix</code></td>
-     * <td valign='top' rowspan='1' colspan='1'>prefix, extracted from
+     * <td>prefix, extracted from
      *   <code>qualifiedName</code>, or <code>null</code> if there is no
      *   prefix</td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'><code>Node.localName</code></td>
-     * <td valign='top' rowspan='1' colspan='1'>local name, extracted from
+     * <td><code>Node.localName</code></td>
+     * <td>local name, extracted from
      *   <code>qualifiedName</code></td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'><code>Attr.name</code></td>
-     * <td valign='top' rowspan='1' colspan='1'>
+     * <td><code>Attr.name</code></td>
+     * <td>
      *   <code>qualifiedName</code></td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'><code>Node.nodeValue</code></td>
-     * <td valign='top' rowspan='1' colspan='1'>the empty
+     * <td><code>Node.nodeValue</code></td>
+     * <td>the empty
      *   string</td>
      * </tr>
+     * </tbody>
      * </table>
      * @exception DOMException
      *   INVALID_CHARACTER_ERR: Raised if the specified
--- a/jaxp/src/java.xml/share/classes/org/w3c/dom/Node.java	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/Node.java	Wed Jul 05 23:33:24 2017 +0200
@@ -61,104 +61,109 @@
  * <p>The values of <code>nodeName</code>,
  * <code>nodeValue</code>, and <code>attributes</code> vary according to the
  * node type as follows:
- * <table border='1' cellpadding='3'>
+ * <table class="striped">
+ * <caption style="display:none">Interface table</caption>
+ * <thead>
  * <tr>
  * <th>Interface</th>
  * <th>nodeName</th>
  * <th>nodeValue</th>
  * <th>attributes</th>
  * </tr>
+ * </thead>
+ * <tbody>
  * <tr>
- * <td valign='top' rowspan='1' colspan='1'>
+ * <td>
  * <code>Attr</code></td>
- * <td valign='top' rowspan='1' colspan='1'>same as <code>Attr.name</code></td>
- * <td valign='top' rowspan='1' colspan='1'>same as
+ * <td>same as <code>Attr.name</code></td>
+ * <td>same as
  * <code>Attr.value</code></td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+ * <td><code>null</code></td>
  * </tr>
  * <tr>
- * <td valign='top' rowspan='1' colspan='1'><code>CDATASection</code></td>
- * <td valign='top' rowspan='1' colspan='1'>
+ * <td><code>CDATASection</code></td>
+ * <td>
  * <code>"#cdata-section"</code></td>
- * <td valign='top' rowspan='1' colspan='1'>same as <code>CharacterData.data</code>, the
+ * <td>same as <code>CharacterData.data</code>, the
  * content of the CDATA Section</td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+ * <td><code>null</code></td>
  * </tr>
  * <tr>
- * <td valign='top' rowspan='1' colspan='1'><code>Comment</code></td>
- * <td valign='top' rowspan='1' colspan='1'>
+ * <td><code>Comment</code></td>
+ * <td>
  * <code>"#comment"</code></td>
- * <td valign='top' rowspan='1' colspan='1'>same as <code>CharacterData.data</code>, the
+ * <td>same as <code>CharacterData.data</code>, the
  * content of the comment</td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+ * <td><code>null</code></td>
  * </tr>
  * <tr>
- * <td valign='top' rowspan='1' colspan='1'><code>Document</code></td>
- * <td valign='top' rowspan='1' colspan='1'>
+ * <td><code>Document</code></td>
+ * <td>
  * <code>"#document"</code></td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+ * <td><code>null</code></td>
+ * <td><code>null</code></td>
  * </tr>
  * <tr>
- * <td valign='top' rowspan='1' colspan='1'>
+ * <td>
  * <code>DocumentFragment</code></td>
- * <td valign='top' rowspan='1' colspan='1'><code>"#document-fragment"</code></td>
- * <td valign='top' rowspan='1' colspan='1'>
+ * <td><code>"#document-fragment"</code></td>
+ * <td>
  * <code>null</code></td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+ * <td><code>null</code></td>
  * </tr>
  * <tr>
- * <td valign='top' rowspan='1' colspan='1'><code>DocumentType</code></td>
- * <td valign='top' rowspan='1' colspan='1'>same as
+ * <td><code>DocumentType</code></td>
+ * <td>same as
  * <code>DocumentType.name</code></td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+ * <td><code>null</code></td>
+ * <td><code>null</code></td>
  * </tr>
  * <tr>
- * <td valign='top' rowspan='1' colspan='1'>
+ * <td>
  * <code>Element</code></td>
- * <td valign='top' rowspan='1' colspan='1'>same as <code>Element.tagName</code></td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
- * <td valign='top' rowspan='1' colspan='1'>
+ * <td>same as <code>Element.tagName</code></td>
+ * <td><code>null</code></td>
+ * <td>
  * <code>NamedNodeMap</code></td>
  * </tr>
  * <tr>
- * <td valign='top' rowspan='1' colspan='1'><code>Entity</code></td>
- * <td valign='top' rowspan='1' colspan='1'>entity name</td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
- * <td valign='top' rowspan='1' colspan='1'>
+ * <td><code>Entity</code></td>
+ * <td>entity name</td>
+ * <td><code>null</code></td>
+ * <td>
  * <code>null</code></td>
  * </tr>
  * <tr>
- * <td valign='top' rowspan='1' colspan='1'><code>EntityReference</code></td>
- * <td valign='top' rowspan='1' colspan='1'>name of entity referenced</td>
- * <td valign='top' rowspan='1' colspan='1'>
+ * <td><code>EntityReference</code></td>
+ * <td>name of entity referenced</td>
+ * <td>
  * <code>null</code></td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+ * <td><code>null</code></td>
  * </tr>
  * <tr>
- * <td valign='top' rowspan='1' colspan='1'><code>Notation</code></td>
- * <td valign='top' rowspan='1' colspan='1'>notation name</td>
- * <td valign='top' rowspan='1' colspan='1'>
+ * <td><code>Notation</code></td>
+ * <td>notation name</td>
+ * <td>
  * <code>null</code></td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+ * <td><code>null</code></td>
  * </tr>
  * <tr>
- * <td valign='top' rowspan='1' colspan='1'><code>ProcessingInstruction</code></td>
- * <td valign='top' rowspan='1' colspan='1'>same
+ * <td><code>ProcessingInstruction</code></td>
+ * <td>same
  * as <code>ProcessingInstruction.target</code></td>
- * <td valign='top' rowspan='1' colspan='1'>same as
+ * <td>same as
  * <code>ProcessingInstruction.data</code></td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+ * <td><code>null</code></td>
  * </tr>
  * <tr>
- * <td valign='top' rowspan='1' colspan='1'><code>Text</code></td>
- * <td valign='top' rowspan='1' colspan='1'>
+ * <td><code>Text</code></td>
+ * <td>
  * <code>"#text"</code></td>
- * <td valign='top' rowspan='1' colspan='1'>same as <code>CharacterData.data</code>, the content
+ * <td>same as <code>CharacterData.data</code>, the content
  * of the text node</td>
- * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+ * <td><code>null</code></td>
  * </tr>
+ * </tbody>
  * </table>
  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
  */
@@ -687,30 +692,35 @@
      * textual content.
      * <br>The string returned is made of the text content of this node
      * depending on its type, as defined below:
-     * <table border='1' cellpadding='3'>
+     * <table class="striped">
+     * <caption style="display:none">Node/Content table</caption>
+     * <thead>
      * <tr>
      * <th>Node type</th>
      * <th>Content</th>
      * </tr>
+     * </thead>
+     * <tbody>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'>
+     * <td>
      * ELEMENT_NODE, ATTRIBUTE_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE,
      * DOCUMENT_FRAGMENT_NODE</td>
-     * <td valign='top' rowspan='1' colspan='1'>concatenation of the <code>textContent</code>
+     * <td>concatenation of the <code>textContent</code>
      * attribute value of every child node, excluding COMMENT_NODE and
      * PROCESSING_INSTRUCTION_NODE nodes. This is the empty string if the
      * node has no children.</td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'>TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE,
+     * <td>TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE,
      * PROCESSING_INSTRUCTION_NODE</td>
-     * <td valign='top' rowspan='1' colspan='1'><code>nodeValue</code></td>
+     * <td><code>nodeValue</code></td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'>DOCUMENT_NODE,
+     * <td>DOCUMENT_NODE,
      * DOCUMENT_TYPE_NODE, NOTATION_NODE</td>
-     * <td valign='top' rowspan='1' colspan='1'><em>null</em></td>
+     * <td><em>null</em></td>
      * </tr>
+     * </tbody>
      * </table>
      * @exception DOMException
      *   DOMSTRING_SIZE_ERR: Raised when it would return more characters than
@@ -737,30 +747,35 @@
      * textual content.
      * <br>The string returned is made of the text content of this node
      * depending on its type, as defined below:
-     * <table border='1' cellpadding='3'>
+     * <table class="striped">
+     * <caption style="display:none">Node/Content table</caption>
+     * <thead>
      * <tr>
      * <th>Node type</th>
      * <th>Content</th>
      * </tr>
+     * </thead>
+     * <tbody>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'>
+     * <td>
      * ELEMENT_NODE, ATTRIBUTE_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE,
      * DOCUMENT_FRAGMENT_NODE</td>
-     * <td valign='top' rowspan='1' colspan='1'>concatenation of the <code>textContent</code>
+     * <td>concatenation of the <code>textContent</code>
      * attribute value of every child node, excluding COMMENT_NODE and
      * PROCESSING_INSTRUCTION_NODE nodes. This is the empty string if the
      * node has no children.</td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'>TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE,
+     * <td>TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE,
      * PROCESSING_INSTRUCTION_NODE</td>
-     * <td valign='top' rowspan='1' colspan='1'><code>nodeValue</code></td>
+     * <td><code>nodeValue</code></td>
      * </tr>
      * <tr>
-     * <td valign='top' rowspan='1' colspan='1'>DOCUMENT_NODE,
+     * <td>DOCUMENT_NODE,
      * DOCUMENT_TYPE_NODE, NOTATION_NODE</td>
-     * <td valign='top' rowspan='1' colspan='1'><em>null</em></td>
+     * <td><em>null</em></td>
      * </tr>
+     * </tbody>
      * </table>
      * @exception DOMException
      *   NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
--- a/jaxp/src/java.xml/share/classes/org/w3c/dom/ranges/package.html	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/ranges/package.html	Wed Jul 05 23:33:24 2017 +0200
@@ -2,7 +2,7 @@
 <head>
     <title>W3C IPR SOFTWARE NOTICE</title>
 </head>
-<body bgcolor="white">
+<body>
     <p>
       Document Object Model Level 2 Traversal and Range is a 
       platform and language-neutral interfaces that allow programs 
@@ -20,14 +20,14 @@
     <h1>
       W3C IPR SOFTWARE NOTICE
     </h1>
-    <h3>
+    <h2>
       Copyright &copy; 2000 <a href="http://www.w3.org/">World Wide Web
       Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts
       Institute of Technology</a>, <a href="http://www.inria.fr/">Institut
       National de Recherche en Informatique et en Automatique</a>, <a
       href="http://www.keio.ac.jp/">Keio University</a>). All Rights
       Reserved.
-    </h3>
+    </h2>
     <p>
       The DOM bindings are published under the W3C Software Copyright Notice
       and License. The software license requires "Notice of any changes or
@@ -42,14 +42,14 @@
       and License could be found at <a
       href='http://www.w3.org/Consortium/Legal/copyright-software-19980720'>http://www.w3.org/Consortium/Legal/copyright-software-19980720</a>
     </p>
-    <h3>
+    <h2>
       Copyright &copy; 1994-2000 <a href="http://www.w3.org/">World Wide Web
       Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts
       Institute of Technology</a>, <a href="http://www.inria.fr/">Institut
       National de Recherche en Informatique et en Automatique</a>, <a
       href="http://www.keio.ac.jp/">Keio University</a>). All Rights
       Reserved. http://www.w3.org/Consortium/Legal/
-    </h3>
+    </h2>
     <p>
       This W3C work (including software, documents, or other related items) is
       being provided by the copyright holders under the following license. By
--- a/jaxp/src/java.xml/share/classes/org/xml/sax/package.html	Wed May 31 17:49:11 2017 +0000
+++ b/jaxp/src/java.xml/share/classes/org/xml/sax/package.html	Wed Jul 05 23:33:24 2017 +0200
@@ -24,14 +24,18 @@
 <em>setFeature</em>.  Those standard identifiers are: </p>
 
 
-<table border="1" cellpadding="3" cellspacing="0" width="100%">
-    <tr align="center" bgcolor="#ccccff">
+<table class="striped">
+    <caption>SAX2 Standard Features </caption>
+    <thead>
+    <tr>
 	<th>Feature ID</th>
 	<th>Access</th>
 	<th>Default</th>
 	<th>Description</th>
 	</tr>
-
+    </thead>
+   	
+    <tbody>
     <tr>
 	<td>external-general-entities</td>
 	<td><em>read/write</em></td>
@@ -208,7 +212,7 @@
         Returns "false" if the parser supports only XML 1.0.
 		</td>
     </tr>
-
+    </tbody>
 </table>
 
 <p> Support for the default values of the
@@ -236,11 +240,15 @@
 <code>dom-node</code>.  Manage those properties using
 <em>setProperty()</em>.  Those identifiers are: </p>
 
-<table border="1" cellpadding="3" cellspacing="0" width="100%">
-    <tr align="center" bgcolor="#ccccff">
+<table class="striped">
+<caption>SAX2 Standard Properties </caption>
+<thead>
+    <tr>
 	<th>Property ID</th>
 	<th>Description</th>
 	</tr>
+</thead>
+<tbody>
 
     <tr>
 	<td>declaration-handler</td>
@@ -287,7 +295,7 @@
 	<td> Readable only during a parser callback, this exposes a <b>TBS</b>
 	    chunk of characters responsible for the current event. </td>
 	</tr>
-
+</tbody>
 </table>
 
 <p> All of these standard properties are optional;
--- a/jdk/.hgtags	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/.hgtags	Wed Jul 05 23:33:24 2017 +0200
@@ -422,3 +422,5 @@
 ef9954f6896bb0b95ac62bf769f68b59a7a56ccd jdk-9+170
 cbd65760a005766610583949b3b5c9ace92e74b3 jdk-10+7
 f0adc10ed8316e6cf316e3208c5ecf6835d22bc4 jdk-10+8
+b9409a7daa6c793dd631e52fe6ef79d08a3b337a jdk-10+9
+29bbedd4cce8e14742bdb22118c057b877c02f0f jdk-9+171
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/data/docs-resources/resources/jdk-default.css	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  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.
+ */
+
+body {
+  margin: 2em 2em;
+  font-family: DejaVu Sans, Bitstream Vera Sans, Luxi Sans, Verdana, Arial, Helvetica;
+  font-size: 10pt;
+  line-height: 1.4;
+}
+
+pre, code, tt {
+  font-family: DejaVu Sans Mono, Bitstream Vera Sans Mono, Luxi Mono,
+    Courier New, monospace;
+}
+
+blockquote {
+  margin: 1.5ex 0em 1.5ex 2em;
+}
+
+p {
+  padding: 0pt;
+  margin: 1ex 0em;
+}
+
+p:first-child, pre:first-child { margin-top: 0pt; }
+
+h1 {
+  font-weight: bold;
+  padding: 0pt;
+  margin: 2ex .5ex 1ex 0pt;
+}
+
+h1:first-child, h2:first-child {
+  margin-top: 0ex;
+}
+
+h2 {
+  font-weight: bold;
+  padding: 0pt;
+  margin: 2ex 0pt 1ex 0pt;
+}
+
+h3 {
+  font-weight: bold;
+  padding: 0pt;
+  margin: 1.5ex 0pt 1ex 0pt;
+}
+
+h4 {
+  font-weight: bold;
+  padding: 0pt;
+  margin: 1.5ex 0pt 1ex 0pt;
+}
+
+a:link {
+  color: #437291;
+}
+
+a:visited {
+  color: #666666;
+}
+
+a[href]:hover {
+  color: #e76f00;
+}
+
+a img {
+  border-width: 0px;
+}
+
+img {
+  background: white;
+}
+
+table {
+  border-collapse: collapse;
+  margin-left: 15px;
+  margin-right: 15px;
+}
+
+th, td {
+  padding: 3px;
+  vertical-align: top;
+}
+
+table, th, td {
+  border: 1px solid black;
+}
+
+caption  {
+  text-align: left;
+  font-style: italic;
+  text-indent: 15px;
+  margin-bottom:10px;
+}
+
+tr:nth-child(even), tr:nth-child(even) th[scope=row] {
+  background: #DDD;
+}
+
+tr:nth-child(odd), tr:nth-child(odd) th[scope=row] {
+  background: #FFF;
+}
+
+th {
+  background: #DDF;
+}
--- a/jdk/make/data/docs-resources/specs/resources/jdk-default.css	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  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.
- */
-
-body {
-  margin: 2em 2em;
-  font-family: DejaVu Sans, Bitstream Vera Sans, Luxi Sans, Verdana, Arial, Helvetica;
-  font-size: 10pt;
-  line-height: 1.4;
-}
-
-pre, code, tt {
-  font-family: DejaVu Sans Mono, Bitstream Vera Sans Mono, Luxi Mono,
-    Courier New, monospace;
-}
-
-blockquote {
-  margin: 1.5ex 0em 1.5ex 2em;
-}
-
-p {
-  padding: 0pt;
-  margin: 1ex 0em;
-}
-
-p:first-child, pre:first-child { margin-top: 0pt; }
-
-h1 {
-  font-weight: bold;
-  padding: 0pt;
-  margin: 2ex .5ex 1ex 0pt;
-}
-
-h1:first-child, h2:first-child {
-  margin-top: 0ex;
-}
-
-h2 {
-  font-weight: bold;
-  padding: 0pt;
-  margin: 2ex 0pt 1ex 0pt;
-}
-
-h3 {
-  font-weight: bold;
-  padding: 0pt;
-  margin: 1.5ex 0pt 1ex 0pt;
-}
-
-h4 {
-  font-weight: bold;
-  padding: 0pt;
-  margin: 1.5ex 0pt 1ex 0pt;
-}
-
-a:link {
-  color: #437291;
-}
-
-a:visited {
-  color: #666666;
-}
-
-a[href]:hover {
-  color: #e76f00;
-}
-
-a img {
-  border-width: 0px;
-}
-
-img {
-  background: white;
-}
-
-table {
-  border-collapse: collapse;
-  margin-left: 15px;
-  margin-right: 15px;
-}
-
-th, td {
-  padding: 3px;
-  vertical-align: top;
-}
-
-table, th, td {
-  border: 1px solid black;
-}
-
-caption  {
-  text-align: left;
-  font-style: italic;
-  text-indent: 15px;
-  margin-bottom:10px;
-}
-
-tr:nth-child(even) {
-  background: #DDD;
-}
-
-tr:nth-child(odd) {
-  background: #FFF;
-}
-
-th {
-  background: #DDF;
-}
--- a/jdk/make/src/classes/build/tools/docs/GenDocsBundlePage.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/make/src/classes/build/tools/docs/GenDocsBundlePage.java	Wed Jul 05 23:33:24 2017 +0200
@@ -31,18 +31,23 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
+import java.lang.module.ModuleDescriptor;
 import java.lang.module.ModuleFinder;
+import java.lang.module.ModuleReference;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
-import java.util.stream.Collectors;
+import java.util.function.Predicate;
 import java.util.stream.Stream;
+import static java.util.stream.Collectors.*;
 
 /**
  * Build tool to generate the docs bundle index page.
@@ -104,59 +109,33 @@
     }
 
     private static final String HEADER_TITLE = "@HEADER_TITLE@";
+
+
     final Path outputfile;
     final String title;
-    final Map<String, String> moduleGroups;
-
+    final Map<String, Set<ModuleDescriptor>> moduleGroups = new HashMap<>();
     GenDocsBundlePage(String title, Path outputfile) throws IOException
     {
         this.outputfile = outputfile;
         this.title = title;
-        this.moduleGroups = moduleGroups();
-    }
 
-    static Map<String, String> moduleGroups() throws IOException {
+        // read module groups
         ModuleFinder finder = ModuleFinder.ofSystem();
-        Map<String, String> groups = new HashMap<>();
         try (InputStream in = GenDocsBundlePage.class.getResourceAsStream(MODULE_GROUPS_PROPS)) {
             Properties props = new Properties();
             props.load(in);
             for (String key: props.stringPropertyNames()) {
-                Set<String> mods = Stream.of(props.getProperty(key).split("\\s+"))
-                                         .filter(mn -> finder.find(mn).isPresent())
-                                         .map(String::trim)
-                                         .collect(Collectors.toSet());
+                Set<ModuleDescriptor> mods =
+                    Stream.of(props.getProperty(key).split("\\s+"))
+                          .map(String::trim)
+                          .flatMap(mn -> finder.find(mn).stream())
+                          .map(ModuleReference::descriptor)
+                          .collect(toSet());
 
-                // divide into 3 columns: Java SE, JDK, JavaFX
-                StringBuilder sb = new StringBuilder();
-                sb.append(mods.stream()
-                              .filter(mn -> mn.startsWith("java."))
-                              .sorted()
-                              .map(GenDocsBundlePage::toHRef)
-                              .collect(Collectors.joining("\n")));
-                sb.append("</td>\n<td>")
-                  .append(mods.stream()
-                              .filter(mn -> mn.startsWith("jdk."))
-                              .sorted()
-                              .map(GenDocsBundlePage::toHRef)
-                              .collect(Collectors.joining("\n")));
-                sb.append("</td>\n<td>");
-                if (mods.stream().anyMatch(mn -> mn.startsWith("javafx."))) {
-                    sb.append(mods.stream()
-                                  .filter(mn -> mn.startsWith("javafx."))
-                                  .sorted()
-                                  .map(GenDocsBundlePage::toHRef)
-                                  .collect(Collectors.joining("\n")));
-                }
                 String name = "@" + key.toUpperCase(Locale.ENGLISH) + "@";
-                groups.put(name, sb.toString());
-            }
+                moduleGroups.put(name, mods);
+            };
         }
-        return groups;
-    }
-
-    static String toHRef(String mn) {
-        return String.format("<a href=\"api/%s-summary.html\">%s</a><br>", mn, mn);
     }
 
     void run(BufferedReader reader) throws IOException {
@@ -174,13 +153,95 @@
         if (line.contains(HEADER_TITLE)) {
             line = line.replace(HEADER_TITLE, title);
         }
-        if (line.contains("@")) {
-            for (Map.Entry<String,String> e: moduleGroups.entrySet()) {
-                if (line.contains(e.getKey())) {
-                    line = line.replace(e.getKey(), e.getValue());
-                }
+        int i = line.indexOf('@');
+        int j = line.indexOf('@', i+1);
+        if (i >= 0 && i < j) {
+            String name = line.substring(i, j+1);
+            if (moduleGroups.containsKey(name)) {
+                line = line.replace(name, formatModuleGroup(name));
             }
         }
         return line;
     }
+
+    String toHRef(ModuleDescriptor md) {
+        String mn = md.name();
+        String formattedName;
+        if (hasExportedAPIs(md)) {
+            // has exported APIs
+            formattedName = mn;
+        } else if (!md.provides().isEmpty()) {
+            // a provider
+            formattedName = "<i>" + mn + "</i>";
+        } else {
+            // a tool
+            formattedName = "<i>" + mn + "</i>";
+        }
+        return String.format("<a href=\"api/%s-summary.html\">%s</a>",
+                             mn, formattedName);
+    }
+
+    String formatModuleGroup(String groupName) {
+        StringBuilder sb = new StringBuilder();
+        // organize in Java SE, JDK, JavaFX, JCP groups
+        Set<ModuleDescriptor> modules = moduleGroups.get(groupName);
+        Arrays.stream(ModuleGroup.values())
+            .forEach(g -> {
+                Set<ModuleDescriptor> mods = modules.stream()
+                    .filter(md -> g.predicate.test(md.name()))
+                    .collect(toSet());
+                if (!mods.isEmpty()) {
+                    sb.append("<div class=" + g.cssClass + ">\n");
+                    // modules with exported API
+                    mods.stream()
+                        .filter(this::hasExportedAPIs)
+                        .sorted(Comparator.comparing(ModuleDescriptor::name))
+                        .map(this::toHRef)
+                        .forEach(m -> sb.append(m).append("\n"));
+
+                    // tools and providers
+                    mods.stream()
+                        .filter(md -> !hasExportedAPIs(md))
+                        .sorted(Comparator.comparing(ModuleDescriptor::name))
+                        .map(this::toHRef)
+                        .forEach(m -> sb.append(m).append("\n"));
+                    sb.append("</div>");
+                }
+            });
+        return sb.toString();
+    }
+
+    private boolean hasExportedAPIs(ModuleDescriptor md) {
+        if (md.exports().stream().anyMatch(e -> !e.isQualified())) {
+            return true;
+        }
+        // this should check if any indirect exports
+        // checking requires transitive would be sufficient for JDK modules
+        if (md.requires().stream()
+              .map(ModuleDescriptor.Requires::modifiers)
+              .anyMatch(mods -> mods.contains(ModuleDescriptor.Requires.Modifier.TRANSITIVE))) {
+            return true;
+        }
+        return false;
+    }
+
+    private static final Set<String> NON_JAVA_SE_MODULES =
+        Set.of("java.jnlp", "java.smartcardio");
+
+    /**
+     * CSS class names are defined in docs-bundle-page.html
+     */
+    enum ModuleGroup {
+        JAVA_SE("javase", mn -> mn.startsWith("java.") && !NON_JAVA_SE_MODULES.contains(mn)),
+        JDK("jdk", mn -> mn.startsWith("jdk.")),
+        JAVAFX("javafx", mn -> mn.startsWith("javafx.")),
+        NON_JAVA_SE("jcp", NON_JAVA_SE_MODULES::contains);
+
+        final String cssClass;
+        final Predicate<String> predicate;
+        ModuleGroup(String cssClass, Predicate<String> predicate) {
+            this.cssClass = cssClass;
+            this.predicate = predicate;
+        }
+    }
 }
--- a/jdk/make/src/classes/build/tools/docs/docs-bundle-page.html	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/make/src/classes/build/tools/docs/docs-bundle-page.html	Wed Jul 05 23:33:24 2017 +0200
@@ -26,121 +26,146 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-  <meta http-equiv="content-type" content="text/html;" charset="utf-8">
-  <style type="text/css">
-table {
-  border-collapse: collapse;
+<title>@HEADER_TITLE@</title>
+
+<meta http-equiv="content-type" content="text/html;" charset="utf-8">
+<link rel="stylesheet" href="resources/jdk-default.css" type="text/css" />
+<style type="text/css">
+
+table a { text-decoration: none }
+table { border: none }
+th, td { border: 2px solid white; }
+thead th { background-color: #DDD }
+tbody th { background-color: #EEE }
+
+table div.javase, ul.key span.javase { background-color: #C6E7F3 }
+table div.jdk, ul.key span.jdk { background-color: #ECE1C5 }
+table div.javafx, ul.key span.javafx { background-color: #ECEDCC }
+table div.jcp, ul.key span.jcp { background-color: #E9E9E9 }
+td div { padding: 3px 5px; color: blue }
+table tbody td div a { padding: 0 .5em; margin: 0: 1em; }
+table tbody td div a:link { color: black }
+table tbody td div a:visited { color: black }
+table tbody td div a[href]:hover { color: black; text-decoration: underline }
+td { padding: 0 }
+table tbody td div a { padding: 0 .5em; margin: 0: 1em }
+
+.key { font-size: smaller; }
+ul.key li { display:inline-block; padding: 0 1em }
+ul.key span {
+  border: 1px solid black;
+  font-family: DejaVu Sans Mono, monospace;
 }
-table {
-  border: 1px solid black;
+ul.key span:before { content: " " }
+ul.key span:after { content: " " }
+
+caption {
+  text-align: center;
 }
-th ,td {
-  border: 0px solid black;
+
+tr:nth-child(even), tr:nth-child(even) th[scope=row] {
+  background-color: #EEE;
 }
-thead th {
-  background-color: #DDD;
+tr:nth-child(odd), tr:nth-child(odd) th[scope=row] {
+  background-color: #EEE;
 }
-tbody > tr:nth-child(even) {
-    background-color: #EEE
-}
-tbody > tr:nth-child(odd) {
-    background-color: #FFF
-}
-th, td {
-  font-family: sans-serif; /* could eventually be DejaVu */
-  font-size: small;
-  padding: 5px 10px;
-  vertical-align:top;
-}
-td a {
-  text-decoration: none;
-}
-tr th {
-  text-align:left;
-}
-caption {
-  font-size: smaller;
-  font-weight: bold;
-}
+
 </style>
-<title>@HEADER_TITLE@</title>
 </head>
-<body>
 
 <h1>@HEADER_TITLE@</h1>
 
 <ul>
 <li><a href="api/index.html">JDK API Specification</a></li>
-<li>Java Language Specification</li>
-<li>Java Virtual Machine Specification</li>
+<li><a href="https://docs.oracle.com/javase/specs/">
+    Java Language and Virtual Machine Specifications</a></li>
+<li><a href="https://www.oracle.com/pls/topic/lookup?ctx=javase9&id=tools_reference_overview">
+    Tools Reference</a></li>
 </ul>
 
+
 <table>
-<caption>Modules</caption>
+<caption style="display:none">JDK Modules</caption>
 <thead>
 <tr>
   <th scope="col">Group</th>
-  <th scope="col">Java SE</th>
-  <th scope="col">JDK</th>
-  <th scope="col">JavaFX</th>
+  <th scope="col">Modules</th>
 </tr>
 </thead>
 <tbody>
 <tr>
   <th scope="row">Foundation</th>
-  <td>@CORE_MODULES@</td>
+  <td>@JAVA_BASE@</td>
 </tr>
 <tr>
-<th scope="row">Security</th>
-  <td>@SECURITY_MODULES@</td>
-</tr>
-<tr>
-<th scope="row">Instrumentation and<br>Management</th>
-  <td>@INSTRUMENT_MGMT_MODULES@</td>
-</tr>
-<tr>
-<th scope="row">Integration</th>
+  <th scope="row">Integration</th>
   <td>@INTEGRATION_MODULES@</td>
 </tr>
 <tr>
   <th scope="row">User Interface</th>
-  <td>@UI_TOOLKITS_MODULES@</td>
+  <td>@UI_MODULES@</td>
 </tr>
 <tr>
-  <th scope="row">Compiler and Scripting</th>
-  <td>@COMPILER_SCRIPTING_MODULES@</td>
+  <th scope="row">Compilation</th>
+  <td>@COMPILER_MODULES@</td>
 </tr>
 <tr>
-  <th scope="row">Debugging</th>
-  <td>@DEBUG_MODULES@</td>
+  <th scope="row">Scripting</th>
+  <td>@SCRIPTING_MODULES@</td>
 </tr>
 <tr>
-  <th scope="row">Tools and Tool APIs</th>
-  <td>@TOOL_MODULES@</td>
+  <th scope="row">Security</th>
+  <td>@SECURITY_MODULES@</td>
 </tr>
 <tr>
-  <th scope="row">Incubating Features</th>
+  <th scope="row">Management</th>
+  <td>@MANAGEMENT_MODULES@</td>
+</tr>
+<tr>
+  <th scope="row">Instrumentation</th>
+  <td>@INSTRUMENT_MODULES@</td>
+</tr>
+<tr>
+  <th scope="row">Serviceability</th>
+  <td>@SVC_MODULES@</td>
+</tr>
+<tr>
+  <th scope="row">Packaging</th>
+  <td>@PACKAGING_MODULES@</td>
+</tr>
+<tr>
+  <th scope="row">Incubator</th>
   <td>@INCUBATOR_MODULES@</td>
 </tr>
 <tr>
+  <th scope="row">Non-Java SE</th>
+  <td>@OTHER_MODULES@</td>
+</tr>
+<tr>
   <th scope="row">Java EE</th>
   <td>@JAVA_EE_MODULES@</td>
 </tr>
 <tr>
-  <th scope="row"></th>
-  <th scope="row">Outside Java SE</th>
-  <th scope="row">JDK</th>
-  <th scope="row">JavaFX</th>
-</tr>
-<tr>
-  <th scope="row">Others</th>
-  <td>@OTHER_MODULES@</td>
+  <th scope="row">Aggregator</th>
+  <td>@AGGREGATOR_MODULES@</td>
 </tr>
 </tbody>
 </table>
 
+<p class="key">Key:
+<ul class="key">
+<li><span class="javase">&nbsp;</span>&nbsp; Java SE
+<li><span class="jdk">&nbsp;</span>&nbsp; JDK
+<li><span class="javafx">&nbsp;</span>&nbsp; JavaFX
+<li><span class="jcp">&nbsp;</span>&nbsp; Non-Java SE
+<li><i>italic</i> No Exported API (e.g. a tool or provider)</li>
+</ul>
+
 <p>
-<hr/>
-<a href="legal/cpyr.html">Copyright</a>&copy; 1993, 2017, Oracle and/or its affiliates. All rights reserved.</p>
+<hr>
+<a href="legal/cpyr.html">Copyright</a> &copy 1993, 2017, Oracle and/or its affiliates. All rights reserved.</p>
+
 </body>
 </html>
+	
+	
--- a/jdk/make/src/classes/build/tools/docs/docs-module-groups.properties	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/make/src/classes/build/tools/docs/docs-module-groups.properties	Wed Jul 05 23:33:24 2017 +0200
@@ -1,13 +1,8 @@
 # Module Grouping for the docs bundle page
 #
 
-core_modules=\
-java.base \
-jdk.charsets \
-jdk.localedata \
-jdk.net \
-jdk.sctp \
-jdk.zipfs
+java_base=\
+java.base
 
 java_ee_modules=\
 java.activation \
@@ -17,6 +12,10 @@
 java.xml.ws \
 java.xml.ws.annotation
 
+aggregator_modules=\
+java.se \
+java.se.ee
+
 security_modules=\
 java.security.jgss \
 java.security.sasl \
@@ -26,18 +25,22 @@
 jdk.crypto.cryptoki \
 jdk.crypto.ec \
 jdk.crypto.mscapi \
-jdk.crypto.ucrypto
+jdk.crypto.ucrypto \
+jdk.policytool
 
-instrument_mgmt_modules=\
-java.instrument \
+instrument_modules=\
+java.instrument
+  
+management_modules=\
 java.management \
 java.management.rmi \
-jdk.jfr \
 jdk.management \
 jdk.management.agent \
 jdk.management.cmm \
 jdk.management.jfr \
 jdk.management.resource \
+jdk.snmp \
+jdk.jconsole
 
 integration_modules=\
 java.logging \
@@ -47,11 +50,18 @@
 java.sql \
 java.sql.rowset \
 java.xml \
+jdk.charsets \
+jdk.localedata \
+jdk.net \
+jdk.sctp \
+jdk.jsobject \
 jdk.httpserver \
 jdk.naming.dns \
-jdk.naming.rmi
+jdk.naming.rmi \
+jdk.xml.dom \
+jdk.zipfs
 
-ui_toolkits_modules=\
+ui_modules=\
 java.datatransfer \
 java.desktop \
 javafx.base \
@@ -63,39 +73,40 @@
 javafx.web \
 jdk.accessibility
 
-other_modules=\
-java.jnlp \
-java.smartcardio \
-jdk.jsobject \
-jdk.xml.dom
+svc_modules=\
+jdk.jfr \
+jdk.attach \
+jdk.jcmd \
+jdk.jdi \
+jdk.jdwp.agent \
+jdk.jstatd \
+jdk.hotspot.agent
 
-debug_modules=\
-jdk.jdi \
-jdk.jdwp.agent
+packaging_modules=\
+jdk.jartool \
+jdk.jlink \
+jdk.pack \
+jdk.packager.services
 
-tool_modules=\
-jdk.attach \
+compiler_modules=\
+java.compiler \
+jdk.compiler \
+jdk.javadoc \
+jdk.jdeps \
 jdk.editpad \
-jdk.jartool \
-jdk.javadoc \
-jdk.jcmd \
-jdk.jconsole \
-jdk.jdeps \
-jdk.jlink \
 jdk.jshell \
-jdk.jstatd \
-jdk.pack \
-jdk.policytool \
-jdk.packager.services \
 jdk.rmic
 
-compiler_scripting_modules=\
-java.compiler \
+scripting_modules=\
 java.scripting \
-jdk.compiler \
 jdk.dynalink \
 jdk.scripting.nashorn \
 jdk.scripting.nashorn.shell
 
+other_modules=\
+java.jnlp \
+java.smartcardio
+  
 incubator_modules=\
 jdk.incubator.httpclient
+
--- a/jdk/make/src/classes/build/tools/taglet/ExtLink.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/make/src/classes/build/tools/taglet/ExtLink.java	Wed Jul 05 23:33:24 2017 +0200
@@ -56,7 +56,7 @@
 
     static final String TAG_NAME = "extLink";
 
-    static final String URL = "https://www.oracle.com/pls/topic/lookup?ctx=javase9&id=";
+    static final String URL = "https://www.oracle.com/pls/topic/lookup?ctx=javase9&amp;id=";
 
     static final Pattern TAG_PATTERN = Pattern.compile("(\\s*)(?<name>\\w+)(\\s+)(?<desc>.*)");
 
--- a/jdk/src/java.base/aix/native/libnet/aix_close.c	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/java.base/aix/native/libnet/aix_close.c	Wed Jul 05 23:33:24 2017 +0200
@@ -421,10 +421,8 @@
 }
 
 int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
-       struct sockaddr *from, int *fromlen) {
-    socklen_t socklen = *fromlen;
-    BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, &socklen) );
-    *fromlen = socklen;
+       struct sockaddr *from, socklen_t *fromlen) {
+    BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, fromlen) );
 }
 
 int NET_Send(int s, void *msg, int len, unsigned int flags) {
@@ -440,10 +438,8 @@
     BLOCKING_IO_RETURN_INT( s, sendto(s, msg, len, flags, to, tolen) );
 }
 
-int NET_Accept(int s, struct sockaddr *addr, int *addrlen) {
-    socklen_t socklen = *addrlen;
-    BLOCKING_IO_RETURN_INT( s, accept(s, addr, &socklen) );
-    *addrlen = socklen;
+int NET_Accept(int s, struct sockaddr *addr, socklen_t *addrlen) {
+    BLOCKING_IO_RETURN_INT( s, accept(s, addr, addrlen) );
 }
 
 int NET_Connect(int s, struct sockaddr *addr, int addrlen) {
--- a/jdk/src/java.base/share/classes/java/io/File.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/io/File.java	Wed Jul 05 23:33:24 2017 +0200
@@ -923,6 +923,12 @@
      * java.nio.file.Files#readAttributes(Path,Class,LinkOption[])
      * Files.readAttributes} method may be used.
      *
+     * @apiNote
+     * While the unit of time of the return value is milliseconds,
+     * the granularity of the value depends on the underlying
+     * file system and may be larger.  For example, some
+     * file systems use time stamps in units of seconds.
+     *
      * @return  A <code>long</code> value representing the time the file was
      *          last modified, measured in milliseconds since the epoch
      *          (00:00:00 GMT, January 1, 1970), or <code>0L</code> if the
--- a/jdk/src/java.base/share/classes/javax/crypto/Cipher.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/crypto/Cipher.java	Wed Jul 05 23:33:24 2017 +0200
@@ -137,6 +137,7 @@
  * <li>{@code AES/CBC/PKCS5Padding} (128)</li>
  * <li>{@code AES/ECB/NoPadding} (128)</li>
  * <li>{@code AES/ECB/PKCS5Padding} (128)</li>
+ * <li>{@code AES/GCM/NoPadding} (128)</li>
  * <li>{@code DES/CBC/NoPadding} (56)</li>
  * <li>{@code DES/CBC/PKCS5Padding} (56)</li>
  * <li>{@code DES/ECB/NoPadding} (56)</li>
--- a/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java	Wed Jul 05 23:33:24 2017 +0200
@@ -363,10 +363,6 @@
     static void initHelpMessage(String progname) {
         outBuf = outBuf.append(getLocalizedMessage("java.launcher.opt.header",
                 (progname == null) ? "java" : progname ));
-        outBuf = outBuf.append(getLocalizedMessage("java.launcher.opt.datamodel",
-                32));
-        outBuf = outBuf.append(getLocalizedMessage("java.launcher.opt.datamodel",
-                64));
     }
 
     /**
--- a/jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties	Wed Jul 05 23:33:24 2017 +0200
@@ -34,7 +34,6 @@
 \ <module>/<mainclass> are passed as the arguments to main class.\n\n\
 \ where options include:\n\n
 
-java.launcher.opt.datamodel  =\    -d{0}\t  Deprecated, will be removed in a future release\n
 java.launcher.opt.vmselect   =\    {0}\t  to select the "{1}" VM\n
 java.launcher.opt.hotspot    =\    {0}\t  is a synonym for the "{1}" VM  [deprecated]\n
 
--- a/jdk/src/java.base/share/native/libjli/args.c	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/java.base/share/native/libjli/args.c	Wed Jul 05 23:33:24 2017 +0200
@@ -456,6 +456,11 @@
             env++;
         }
 
+        // Trailing space
+        if (*env == '\0') {
+            break;
+        }
+
         arg = p;
         while (*env != '\0' && !isspace(*env)) {
             if (*env == '"' || *env == '\'') {
--- a/jdk/src/java.base/share/native/libjli/emessages.h	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/java.base/share/native/libjli/emessages.h	Wed Jul 05 23:33:24 2017 +0200
@@ -36,7 +36,7 @@
 #define JNI_ERROR       "Error: A JNI error has occurred, please check your installation and try again"
 #define JNI_ERROR1      "Error: can't find JNI interfaces in: %s"
 
-#define ARG_INFO_ENVVAR "NOTE: Picked up the following options via %s:\n  %s"
+#define ARG_INFO_ENVVAR "NOTE: Picked up %s: %s"
 #define ARG_WARN        "Warning: %s option is no longer supported."
 
 #define ARG_ERROR1      "Error: %s requires class path specification"
--- a/jdk/src/java.base/unix/native/libjava/UnixFileSystem_md.c	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/java.base/unix/native/libjava/UnixFileSystem_md.c	Wed Jul 05 23:33:24 2017 +0200
@@ -229,12 +229,15 @@
     WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
         struct stat64 sb;
         if (stat64(path, &sb) == 0) {
-#ifndef MACOSX
+#if defined(_AIX)
+            rv =  (jlong)sb.st_mtime * 1000;
+            rv += (jlong)sb.st_mtime_n / 1000000;
+#elif defined(MACOSX)
+            rv  = (jlong)sb.st_mtimespec.tv_sec * 1000;
+            rv += (jlong)sb.st_mtimespec.tv_nsec / 1000000;
+#else
             rv  = (jlong)sb.st_mtim.tv_sec * 1000;
             rv += (jlong)sb.st_mtim.tv_nsec / 1000000;
-#else
-            rv  = (jlong)sb.st_mtimespec.tv_sec * 1000;
-            rv += (jlong)sb.st_mtimespec.tv_nsec / 1000000;
 #endif
         }
     } END_PLATFORM_STRING(env, path);
@@ -419,14 +422,16 @@
             struct timeval tv[2];
 
             /* Preserve access time */
-#ifndef MACOSX
+#if defined(_AIX)
+            tv[0].tv_sec = sb.st_atime;
+            tv[0].tv_usec = sb.st_atime_n / 1000;
+#elif defined(MACOSX)
+            tv[0].tv_sec = sb.st_atimespec.tv_sec;
+            tv[0].tv_usec = sb.st_atimespec.tv_nsec / 1000;
+#else
             tv[0].tv_sec = sb.st_atim.tv_sec;
             tv[0].tv_usec = sb.st_atim.tv_nsec / 1000;
-#else
-            tv[0].tv_sec = sb.st_atimespec.tv_sec;
-            tv[0].tv_usec = sb.st_atimespec.tv_nsec / 1000;
 #endif
-
             /* Change last-modified time */
             tv[1].tv_sec = time / 1000;
             tv[1].tv_usec = (time % 1000) * 1000;
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbAsRep.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbAsRep.java	Wed Jul 05 23:33:24 2017 +0200
@@ -160,7 +160,7 @@
         creds = new Credentials(
                                 rep.ticket,
                                 req.reqBody.cname,
-                                rep.ticket.sname,
+                                enc_part.sname,
                                 enc_part.key,
                                 enc_part.flags,
                                 enc_part.authtime,
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbTgsRep.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbTgsRep.java	Wed Jul 05 23:33:24 2017 +0200
@@ -88,7 +88,7 @@
 
         this.creds = new Credentials(rep.ticket,
                                 rep.cname,
-                                rep.ticket.sname,
+                                enc_part.sname,
                                 enc_part.key,
                                 enc_part.flags,
                                 enc_part.authtime,
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncSSLConnection.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncSSLConnection.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -190,11 +190,6 @@
     }
 
     @Override
-    protected int readImpl(ByteBuffer buffer) throws IOException {
-        throw new UnsupportedOperationException("Not supported.");
-    }
-
-    @Override
     CompletableFuture<Void> whenReceivingResponse() {
         throw new UnsupportedOperationException("Not supported.");
     }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Exchange.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Exchange.java	Wed Jul 05 23:33:24 2017 +0200
@@ -33,7 +33,6 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URLPermission;
-import java.nio.ByteBuffer;
 import java.security.AccessControlContext;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
@@ -76,9 +75,6 @@
     boolean upgrading; // to HTTP/2
     final PushGroup<?,T> pushGroup;
 
-    // buffer for receiving response headers
-    private volatile ByteBuffer rxBuffer;
-
     Exchange(HttpRequestImpl request, MultiExchange<?,T> multi) {
         this.request = request;
         this.upgrading = false;
@@ -121,17 +117,6 @@
         return client;
     }
 
-    ByteBuffer getBuffer() {
-        if(rxBuffer == null) {
-            synchronized (this) {
-                if(rxBuffer == null) {
-                    rxBuffer = Utils.getExchangeBuffer();
-                }
-            }
-        }
-        return rxBuffer;
-    }
-
     public Response response() throws IOException, InterruptedException {
         return responseImpl(null);
     }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Exchange.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Exchange.java	Wed Jul 05 23:33:24 2017 +0200
@@ -55,7 +55,7 @@
     final HttpConnection connection;
     final HttpClientImpl client;
     final Executor executor;
-    final ByteBuffer buffer; // used for receiving
+    volatile ByteBuffer buffer; // used for receiving
 
     @Override
     public String toString() {
@@ -74,7 +74,7 @@
         this.client = exchange.client();
         this.executor = exchange.executor();
         this.operations = new LinkedList<>();
-        this.buffer = exchange.getBuffer();
+        this.buffer = Utils.EMPTY_BYTEBUFFER;
         if (connection != null) {
             this.connection = connection;
         } else {
@@ -157,7 +157,9 @@
         try {
             response = new Http1Response<>(connection, this);
             response.readHeaders();
-            return response.response();
+            Response r = response.response();
+            buffer = response.getBuffer();
+            return r;
         } catch (Throwable t) {
             connection.close();
             throw t;
@@ -213,7 +215,9 @@
         return MinimalFuture.supply( () -> {
             response = new Http1Response<>(connection, Http1Exchange.this);
             response.readHeaders();
-            return response.response();
+            Response r = response.response();
+            buffer = response.getBuffer();
+            return r;
         }, executor);
     }
 
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Response.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Response.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -44,7 +44,7 @@
     private final HttpConnection connection;
     private ResponseHeaders headers;
     private int responseCode;
-    private final ByteBuffer buffer; // same buffer used for reading status line and headers
+    private ByteBuffer buffer;
     private final Http1Exchange<T> exchange;
     private final boolean redirecting; // redirecting
     private boolean return2Cache; // return connection to cache when finished
@@ -96,6 +96,10 @@
         return finished;
     }
 
+    ByteBuffer getBuffer() {
+        return buffer;
+    }
+
     int fixupContentLen(int clen) {
         if (request.method().equalsIgnoreCase("HEAD")) {
             return 0;
@@ -194,12 +198,15 @@
     static final char CR = '\r';
     static final char LF = '\n';
 
-    private int getBuffer() throws IOException {
+    private int obtainBuffer() throws IOException {
         int n = buffer.remaining();
 
         if (n == 0) {
-            buffer.clear();
-            return connection.read(buffer);
+            buffer = connection.read();
+            if (buffer == null) {
+                return -1;
+            }
+            n = buffer.remaining();
         }
         return n;
     }
@@ -207,18 +214,17 @@
     String readStatusLine() throws IOException {
         boolean cr = false;
         StringBuilder statusLine = new StringBuilder(128);
-        ByteBuffer b = buffer;
-        while (getBuffer() != -1) {
-            byte[] buf = b.array();
-            int offset = b.position();
-            int len = b.limit() - offset;
+        while ((obtainBuffer()) != -1) {
+            byte[] buf = buffer.array();
+            int offset = buffer.position();
+            int len = buffer.limit() - offset;
 
             for (int i = 0; i < len; i++) {
                 char c = (char) buf[i+offset];
 
                 if (cr) {
                     if (c == LF) {
-                        b.position(i + 1 + offset);
+                        buffer.position(i + 1 + offset);
                         return statusLine.toString();
                     } else {
                         throw new IOException("invalid status line");
@@ -231,7 +237,7 @@
                 }
             }
             // unlikely, but possible, that multiple reads required
-            b.position(b.limit());
+            buffer.position(buffer.limit());
         }
         return null;
     }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpConnection.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpConnection.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -323,12 +323,9 @@
         }
     }
 
-    final int read(ByteBuffer buffer) throws IOException {
-        return readImpl(buffer);
-    }
-
     final ByteBuffer read() throws IOException {
-        return readImpl();
+        ByteBuffer b = readImpl();
+        return b;
     }
 
     /*
@@ -337,9 +334,6 @@
      */
     protected abstract ByteBuffer readImpl() throws IOException;
 
-    /** Reads as much as possible into given buffer and returns amount read. */
-    protected abstract int readImpl(ByteBuffer buffer) throws IOException;
-
     @Override
     public String toString() {
         return "HttpConnection: " + channel().toString();
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainHttpConnection.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainHttpConnection.java	Wed Jul 05 23:33:24 2017 +0200
@@ -311,8 +311,7 @@
         }
     }
 
-    @Override
-    protected int readImpl(ByteBuffer buf) throws IOException {
+    private int readImpl(ByteBuffer buf) throws IOException {
         int mark = buf.position();
         int n;
         // FIXME: this hack works in conjunction with the corresponding change
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainTunnelingConnection.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainTunnelingConnection.java	Wed Jul 05 23:33:24 2017 +0200
@@ -157,11 +157,6 @@
     }
 
     @Override
-    protected int readImpl(ByteBuffer buffer) throws IOException {
-        return delegate.readImpl(buffer);
-    }
-
-    @Override
     boolean isSecure() {
         return false;
     }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ResponseContent.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ResponseContent.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -148,11 +148,7 @@
     // make sure we have at least 1 byte to look at
     private void getHunk() throws IOException {
         if (chunkbuf == null || !chunkbuf.hasRemaining()) {
-            if (chunkbuf == null) {
-                chunkbuf = Utils.getBuffer();
-            }
-            chunkbuf.clear();
-            connection.read(chunkbuf);
+            chunkbuf = connection.read();
         }
     }
 
@@ -256,7 +252,6 @@
 
     private void pushBodyFixed(ByteBuffer b) throws IOException {
         int remaining = contentLength;
-        //lastBufferUsed = b;
         while (b.hasRemaining() && remaining > 0) {
             ByteBuffer buffer = Utils.getBuffer();
             int amount = Math.min(b.remaining(), remaining);
@@ -265,22 +260,14 @@
             buffer.flip();
             dataConsumer.accept(Optional.of(buffer));
         }
-        //client.returnBuffer(b);
         while (remaining > 0) {
-            ByteBuffer buffer = Utils.getBuffer();
-            int xx = connection.read(buffer);
-            if (xx == -1)
+            ByteBuffer buffer = connection.read();
+            if (buffer == null)
                 throw new IOException("connection closed");
 
             int bytesread = buffer.remaining();
             // assume for now that pipelining not implemented
             if (bytesread > remaining) {
-                System.err.println("xx = " + xx);
-                System.err.println("bytesread = " + bytesread);
-                System.err.println("remaining = " + remaining);
-                for (int i=0; i<remaining; i++) {
-                    System.err.printf("%x ", buffer.get());
-                }
                 throw new IOException("too many bytes read");
             }
             remaining -= bytesread;
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ResponseHeaders.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ResponseHeaders.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -72,7 +72,7 @@
 
     static final class InputStreamWrapper extends InputStream {
         final HttpConnection connection;
-        final ByteBuffer buffer;
+        ByteBuffer buffer;
         int lastRead = -1; // last byte read from the buffer
         int consumed = 0; // number of bytes consumed.
         InputStreamWrapper(HttpConnection connection, ByteBuffer buffer) {
@@ -83,9 +83,8 @@
         @Override
         public int read() throws IOException {
             if (!buffer.hasRemaining()) {
-                buffer.clear();
-                int n = connection.read(buffer);
-                if (n == -1) {
+                buffer = connection.read();
+                if (buffer == null) {
                     return lastRead = -1;
                 }
             }
@@ -97,6 +96,16 @@
         }
     }
 
+    private static void display(Map<String, List<String>> map) {
+        map.forEach((k,v) -> {
+            System.out.print (k + ": ");
+            for (String val : v) {
+                System.out.print(val + ", ");
+            }
+            System.out.println("");
+        });
+    }
+
     private Map<String, List<String>> parse(InputStreamWrapper input)
          throws IOException
     {
@@ -114,7 +123,6 @@
             // finds is CR. This only happens if there are no headers, and
             // only one byte will be consumed from the buffer. In this case
             // the next byte MUST be LF
-            //System.err.println("Last character read is: " + (byte)lastRead);
             if (input.read() != LF) {
                 throw new IOException("Unexpected byte sequence when no headers: "
                      + ((int)CR) + " " + input.lastRead
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLConnection.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLConnection.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -162,10 +162,11 @@
 
     @Override
     protected ByteBuffer readImpl() throws IOException {
-        ByteBuffer dst = ByteBuffer.allocate(8192);
-        int n = readImpl(dst);
+        WrapperResult r = sslDelegate.recvData(ByteBuffer.allocate(8192));
+        // TODO: check for closure
+        int n = r.result.bytesProduced();
         if (n > 0) {
-            return dst;
+            return r.buf;
         } else if (n == 0) {
             return Utils.EMPTY_BYTEBUFFER;
         } else {
@@ -174,19 +175,6 @@
     }
 
     @Override
-    protected int readImpl(ByteBuffer buf) throws IOException {
-        // TODO: need to ensure that buf is big enough for application data
-        WrapperResult r = sslDelegate.recvData(buf);
-        // TODO: check for closure
-        String s = "Receive) ";
-        //debugPrint(s, r.buf);
-        if (r.result.bytesProduced() > 0) {
-            assert buf == r.buf;
-        }
-        return r.result.bytesProduced();
-    }
-
-    @Override
     boolean connected() {
         return delegate.connected();
     }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -104,9 +104,7 @@
         }
         SSLEngineResult result;
 
-        /* if passed in buffer was not big enough then the a reallocated buffer
-         * is returned here  */
-        ByteBuffer buf;
+        ByteBuffer buf; // buffer containing result data
     }
 
     int app_buf_size;
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLTunnelConnection.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLTunnelConnection.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -164,19 +164,10 @@
 
     @Override
     protected ByteBuffer readImpl() throws IOException {
-        return sslDelegate.recvData(Utils.EMPTY_BYTEBUFFER).buf; // fix this, make the read normal
-    }
+        ByteBuffer buf = Utils.getBuffer();
 
-    @Override
-    protected int readImpl(ByteBuffer buf) throws IOException {
         WrapperResult r = sslDelegate.recvData(buf);
-        // TODO: check for closure
-        String s = "Receive) ";
-        //debugPrint(s, r.buf);
-        if (r.result.bytesProduced() > 0) {
-            assert buf == r.buf;
-        }
-        return r.result.bytesProduced();
+        return r.buf;
     }
 
     @Override
--- a/jdk/test/ProblemList.txt	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/ProblemList.txt	Wed Jul 05 23:33:24 2017 +0200
@@ -258,8 +258,6 @@
 tools/jimage/JImageListTest.java                                8170120 generic-all
 tools/jimage/JImageVerifyTest.java                              8170120 generic-all
 
-tools/jar/multiRelease/RuntimeTest.java                         8173905 generic-all
-
 tools/schemagen/MultiReleaseJarTest.java                        8174692 generic-all
 tools/wsgen/MultiReleaseJarTest.java                            8174692 generic-all
 
--- a/jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,7 @@
  * @test
  * @bug 7130985
  * @summary Four helper classes missing in Sun JDK
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  * @build jdk.testlibrary.*
  * @modules java.corba
  * @run main CorbaExceptionsCompileTest
@@ -35,12 +35,12 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.rmi.RemoteException;
+
 import org.omg.CORBA.ORBPackage.InvalidName;
 import org.omg.CORBA.TypeCodePackage.BadKind;
 import org.omg.CORBA.TypeCodePackage.Bounds;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import jdk.testlibrary.JDKToolLauncher;
 
 public class CorbaExceptionsCompileTest implements CorbaExceptionsTest {
--- a/jdk/test/com/sun/crypto/provider/CICO/PBEFunc/CipherNCFuncTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/com/sun/crypto/provider/CICO/PBEFunc/CipherNCFuncTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2015, 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
@@ -20,20 +20,22 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+
 /*
  * @test
  * @bug 8048604
- * @library ../ /lib/testlibrary
+ * @library ../ /test/lib
  * @summary This test verifies the assertion "There should be no transformation
- *  on the plaintext/ciphertext in encryption/decryption mechanism" for
- *  feature "NullCipher".
+ *          on the plaintext/ciphertext in encryption/decryption mechanism" for
+ *          feature "NullCipher".
  */
+
 import javax.crypto.BadPaddingException;
 import javax.crypto.Cipher;
 import javax.crypto.IllegalBlockSizeException;
 import javax.crypto.NullCipher;
 import javax.crypto.ShortBufferException;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class CipherNCFuncTest {
     public static void main(String[] args) throws ShortBufferException,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/File/createTempFile/SecurityTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 4138064
+ * @build SecurityTest
+ * @run main/othervm/policy=java.policy SecurityTest
+ */
+
+import java.io.File;
+
+public class SecurityTest {
+
+    public static void main(String[] args) throws Exception {
+        try {
+            File f = File.createTempFile("foo", null);
+        } catch (java.security.AccessControlException x) {
+            throw x;
+        } catch (SecurityException x) {
+            if (x.getMessage().equals("Unable to create temporary file")) {
+                return;
+            }
+            throw x;
+        }
+        throw new Exception("SecurityException not thrown");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/File/createTempFile/java.policy	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,2 @@
+grant {
+};
--- a/jdk/test/java/io/InputStream/ReadAllBytes.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/io/InputStream/ReadAllBytes.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,13 +27,12 @@
 import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /*
  * @test
  * @bug 8080835
- * @library /lib/testlibrary
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main ReadAllBytes
  * @summary Basic test for InputStream.readAllBytes
  * @key randomness
--- a/jdk/test/java/io/InputStream/ReadNBytes.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/io/InputStream/ReadNBytes.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,13 +27,12 @@
 import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /*
  * @test
  * @bug 8080835
- * @library /lib/testlibrary
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main ReadNBytes
  * @summary Basic test for InputStream.readNBytes
  * @key randomness
--- a/jdk/test/java/io/Serializable/evolution/AddedExternField/run.sh	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-#
-# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#
-# @bug 4088176
-# @summary  Test reading an evolved class serialization into the original class
-
-rm *.class tmp.ser
-javac WriteAddedField.java
-java ${TESTVMOPTS} WriteAddedField
-rm *.class
-javac ReadAddedField.java
-java ${TESTVMOPTS} ReadAddedField
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/evolution/RenamePackage/RenamePackageTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4087295 4785472
+ * @library /test/lib
+ * @build jdk.test.lib.compiler.CompilerUtils
+ * @build jdk.test.lib.process.ProcessTools
+ * @build RenamePackageTest
+ * @run main RenamePackageTest
+ * @summary Enable resolveClass() to accommodate package renaming.
+ *          This fix enables one to implement a resolveClass method that maps a
+ *          Serialiazable class within a serialization stream to the same class
+ *          in a different package within the JVM runtime. See run shell script
+ *          for instructions on how to run this test.
+ */
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import jdk.test.lib.compiler.CompilerUtils;
+import jdk.test.lib.process.ProcessTools;
+
+public class RenamePackageTest {
+    public static void main(String args[]) throws Exception {
+        setup();
+
+        runTestSerialDriver();
+        runInstallSerialDriver();
+
+        runInstallSerialDriver();
+        runTestSerialDriver();
+    }
+
+    private static final Path SHARE = Paths.get(System.getProperty("test.classes"), "share");
+    private static final Path OCLASSES = Paths.get(System.getProperty("test.classes"), "oclasses");
+    private static final Path NCLASSES = Paths.get(System.getProperty("test.classes"), "nclasses");
+
+    private static void setup() throws Exception {
+
+        boolean b = CompilerUtils.compile(Paths.get(System.getProperty("test.src"), "extension"),
+                                          SHARE);
+        assertTrue(b);
+        b = CompilerUtils.compile(Paths.get(System.getProperty("test.src"), "test"),
+                                  OCLASSES,
+                                  "-classpath",
+                                  SHARE.toString());
+        assertTrue(b);
+        b = CompilerUtils.compile(Paths.get(System.getProperty("test.src"), "install"),
+                                  NCLASSES,
+                                  "-classpath",
+                                  SHARE.toString());
+        assertTrue(b);
+    }
+
+    private static void runTestSerialDriver() throws Exception {
+        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
+                "-classpath",
+                SHARE.toString()
+                    + File.pathSeparator
+                    + OCLASSES.toString(),
+                "test.SerialDriver", "-s");
+        Process p = ProcessTools.startProcess("test SerialDriver", pb);
+        p.waitFor();
+        assertTrue(p.exitValue() == 0);
+    }
+
+    private static void runInstallSerialDriver() throws Exception {
+        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
+                "-classpath",
+                SHARE.toString()
+                    + File.pathSeparator
+                    + NCLASSES.toString(),
+                "install.SerialDriver", "-d");
+        Process p = ProcessTools.startProcess("install SerialDriver", pb);
+        p.waitFor();
+        assertTrue(p.exitValue() == 0);
+    }
+
+    private static void assertTrue(boolean b) {
+        if (!b) {
+            throw new RuntimeException("expected true, get false");
+        }
+    }
+}
--- a/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-#
-# Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4087295 4785472
-# @summary Enable resolveClass() to accommodate package renaming.
-# This fix enables one to implement a resolveClass method that maps a
-# Serialiazable class within a serialization stream to the same class
-# in a different package within the JVM runtime. See run shell script
-# for instructions on how to run this test.
-
-
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-  COMPILEJAVA="${TESTJAVA}"
-fi
-
-
-OS=`uname -s`
-# Need to determine the classpath separator and filepath separator based on the
-# operating system.
-case "$OS" in
-SunOS | Linux | Darwin | AIX )
-  PS=":"  ;;
-Windows* | CYGWIN* )
-  PS=";"  ;;
-* )
-  echo "Unrecognized system!"
-  exit 1  ;;
-esac
-
-JAVA=${TESTJAVA}/bin/java
-JAVAC=${COMPILEJAVA}/bin/javac
-MKDIR=mkdir
-RDEL="rm -r"
-
-if [ -d ${TESTCLASSES}/oclasses ]
-then
-   ${RDEL} ${TESTCLASSES}/oclasses
-fi
-if [ -d ${TESTCLASSES}/nclasses ]
-then
-   ${RDEL} ${TESTCLASSES}/nclasses
-fi
-if [ -d ${TESTCLASSES}/share ]
-then
-   ${RDEL} ${TESTCLASSES}/share
-fi
-if [ -f ${TESTCLASSES}/stream.ser ]
-then
-   ${RDEL} ${TESTCLASSES}/stream.ser
-fi
-
-mkdir ${TESTCLASSES}/oclasses
-mkdir ${TESTCLASSES}/share
-mkdir ${TESTCLASSES}/nclasses
-
-# Build sources
-set -e
-${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES}/share \
-    ${TESTSRC}/extension/ExtendedObjectInputStream.java
-CLASSPATH=${TESTCLASSES}/share; export CLASSPATH;
-${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES}/oclasses \
-    ${TESTSRC}/test/SerialDriver.java
-CLASSPATH=${TESTCLASSES}/share; export CLASSPATH;
-${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES}/nclasses \
-    ${TESTSRC}/install/SerialDriver.java
-
-# Run Case 1. Map test.SerialDriver within stream to install.SerialDriver.
-CLASSPATH="${TESTCLASSES}/oclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
-${JAVA} ${TESTVMOPTS} test.SerialDriver -s
-CLASSPATH="${TESTCLASSES}/nclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
-${JAVA} ${TESTVMOPTS} install.SerialDriver -d
-rm stream.ser
-
-# Run Case 2. Map install.SerialDriver within stream to test.SerialDriver.
-CLASSPATH="${TESTCLASSES}/nclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
-${JAVA} ${TESTVMOPTS} install.SerialDriver -s
-CLASSPATH="${TESTCLASSES}/oclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
-${JAVA} ${TESTVMOPTS} test.SerialDriver -d
--- a/jdk/test/java/io/Serializable/failureAtomicity/FailureAtomicity.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/io/Serializable/failureAtomicity/FailureAtomicity.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,8 +26,7 @@
  * @bug 8071474
  * @summary Better failure atomicity for default read object.
  * @modules jdk.compiler
- * @library /lib/testlibrary
- * @build jdk.testlibrary.FileUtils
+ * @library /test/lib
  * @compile FailureAtomicity.java SerialRef.java
  * @run main failureAtomicity.FailureAtomicity
  */
@@ -59,7 +58,7 @@
 import javax.tools.StandardJavaFileManager;
 import javax.tools.StandardLocation;
 import javax.tools.ToolProvider;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 @SuppressWarnings("unchecked")
 public class FailureAtomicity {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/maskSyntheticModifier/MaskSyntheticModifierTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4897937
+ * @run main MaskSyntheticModifierTest
+ * @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the
+ *          modifiers of fields and methods does not affect default
+ *          serialVersionUID calculation.
+ */
+
+import java.io.ObjectStreamClass;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+
+public class MaskSyntheticModifierTest {
+    public static void main(String[] args) throws Exception {
+        setup();
+
+        long suid = ObjectStreamClass.lookup(Foo.class).getSerialVersionUID();
+        if (suid != 8027844768744011556L) {
+            throw new Error("incorrect serialVersionUID: " + suid);
+        }
+    }
+
+    private static void setup() throws Exception {
+        Files.copy(Paths.get(System.getProperty("test.src"), "Foo.class"),
+                Paths.get("Foo.class"), StandardCopyOption.REPLACE_EXISTING);
+    }
+}
--- a/jdk/test/java/io/Serializable/maskSyntheticModifier/Test.java	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @bug 4897937
- * @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the
- *          modifiers of fields and methods does not affect default
- *          serialVersionUID calculation.
- */
-
-import java.io.ObjectStreamClass;
-
-public class Test {
-    public static void main(String[] args) {
-        long suid = ObjectStreamClass.lookup(Foo.class).getSerialVersionUID();
-        if (suid != 8027844768744011556L) {
-            throw new Error("incorrect serialVersionUID: " + suid);
-        }
-    }
-}
--- a/jdk/test/java/io/Serializable/maskSyntheticModifier/run.sh	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#
-# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4897937
-# @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the
-#          modifiers of fields and methods does not affect default
-#          serialVersionUID calculation.
-
-if [ "${TESTJAVA}" = "" ]
-then
-    echo "TESTJAVA not set.  Test cannot execute.  Failed."
-exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-    COMPILEJAVA="${TESTJAVA}"
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-    TESTSRC="."
-fi
-
-set -ex
-cp ${TESTSRC}/Foo.class .
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Test.java
-${TESTJAVA}/bin/java ${TESTVMOPTS} Test
-rm -f *.class
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/packageAccess/PackageAccessTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4765255
+ * @library /lib/testlibrary
+ * @build JarUtils A B C D PackageAccessTest
+ * @run main PackageAccessTest
+ * @summary Verify proper functioning of package equality checks used to
+ *          determine accessibility of superclass constructor and inherited
+ *          writeReplace/readResolve methods.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.io.InvalidClassException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class PackageAccessTest {
+
+    static Class bcl;
+    static Class dcl;
+
+    public static void main(String[] args) throws Exception {
+        setup();
+
+        try (URLClassLoader ldr =
+            new URLClassLoader(new URL[]{ new URL("file:foo.jar") },
+                    PackageAccessTest.class.getClassLoader())) {
+            bcl = Class.forName("B", true, ldr);
+            dcl = Class.forName("D", true, ldr);
+
+            Object b = bcl.newInstance();
+            try {
+                swizzle(b);
+                throw new Error("expected InvalidClassException for class B");
+            } catch (InvalidClassException e) {
+                System.out.println("caught " + e);
+                e.printStackTrace();
+            }
+            if (A.packagePrivateConstructorInvoked) {
+                throw new Error("package private constructor of A invoked");
+            }
+
+            Object d = dcl.newInstance();
+            swizzle(d);
+        }
+    }
+
+    static void swizzle(Object obj) throws Exception {
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        ObjectOutputStream oout = new ObjectOutputStream(bout);
+        oout.writeObject(obj);
+        oout.close();
+        ByteArrayInputStream bin =
+            new ByteArrayInputStream(bout.toByteArray());
+        new TestObjectInputStream(bin).readObject();
+    }
+
+    static void setup() throws Exception {
+        Path classes = Paths.get(System.getProperty("test.classes", ""));
+        JarUtils.createJarFile(Paths.get("foo.jar"), classes,
+                classes.resolve("B.class"), classes.resolve("D.class"));
+        Files.delete(classes.resolve("B.class"));
+        Files.delete(classes.resolve("D.class"));
+    }
+}
+
+class TestObjectInputStream extends ObjectInputStream {
+    TestObjectInputStream(InputStream in) throws IOException {
+        super(in);
+    }
+
+    protected Class resolveClass(ObjectStreamClass desc)
+        throws IOException, ClassNotFoundException
+    {
+        String n = desc.getName();
+        if (n.equals("B")) {
+            return PackageAccessTest.bcl;
+        } else if (n.equals("D")) {
+            return PackageAccessTest.dcl;
+        } else {
+            return super.resolveClass(desc);
+        }
+    }
+}
--- a/jdk/test/java/io/Serializable/packageAccess/Test.java	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @bug 4765255
- * @summary Verify proper functioning of package equality checks used to
- *          determine accessibility of superclass constructor and inherited
- *          writeReplace/readResolve methods.
- */
-
-import java.io.*;
-import java.net.*;
-
-public class Test {
-
-    static Class bcl;
-    static Class dcl;
-
-    public static void main(String[] args) throws Exception {
-        ClassLoader ldr =
-            new URLClassLoader(new URL[]{ new URL("file:foo.jar") },
-                               Test.class.getClassLoader());
-        bcl = Class.forName("B", true, ldr);
-        dcl = Class.forName("D", true, ldr);
-
-        Object b = bcl.newInstance();
-        try {
-            swizzle(b);
-            throw new Error("expected InvalidClassException for class B");
-        } catch (InvalidClassException e) {
-            System.out.println("caught " + e);
-            e.printStackTrace();
-        }
-        if (A.packagePrivateConstructorInvoked) {
-            throw new Error("package private constructor of A invoked");
-        }
-
-        Object d = dcl.newInstance();
-        swizzle(d);
-    }
-
-    static void swizzle(Object obj) throws Exception {
-        ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        ObjectOutputStream oout = new ObjectOutputStream(bout);
-        oout.writeObject(obj);
-        oout.close();
-        ByteArrayInputStream bin =
-            new ByteArrayInputStream(bout.toByteArray());
-        new TestObjectInputStream(bin).readObject();
-    }
-}
-
-class TestObjectInputStream extends ObjectInputStream {
-    TestObjectInputStream(InputStream in) throws IOException {
-        super(in);
-    }
-
-    protected Class resolveClass(ObjectStreamClass desc)
-        throws IOException, ClassNotFoundException
-    {
-        String n = desc.getName();
-        if (n.equals("B")) {
-            return Test.bcl;
-        } else if (n.equals("D")) {
-            return Test.dcl;
-        } else {
-            return super.resolveClass(desc);
-        }
-    }
-}
--- a/jdk/test/java/io/Serializable/packageAccess/run.sh	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-#
-# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4765255
-# @summary Verify proper functioning of package equality checks used to
-#          determine accessibility of superclass constructor and inherited
-#          writeReplace/readResolve methods.
-
-if [ "${TESTJAVA}" = "" ]
-then
-    echo "TESTJAVA not set.  Test cannot execute.  Failed."
-exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-    COMPILEJAVA="${TESTJAVA}"
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-    TESTSRC="."
-fi
-
-set -ex
-
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
-    ${TESTSRC}/A.java ${TESTSRC}/B.java ${TESTSRC}/C.java ${TESTSRC}/D.java \
-    ${TESTSRC}/Test.java
-${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf foo.jar B.class D.class
-rm -f B.class D.class
-
-${TESTJAVA}/bin/java ${TESTVMOPTS} Test
-rm -f *.class *.jar
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/resolveClass/consTest/ConsTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,57 @@
+/*
+ * 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4413434
+ * @library /lib/testlibrary
+ * @build JarUtils SetupJar Boot
+ * @run driver SetupJar
+ * @run main/othervm -Xbootclasspath/a:boot.jar ConsTest
+ * @summary Verify that generated java.lang.reflect implementation classes do
+ *          not interfere with serialization's class resolution mechanism.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.reflect.Constructor;
+
+public class ConsTest implements Serializable {
+    public static void main(String[] args) throws Exception {
+        Constructor cons = Boot.class.getConstructor(
+            new Class[] { ObjectInputStream.class });
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        ObjectOutputStream oout = new ObjectOutputStream(bout);
+        oout.writeObject(new ConsTest());
+        oout.close();
+
+        for (int i = 0; i < 100; i++) {
+            ObjectInputStream oin = new ObjectInputStream(
+                new ByteArrayInputStream(bout.toByteArray()));
+            cons.newInstance(new Object[]{ oin });
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/resolveClass/consTest/SetupJar.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class SetupJar {
+
+    public static void main(String args[]) throws Exception {
+        Path classes = Paths.get(System.getProperty("test.classes", ""));
+        JarUtils.createJarFile(Paths.get("boot.jar"), classes,
+                classes.resolve("Boot.class"));
+    }
+}
--- a/jdk/test/java/io/Serializable/resolveClass/consTest/Test.java	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @bug 4413434
- * @summary Verify that generated java.lang.reflect implementation classes do
- *          not interfere with serialization's class resolution mechanism.
- */
-
-import java.io.*;
-import java.lang.reflect.*;
-
-public class Test implements Serializable {
-    public static void main(String[] args) throws Exception {
-        Constructor cons = Boot.class.getConstructor(
-            new Class[] { ObjectInputStream.class });
-        ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        ObjectOutputStream oout = new ObjectOutputStream(bout);
-        oout.writeObject(new Test());
-        oout.close();
-
-        for (int i = 0; i < 100; i++) {
-            ObjectInputStream oin = new ObjectInputStream(
-                new ByteArrayInputStream(bout.toByteArray()));
-            cons.newInstance(new Object[]{ oin });
-        }
-    }
-}
--- a/jdk/test/java/io/Serializable/resolveClass/consTest/run.sh	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-#
-# Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4413434
-# @summary Verify that generated java.lang.reflect implementation classes do
-#          not interfere with serialization's class resolution mechanism.
-
-if [ "${TESTJAVA}" = "" ]
-then
-    echo "TESTJAVA not set.  Test cannot execute.  Failed."
-exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-    COMPILEJAVA="${TESTJAVA}"
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-    TESTSRC="."
-fi
-
-set -ex
-
-rm -f *.class *.jar
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Boot.java
-${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf boot.jar *.class
-rm -f *.class
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -classpath boot.jar -d . \
-    ${TESTSRC}/Test.java
-${TESTJAVA}/bin/java ${TESTVMOPTS} -Xbootclasspath/a:boot.jar Test
-rm -f *.class *.jar
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/resolveClass/deserializeButton/DeserializeButtonTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,59 @@
+/*
+ * 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4413434
+ * @library /lib/testlibrary
+ * @build JarUtils Foo
+ * @run main DeserializeButtonTest
+ * @summary Verify that class loaded outside of application class loader is
+ *          correctly resolved during deserialization when read in by custom
+ *          readObject() method of a bootstrap class (in this case,
+ *          java.util.Vector).
+ */
+
+import java.net.URLClassLoader;
+import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class DeserializeButtonTest {
+    public static void main(String[] args) throws Exception {
+        setup();
+
+        try (URLClassLoader ldr =
+            new URLClassLoader(new URL[]{ new URL("file:cb.jar") })) {
+            Runnable r = (Runnable) Class.forName("Foo", true, ldr).newInstance();
+            r.run();
+        }
+    }
+
+    private static void setup() throws Exception {
+        Path classes = Paths.get(System.getProperty("test.classes", ""));
+        JarUtils.createJarFile(Paths.get("cb.jar"),
+                               classes,
+                               classes.resolve("Foo.class"),
+                               classes.resolve("Foo$TestElement.class"));
+    }
+}
--- a/jdk/test/java/io/Serializable/resolveClass/deserializeButton/Test.java	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @bug 4413434
- * @summary Verify that class loaded outside of application class loader is
- *          correctly resolved during deserialization when read in by custom
- *          readObject() method of a bootstrap class (in this case,
- *          java.util.Vector).
- */
-
-import java.io.*;
-import java.net.*;
-
-public class Test {
-    public static void main(String[] args) throws Exception {
-        ClassLoader ldr =
-            new URLClassLoader(new URL[]{ new URL("file:cb.jar") });
-        Runnable r = (Runnable) Class.forName("Foo", true, ldr).newInstance();
-        r.run();
-    }
-}
--- a/jdk/test/java/io/Serializable/resolveClass/deserializeButton/run.sh	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-#
-# Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4413434
-# @summary Verify that class loaded outside of application class loader is
-#          correctly resolved during deserialization when read in by custom
-#          readObject() method of a bootstrap class (in this case,
-#          java.util.Vector).
-
-if [ "${TESTJAVA}" = "" ]
-then
-    echo "TESTJAVA not set.  Test cannot execute.  Failed."
-exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-    COMPILEJAVA="${TESTJAVA}"
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-    TESTSRC="."
-fi
-
-set -ex
-
-rm -f *.class *.jar
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Foo.java
-${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf cb.jar *.class
-rm -f *.class
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Test.java
-${TESTJAVA}/bin/java ${TESTVMOPTS} Test
-rm -f *.class *.jar
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/serialver/classpath/ClasspathTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,59 @@
+/*
+ * 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4035147 4785472
+ * @library /test/lib
+ * @build jdk.test.lib.JDKToolLauncher
+ * @build jdk.test.lib.process.ProcessTools
+ * @build ClasspathTest
+ * @run main serialver.ClasspathTest
+ * @summary Test the use of the -classpath switch in the serialver application.
+ */
+
+package serialver;
+
+import java.io.File;
+
+import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.process.ProcessTools;
+
+public class ClasspathTest implements java.io.Serializable {
+    int a;
+    int b;
+
+    public static void main(String args[]) throws Exception {
+        JDKToolLauncher serialver =
+                JDKToolLauncher.create("serialver")
+                               .addToolArg("-classpath")
+                               .addToolArg(System.getProperty("test.class.path"))
+                               .addToolArg("serialver.ClasspathTest");
+        Process p = ProcessTools.startProcess("serialver",
+                        new ProcessBuilder(serialver.getCommand()));
+        p.waitFor();
+        if (p.exitValue() != 0) {
+            throw new RuntimeException("error occurs in serialver");
+        }
+    }
+}
--- a/jdk/test/java/io/Serializable/serialver/classpath/Test.java	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- *
- *  @bug 4035147
- *  @sumary     Simple java class for test purposes
- */
-
-package serialver;
-
-public class Test implements java.io.Serializable{
-    int a;
-    int b;
-}
--- a/jdk/test/java/io/Serializable/serialver/classpath/run.sh	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-#
-# Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4035147 4785472
-# @summary Test the use of the -classpath switch in the serialver application.
-# @author Naveen Sanjeeva
-#
-# @build Test
-# @run shell run.sh
-
-# set a few environment variables so that the shell-script can run stand-alone
-# in the source directory
-
-if [ "${TESTSRC}" = "" ] ; then
-  TESTSRC="."
-fi
-if [ "${TESTCLASSES}" = "" ] ; then
-  TESTCLASSES="."
-fi
-if [ "${TESTJAVA}" = "" ] ; then
-  echo "TESTJAVA not set.  Test cannot execute."
-  echo "FAILED!!!"
-  exit 1
-fi
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux | Darwin | AIX )
-    PS=":"    ;;
-  Windows* | CYGWIN* )
-    PS=";"    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1    ;;
-esac
-
-# the test code
-
-echo "Using the classpath .${PS}${TESTCLASSES}"
-${TESTJAVA}/bin/serialver -classpath ".${PS}${TESTCLASSES}" serialver.Test
-
-exit $?
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/serialver/nested/NestedTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,63 @@
+/*
+ * 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4312217 4785473
+ * @library /test/lib
+ * @build jdk.test.lib.JDKToolLauncher
+ * @build jdk.test.lib.process.ProcessTools
+ * @build NestedTest
+ * @run main serialver.NestedTest
+ * @summary  To test the use of nested class specification using the '.'
+ *           notation instead of the '$' notation.
+ */
+
+package serialver;
+
+import java.io.Serializable;
+
+import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.process.ProcessTools;
+
+public class NestedTest implements Serializable {
+    public static class Test1 implements Serializable {
+        public static class Test2 implements Serializable{
+            private static final long serialVersionUID = 100L;
+        }
+    }
+
+    public static void main(String args[]) throws Exception {
+        JDKToolLauncher serialver =
+                JDKToolLauncher.create("serialver")
+                               .addToolArg("-classpath")
+                               .addToolArg(System.getProperty("test.class.path"))
+                               .addToolArg("serialver.NestedTest.Test1.Test2");
+        Process p = ProcessTools.startProcess("serialver",
+                        new ProcessBuilder(serialver.getCommand()));
+        p.waitFor();
+        if (p.exitValue() != 0) {
+            throw new RuntimeException("error occurs in serialver.");
+        }
+    }
+}
--- a/jdk/test/java/io/Serializable/serialver/nested/Test.java	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- *
- * @bug 4312217
- * @summary  To test the use of nested class specification using the '.'
- *           notation instead of the '$' notation.
- */
-package serialver;
-
-import java.io.*;
-
-public class Test implements Serializable {
-    public static class Test1 implements Serializable {
-        public static class Test2 implements Serializable{
-            private static final long serialVersionUID = 100L;
-        }
-    }
-}
--- a/jdk/test/java/io/Serializable/serialver/nested/run.sh	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-#
-# Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4312217 4785473
-# @summary Test the use of the -classpath switch in the serialver application.
-# @author Naveen Sanjeeva
-#
-# @build Test
-# @run shell run.sh
-
-# set a few environment variables so that the shell-script can run stand-alone
-# in the source directory
-
-if [ "${TESTSRC}" = "" ] ; then
-  TESTSRC="."
-fi
-if [ "${TESTCLASSES}" = "" ] ; then
-  TESTCLASSES="."
-fi
-if [ "${TESTJAVA}" = "" ] ; then
-  echo "TESTJAVA not set.  Test cannot execute."
-  echo "FAILED!!!"
-  exit 1
-fi
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux | Darwin | AIX )
-    PS=":"    ;;
-  Windows* | CYGWIN* )
-    PS=";"    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1    ;;
-esac
-
-# the test code
-
-echo "Using the classpath .${PS}${TESTCLASSES}"
-${TESTJAVA}/bin/serialver -classpath ".${PS}${TESTCLASSES}" 'serialver.Test.Test1.Test2'
-
-exit $?
--- a/jdk/test/java/io/Serializable/subclass/Allow.policy	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/io/Serializable/subclass/Allow.policy	Wed Jul 05 23:33:24 2017 +0200
@@ -2,7 +2,6 @@
 	// "standard" properies that can be read by anyone
 	permission java.io.FilePermission "-","read,write,execute";
 	permission java.io.SerializablePermission "enableSubstitution";
-	permission java.io.SerializablePermission "enableSubclassImplementation";
 
 	// Needed to get access to private writeObjectMethod and
         // to be able to call it.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/subclass/SubclassTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,162 @@
+/*
+ * 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4100915
+ * @summary Verify that [write/read]ObjectOverride methods get called.
+ *          Test verifies that ALL methods to write an object can
+ *          be overridden. However, the testing for reading an object
+ *          is incomplete. Only test that readObjectOverride is called.
+ *          An entire protocol would need to be implemented and written
+ *          out before being able to test the input side of the API.
+ *
+ *          Also, would be appropriate that this program verify
+ *          that if SerializablePermission "enableSubclassImplementation"
+ *          is not in the security policy and security is enabled, that
+ *          a security exception is thrown when constructing the
+ *          ObjectOutputStream subclass.
+ *
+ *
+ * @compile AbstractObjectInputStream.java AbstractObjectOutputStream.java
+ * @compile XObjectInputStream.java XObjectOutputStream.java
+ * @compile SubclassTest.java
+ * @run main SubclassTest
+ * @run main/othervm/policy=Allow.policy SubclassTest -expectSecurityException
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
+import java.io.Serializable;
+
+/**
+ * Test if customized readObject and writeObject are called.
+ */
+class B implements Serializable {
+    public int publicIntField;
+    public static int numWriteObjectCalled = 0;
+    B(int v) {
+        publicIntField = v;
+    }
+    private void writeObject(ObjectOutputStream os) throws IOException {
+        numWriteObjectCalled++;
+        os.defaultWriteObject();
+    }
+
+    private void readObject(ObjectInputStream is)
+        throws IOException, ClassNotFoundException
+    {
+        is.defaultReadObject();
+    }
+
+};
+
+/**
+ * Test PutFields interface.
+ */
+
+class C implements Serializable {
+    public int xx1;
+    public int xx2;
+    static final ObjectStreamField[] serialPersistentFields = {
+        new ObjectStreamField("x1", Integer.TYPE),
+        new ObjectStreamField("x2", Integer.TYPE),
+        new ObjectStreamField("x3", Integer.TYPE),
+        new ObjectStreamField("x4", Integer.TYPE)
+    };
+    C() {
+        xx1 = 300;
+        xx2 = 400;
+    }
+
+    private void writeObject(ObjectOutputStream os) throws IOException {
+        ObjectOutputStream.PutField putFields = os.putFields();
+        putFields.put("x1", xx1);
+        putFields.put("x2", xx2);
+        putFields.put("x3", xx1 * 2);
+        putFields.put("x4", xx2 * 2);
+        os.writeFields();
+    }
+
+};
+
+
+class A implements Serializable {
+    public int  publicIntField;
+    public long publicLongField;
+    public B    publicBField;
+    public B[]  publicBArray = { new B(4), new B(6)};
+    public C    publicCField;
+
+    public A() {
+        publicIntField = 3;
+        publicLongField = 10L;
+        publicBField = new B(5);
+        publicCField = new C();
+    }
+};
+
+public class SubclassTest {
+    public static void main(String argv[])
+        throws IOException, ClassNotFoundException
+    {
+        boolean expectSecurityException = false;
+
+        if (argv.length > 0 &&
+            argv[0].compareTo("-expectSecurityException") == 0)
+            expectSecurityException = true;
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream(20);
+        XObjectOutputStream os = null;
+        try {
+            os = new XObjectOutputStream(baos);
+            if (expectSecurityException)
+                throw new Error("Assertion failure. " +
+                                "Expected a security exception on previous line.");
+        } catch (SecurityException e) {
+            if (expectSecurityException) {
+                System.err.println("Caught expected security exception.");
+                return;
+            }
+            throw e;
+        }
+        os.writeObject(new A());
+        os.close();
+        if (B.numWriteObjectCalled != 3)
+            throw new Error("Expected B.writeObject() to be called 3 times;" +
+                            " observed only " + B.numWriteObjectCalled + " times");
+
+        XObjectInputStream is =
+            new XObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
+        try {
+            A a = (A)is.readObject();
+            throw new Error("Expected readObjectOverride() to be called and throw IOException(not implemented)");
+        } catch (IOException e) {
+        }
+        is.close();
+    }
+};
--- a/jdk/test/java/io/Serializable/subclass/Test.java	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4100915
- * @summary Verify that [write/read]ObjectOverride methods get called.
- *          Test verifies that ALL methods to write an object can
- *          be overridden. Howver, the testing for reading an object
- *          is incomplete. Only test that readObjectOverride is called.
- *          An entire protocol would need to be implemented and written
- *          out before being able to test the input side of the API.
- *
- *          Also, would be appropriate that this program verify
- *          that if SerializablePermission "enableSubclassImplamentation"
- *          is not in the security policy and security is enabled, that
- *          a security excepiton is thrown when constructing the
- *          ObjectOutputStream subclass.
- *
- *
- * @compile AbstractObjectInputStream.java AbstractObjectOutputStream.java XObjectInputStream.java XObjectOutputStream.java Test.java
- * @run main  Test
- */
-
-import java.io.*;
-
-/**
- * Test if customized readObject and writeObject are called.
- */
-class B implements Serializable {
-    public int publicIntField;
-    public static int numWriteObjectCalled = 0;
-    B(int v) {
-        publicIntField = v;
-    }
-    private void writeObject(ObjectOutputStream os) throws IOException {
-        numWriteObjectCalled++;
-        os.defaultWriteObject();
-    }
-
-    private void readObject(ObjectInputStream is)
-        throws IOException, ClassNotFoundException
-    {
-        is.defaultReadObject();
-    }
-
-};
-
-/**
- * Test PutFields interface.
- */
-
-class C implements Serializable {
-    public int xx1;
-    public int xx2;
-    static final ObjectStreamField[] serialPersistentFields = {
-        new ObjectStreamField("x1", Integer.TYPE),
-        new ObjectStreamField("x2", Integer.TYPE),
-        new ObjectStreamField("x3", Integer.TYPE),
-        new ObjectStreamField("x4", Integer.TYPE)
-    };
-    C() {
-        xx1 = 300;
-        xx2 = 400;
-    }
-
-    private void writeObject(ObjectOutputStream os) throws IOException {
-        ObjectOutputStream.PutField putFields = os.putFields();
-        putFields.put("x1", xx1);
-        putFields.put("x2", xx2);
-        putFields.put("x3", xx1 * 2);
-        putFields.put("x4", xx2 * 2);
-        os.writeFields();
-    }
-
-};
-
-
-class A implements Serializable {
-    public int  publicIntField;
-    public long publicLongField;
-    public B    publicBField;
-    public B[]  publicBArray = { new B(4), new B(6)};
-    public C    publicCField;
-
-    public A() {
-        publicIntField = 3;
-        publicLongField = 10L;
-        publicBField = new B(5);
-        publicCField = new C();
-    }
-};
-
-public class Test {
-    public static void main(String argv[])
-        throws IOException, ClassNotFoundException
-    {
-        boolean expectSecurityException = false;
-
-        if (argv.length > 0 &&
-            argv[0].compareTo("-expectSecurityException") == 0)
-            expectSecurityException = true;
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream(20);
-        XObjectOutputStream os = null;
-        try {
-            os = new XObjectOutputStream(baos);
-            if (expectSecurityException)
-                throw new Error("Assertion failure. " +
-                                "Expected a security exception on previous line.");
-        } catch (SecurityException e) {
-            if (expectSecurityException)
-                return;
-            else
-                throw e;
-        }
-        os.writeObject(new A());
-        os.close();
-        if (B.numWriteObjectCalled != 3)
-            throw new Error("Expected B.writeObject() to be called 3 times;" +
-                            " observed only " + B.numWriteObjectCalled + " times");
-
-        XObjectInputStream is =
-            new XObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
-        try {
-            A a = (A)is.readObject();
-            throw new Error("Expected readObjectOverride() to be called and throw IOException(not implemented)");
-        } catch (IOException e) {
-        }
-        is.close();
-    }
-};
--- a/jdk/test/java/io/Serializable/subclass/run.sh	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-#
-# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#
-# @bug 4100915
-mkdir classes
-javac -d classes *.java
-java ${TESTVMOPTS} -classpath classes -Djava.policy=Allow.policy Test 
-# ENABLE next line when new method for invoking a main with a SecureClassLoader is known
-#java -classpath classes -Djava.policy=NotAllow.policy Test -expectSecurityException
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/superclassDataLoss/SuperclassDataLossTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,121 @@
+/*
+ * 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4325590
+ * @library /lib/testlibrary
+ * @build JarUtils A B
+ * @run main SuperclassDataLossTest
+ * @summary Verify that superclass data is not lost when incoming superclass
+ *          descriptor is matched with local class that is not a superclass of
+ *          the deserialized instance's class.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.net.MalformedURLException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+
+class MixedSuperclassStream extends ObjectInputStream {
+    private boolean ldr12A;
+    private URLClassLoader ldr1;
+    private URLClassLoader ldr2;
+
+    MixedSuperclassStream(InputStream in, URLClassLoader ldr1,
+            URLClassLoader ldr2, boolean ldr1First) throws IOException {
+        super(in);
+        this.ldr1 = ldr1;
+        this.ldr2 = ldr2;
+        this.ldr12A = ldr12A;
+    }
+
+    protected Class resolveClass(ObjectStreamClass desc)
+        throws IOException, ClassNotFoundException
+    {
+        // resolve A's classdesc to class != B's superclass
+        String name = desc.getName();
+        if (ldr12A) {
+            if (name.equals("A")) {
+                return Class.forName(name, true, ldr1);
+            } else if (name.equals("B")) {
+                return Class.forName(name, true, ldr2);
+            }
+        } else {
+            if (name.equals("B")) {
+                return Class.forName(name, true, ldr1);
+            } else if (name.equals("A")) {
+                return Class.forName(name, true, ldr2);
+            }
+        }
+        return super.resolveClass(desc);
+    }
+}
+
+public class SuperclassDataLossTest {
+
+    public static void main(String[] args) throws Exception {
+        try (URLClassLoader ldr1 = new URLClassLoader(new URL[] { new URL("file:cb1.jar") });
+             URLClassLoader ldr2 = new URLClassLoader(new URL[] { new URL("file:cb2.jar") })) {
+            setup();
+
+            Runnable a = (Runnable) Class.forName("B", true, ldr1).newInstance();
+            a.run();
+
+            ByteArrayOutputStream bout = new ByteArrayOutputStream();
+            ObjectOutputStream oout = new ObjectOutputStream(bout);
+            oout.writeObject(a);
+            oout.close();
+
+            test(bout, ldr1, ldr2, true);
+            test(bout, ldr1, ldr2, false);
+        }
+    }
+
+    private static void test(ByteArrayOutputStream bout, URLClassLoader ldr1,
+                             URLClassLoader ldr2, boolean ldr12A) throws Exception {
+        ByteArrayInputStream bin =
+            new ByteArrayInputStream(bout.toByteArray());
+        ObjectInputStream oin = new MixedSuperclassStream(bin, ldr1, ldr2, ldr12A);
+        Runnable a = (Runnable) oin.readObject();
+        a.run();
+    }
+
+    private static void setup() throws Exception {
+        Path classes = Paths.get(System.getProperty("test.classes", ""));
+        JarUtils.createJarFile(Paths.get("cb1.jar"), classes,
+                classes.resolve("A.class"), classes.resolve("B.class"));
+        Files.copy(Paths.get("cb1.jar"), Paths.get("cb2.jar"),
+                   StandardCopyOption.REPLACE_EXISTING);
+    }
+}
--- a/jdk/test/java/io/Serializable/superclassDataLoss/Test.java	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @bug 4325590
- * @summary Verify that superclass data is not lost when incoming superclass
- *          descriptor is matched with local class that is not a superclass of
- *          the deserialized instance's class.
- */
-
-import java.io.*;
-import java.net.*;
-
-class MixedSuperclassStream extends ObjectInputStream {
-    MixedSuperclassStream(InputStream in) throws IOException { super(in); }
-
-    protected Class resolveClass(ObjectStreamClass desc)
-        throws IOException, ClassNotFoundException
-    {
-        // resolve A's classdesc to class != B's superclass
-        String name = desc.getName();
-        if (name.equals("A")) {
-            return Class.forName(name, true, Test.ldr1);
-        } else if (name.equals("B")) {
-            return Class.forName(name, true, Test.ldr2);
-        } else {
-            return super.resolveClass(desc);
-        }
-    }
-}
-
-public class Test {
-
-    static URLClassLoader ldr1, ldr2;
-    static {
-        try {
-            ldr1 = new URLClassLoader(new URL[] { new URL("file:cb1.jar") });
-            ldr2 = new URLClassLoader(new URL[] { new URL("file:cb2.jar") });
-        } catch (MalformedURLException ex) {
-            throw new Error();
-        }
-    }
-
-    public static void main(String[] args) throws Exception {
-        Runnable a = (Runnable) Class.forName("B", true, ldr1).newInstance();
-        a.run();
-
-        ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        ObjectOutputStream oout = new ObjectOutputStream(bout);
-        oout.writeObject(a);
-        oout.close();
-
-        ByteArrayInputStream bin =
-            new ByteArrayInputStream(bout.toByteArray());
-        ObjectInputStream oin = new MixedSuperclassStream(bin);
-        a = (Runnable) oin.readObject();
-        a.run();
-    }
-}
--- a/jdk/test/java/io/Serializable/superclassDataLoss/run.sh	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-#
-# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4325590
-# @summary Verify that superclass data is not lost when incoming superclass
-#          descriptor is matched with local class that is not a superclass of
-#          the deserialized instance's class.
-
-if [ "${TESTJAVA}" = "" ]
-then
-    echo "TESTJAVA not set.  Test cannot execute.  Failed."
-exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-    COMPILEJAVA="${TESTJAVA}"
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-    TESTSRC="."
-fi
-
-set -ex
-
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
-    ${TESTSRC}/A.java ${TESTSRC}/B.java
-${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf cb1.jar A.class B.class
-cp cb1.jar cb2.jar
-rm -f A.class B.class
-
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
-    ${TESTSRC}/Test.java
-${TESTJAVA}/bin/java ${TESTVMOPTS} Test
-rm -f *.class *.jar
--- a/jdk/test/java/io/Serializable/unnamedPackageSwitch/Test.java	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @bug 4348213
- * @summary Verify that deserialization allows an incoming class descriptor
- *          representing a class in the unnamed package to be resolved to a
- *          local class with the same name in a named package, and vice-versa.
- */
-
-import java.io.*;
-
-class A implements Serializable {
-    private static final long serialVersionUID = 0L;
-}
-
-class TestObjectInputStream extends ObjectInputStream {
-    TestObjectInputStream(InputStream in) throws IOException { super(in); }
-    protected Class resolveClass(ObjectStreamClass desc)
-        throws IOException, ClassNotFoundException
-    {
-        String name = desc.getName();
-        if (name.equals("A")) {
-            return pkg.A.class;
-        } else if (name.equals("pkg.A")) {
-            return A.class;
-        } else {
-            return super.resolveClass(desc);
-        }
-    }
-}
-
-public class Test {
-    public static void main(String[] args) throws Exception {
-        ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        ObjectOutputStream oout = new ObjectOutputStream(bout);
-        oout.writeObject(new A());
-        oout.writeObject(new pkg.A());
-        oout.close();
-
-        ObjectInputStream oin = new TestObjectInputStream(
-            new ByteArrayInputStream(bout.toByteArray()));
-        oin.readObject();
-        oin.readObject();
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/unnamedPackageSwitch/UnnamedPackageSwitchTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,76 @@
+/*
+ * 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4348213
+ * @build UnnamedPackageSwitchTest pkg.A
+ * @run main UnnamedPackageSwitchTest
+ * @summary Verify that deserialization allows an incoming class descriptor
+ *          representing a class in the unnamed package to be resolved to a
+ *          local class with the same name in a named package, and vice-versa.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectStreamClass;
+import java.io.Serializable;
+
+class A implements Serializable {
+    private static final long serialVersionUID = 0L;
+}
+
+class TestObjectInputStream extends ObjectInputStream {
+    TestObjectInputStream(InputStream in) throws IOException { super(in); }
+    protected Class resolveClass(ObjectStreamClass desc)
+        throws IOException, ClassNotFoundException
+    {
+        String name = desc.getName();
+        if (name.equals("A")) {
+            return pkg.A.class;
+        } else if (name.equals("pkg.A")) {
+            return A.class;
+        } else {
+            return super.resolveClass(desc);
+        }
+    }
+}
+
+public class UnnamedPackageSwitchTest {
+    public static void main(String[] args) throws Exception {
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        ObjectOutputStream oout = new ObjectOutputStream(bout);
+        oout.writeObject(new A());
+        oout.writeObject(new pkg.A());
+        oout.close();
+
+        ObjectInputStream oin = new TestObjectInputStream(
+            new ByteArrayInputStream(bout.toByteArray()));
+        oin.readObject();
+        oin.readObject();
+    }
+}
--- a/jdk/test/java/io/Serializable/unnamedPackageSwitch/run.sh	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#
-# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4348213
-# @summary Verify that deserialization allows an incoming class descriptor
-#          representing a class in the unnamed package to be resolved to a
-#          local class with the same name in a named package, and vice-versa.
-
-if [ "${TESTJAVA}" = "" ]
-then
-    echo "TESTJAVA not set.  Test cannot execute.  Failed."
-exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-    COMPILEJAVA="${TESTJAVA}"
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-    TESTSRC="."
-fi
-
-set -ex
-
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
-    ${TESTSRC}/A.java ${TESTSRC}/Test.java
-${TESTJAVA}/bin/java ${TESTVMOPTS} Test
--- a/jdk/test/java/lang/Class/forName/modules/TestDriver.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/Class/forName/modules/TestDriver.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,7 @@
 import java.util.Arrays;
 import java.util.stream.Stream;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import static jdk.testlibrary.ProcessTools.*;
 
 import org.testng.annotations.BeforeClass;
@@ -40,9 +40,9 @@
  * @test
  * @bug 8087335
  * @summary Tests for Class.forName(Module,String)
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler
- * @build TestDriver CompilerUtils jdk.testlibrary.ProcessTools jdk.testlibrary.FileUtils TestMain TestLayer
+ * @build TestDriver CompilerUtils jdk.testlibrary.ProcessTools TestMain TestLayer
  * @run testng TestDriver
  */
 
--- a/jdk/test/java/lang/ClassLoader/Assert.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/ClassLoader/Assert.java	Wed Jul 05 23:33:24 2017 +0200
@@ -28,7 +28,7 @@
  * @run main/othervm Assert
  * @summary Test the assertion facility
  * @author Mike McCloskey
- * @key randomness intermittent
+ * @key randomness
  */
 
 import package1.*;
--- a/jdk/test/java/lang/Double/ParseHexFloatingPoint.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/Double/ParseHexFloatingPoint.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main ParseHexFloatingPoint
  * @bug 4826774 8078672
  * @summary Numerical tests for hexadecimal inputs to parse{Double, Float} (use -Dseed=X to set PRNG seed)
@@ -32,7 +31,7 @@
  * @key randomness
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class ParseHexFloatingPoint {
     private ParseHexFloatingPoint(){}
--- a/jdk/test/java/lang/Integer/BitTwiddle.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/Integer/BitTwiddle.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main BitTwiddle
  * @bug     4495754 8078672
  * @summary Basic test for int bit twiddling (use -Dseed=X to set PRNG seed)
@@ -33,7 +32,7 @@
  */
 
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 import static java.lang.Integer.*;
 
 public class BitTwiddle {
--- a/jdk/test/java/lang/Long/BitTwiddle.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/Long/BitTwiddle.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main BitTwiddle
  * @bug     4495754 8078672
  * @summary Basic test for long bit twiddling (use -Dseed=X to set PRNG seed)
@@ -33,7 +32,7 @@
  */
 
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 import static java.lang.Long.*;
 
 public class BitTwiddle {
--- a/jdk/test/java/lang/Math/CubeRootTests.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/Math/CubeRootTests.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @run main CubeRootTests
  * @bug 4347132 4939441 8078672
  * @summary Tests for {Math, StrictMath}.cbrt (use -Dseed=X to set PRNG seed)
@@ -32,7 +31,7 @@
  * @key randomness
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class CubeRootTests {
     private CubeRootTests(){}
--- a/jdk/test/java/lang/Math/HypotTests.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/Math/HypotTests.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @run main HypotTests
  * @bug 4851638 4939441 8078672
  * @summary Tests for {Math, StrictMath}.hypot (use -Dseed=X to set PRNG seed)
@@ -32,7 +31,7 @@
  * @key randomness
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class HypotTests {
     private HypotTests(){}
--- a/jdk/test/java/lang/Math/IeeeRecommendedTests.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/Math/IeeeRecommendedTests.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @run main IeeeRecommendedTests
  * @bug 4860891 4826732 4780454 4939441 4826652 8078672
  * @summary Tests for IEEE 754[R] recommended functions and similar methods (use -Dseed=X to set PRNG seed)
@@ -32,7 +31,7 @@
  * @key randomness
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class IeeeRecommendedTests {
     private IeeeRecommendedTests(){}
--- a/jdk/test/java/lang/Math/Log1pTests.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/Math/Log1pTests.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @run main Log1pTests
  * @bug 4851638 4939441 8078672
  * @summary Tests for {Math, StrictMath}.log1p (use -Dseed=X to set PRNG seed)
@@ -32,7 +31,7 @@
  * @key randomness
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class Log1pTests {
     private Log1pTests(){}
--- a/jdk/test/java/lang/Math/MultiplicationTests.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/Math/MultiplicationTests.java	Wed Jul 05 23:33:24 2017 +0200
@@ -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
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main MultiplicationTests
  * @bug 5100935
  * @summary Tests for multiplication methods (use -Dseed=X to set PRNG seed)
@@ -32,7 +31,7 @@
  */
 
 import java.math.BigInteger;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class MultiplicationTests {
     private MultiplicationTests(){}
--- a/jdk/test/java/lang/StackWalker/StackWalkTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/StackWalker/StackWalkTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,14 +31,13 @@
 import java.util.Set;
 import java.util.TreeSet;
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * @test
  * @bug 8140450
  * @summary Stack Walk Test (use -Dseed=X to set PRNG seed)
- * @library /lib/testlibrary
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @compile StackRecorderUtil.java
  * @run main/othervm StackWalkTest
  * @run main/othervm/java.security.policy=stackwalktest.policy StackWalkTest
--- a/jdk/test/java/lang/StrictMath/CubeRootTests.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/StrictMath/CubeRootTests.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,7 @@
  * @test
  * @bug 4347132 8136799
  * @key randomness
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @build Tests
  * @build FdlibmTranslit
  * @build CubeRootTests
@@ -35,7 +34,7 @@
  * @author Joseph D. Darcy
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * The tests in ../Math/CubeRootTests.java test properties that should
--- a/jdk/test/java/lang/StrictMath/ExpTests.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/StrictMath/ExpTests.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,7 @@
  * @test
  * @bug 8139688
  * @key randomness
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @build Tests
  * @build FdlibmTranslit
  * @build ExpTests
@@ -34,7 +33,7 @@
  * @summary Tests specifically for StrictMath.exp
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * The role of this test is to verify that the FDLIBM exp algorithm is
--- a/jdk/test/java/lang/StrictMath/HypotTests.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/StrictMath/HypotTests.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,8 +26,7 @@
  * @bug 4851638
  * @key randomness
  * @summary Tests for StrictMath.hypot
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @build Tests
  * @build FdlibmTranslit
  * @build HypotTests
@@ -35,7 +34,7 @@
  * @author Joseph D. Darcy
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * The tests in ../Math/HypotTests.java test properties that should
--- a/jdk/test/java/lang/String/LiteralReplace.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/String/LiteralReplace.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /* @test
  * @bug 8058779 8054307
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @run testng LiteralReplace
  * @summary Basic tests of String.replace(CharSequence, CharSequence)
  * @key randomness
@@ -37,7 +36,7 @@
 import java.util.regex.Pattern;
 import java.util.Random;
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 import org.testng.annotations.Test;
 import org.testng.annotations.DataProvider;
--- a/jdk/test/java/lang/invoke/ExplicitCastArgumentsTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/invoke/ExplicitCastArgumentsTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,7 +21,9 @@
  * questions.
  */
 
-import com.oracle.testlibrary.jsr292.Helper;
+import sun.invoke.util.Wrapper;
+import test.java.lang.invoke.lib.Helper;
+
 import java.io.File;
 import java.io.Serializable;
 import java.lang.invoke.MethodHandle;
@@ -31,13 +33,12 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Random;
-import sun.invoke.util.Wrapper;
 
 /*
  * @test
  * @bug 8060483 8066746
  * @key randomness
- * @library /lib/testlibrary /lib/testlibrary/jsr292
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @modules java.base/sun.invoke.util
  * @summary unit tests for MethodHandles.explicitCastArguments()
  * @run main ExplicitCastArgumentsTest
@@ -249,21 +250,27 @@
             for (Class parent : parents) {
                 for (int j = 0; j < children.length; j++) {
                     // Child type to parent type non-null conversion, shoud succeed
-                    testConversion(mode, children[j], parent, childInst[j], childInst[j], false, null);
+                    testConversion(mode, children[j], parent, childInst[j],
+                            childInst[j], false, null);
                     // Child type to parent type null conversion, shoud succeed
-                    testConversion(mode, children[j], parent, null, null, false, null);
+                    testConversion(mode, children[j], parent, null,
+                            null, false, null);
                     // Parent type to child type non-null conversion with parent
                     // type instance, should fail
-                    testConversion(mode, parent, children[j], testSuperObj, null, true, ClassCastException.class);
+                    testConversion(mode, parent, children[j], testSuperObj,
+                            null, true, ClassCastException.class);
                     // Parent type to child type non-null conversion with child
                     // type instance, should succeed
-                    testConversion(mode, parent, children[j], childInst[j], childInst[j], false, null);
+                    testConversion(mode, parent, children[j], childInst[j],
+                            childInst[j], false, null);
                     // Parent type to child type null conversion, should succeed
-                    testConversion(mode, parent, children[j], null, null, false, null);
+                    testConversion(mode, parent, children[j], null,
+                            null, false, null);
                 }
                 // Parent type to child type non-null conversion with sibling
                 // type instance, should fail
-                testConversion(mode, parent, testSubClass1, testObj02, null, true, ClassCastException.class);
+                testConversion(mode, parent, testSubClass1, testObj02,
+                        null, true, ClassCastException.class);
             }
             // Sibling type non-null conversion, should fail
             testConversion(mode, testSubClass1,
--- a/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,11 +28,15 @@
  * @ignore 8078602
  * @summary Test verifies that lambda forms are garbage collected
  * @author kshefov
- * @library /lib/testlibrary/jsr292 /lib/testlibrary
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @build TestMethods
  * @build LambdaFormTestCase
  * @build LFGarbageCollectedTest
- * @run main/othervm -Xmx64m -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+HeapDumpOnOutOfMemoryError -DHEAP_DUMP=false LFGarbageCollectedTest
+ * @run main/othervm -Xmx64m
+ *                   -XX:SoftRefLRUPolicyMSPerMB=0
+ *                   -XX:+HeapDumpOnOutOfMemoryError
+ *                   -DHEAP_DUMP=false
+ *                   LFGarbageCollectedTest
  */
 
 import java.lang.invoke.MethodHandle;
--- a/jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -27,7 +27,7 @@
  * @key randomness
  * @summary Test verifies that lambda forms are cached when run with multiple threads
  * @author kshefov
- * @library /lib/testlibrary/jsr292 /lib/testlibrary
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @modules java.base/java.lang.invoke:open
  *          java.base/java.lang.ref:open
  *          java.management
@@ -38,16 +38,16 @@
  * @run main/othervm LFMultiThreadCachingTest
  */
 
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
+
 import java.lang.invoke.MethodHandle;
 import java.util.Collections;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.BrokenBarrierException;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.CyclicBarrier;
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
 
 /**
  * Multiple threaded lambda forms caching test class.
@@ -57,13 +57,16 @@
     private static final TestMethods.Kind[] KINDS;
 
     static {
-        EnumSet<TestMethods.Kind> set = EnumSet.complementOf(EnumSet.of(TestMethods.Kind.EXCEPT));
+        EnumSet<TestMethods.Kind> set
+                = EnumSet.complementOf(EnumSet.of(TestMethods.Kind.EXCEPT));
         KINDS = set.toArray(new TestMethods.Kind[set.size()]);
         if (KINDS.length < 2) {
-            throw new Error("TESTBUG: KINDS.length[" + KINDS.length + "] should be at least 2");
+            throw new Error("TESTBUG: KINDS.length[" + KINDS.length
+                    + "] should be at least 2");
         }
     }
-    private static final int CORES = Math.max(KINDS.length, Runtime.getRuntime().availableProcessors());
+    private static final int CORES
+            = Math.max(KINDS.length, Runtime.getRuntime().availableProcessors());
 
     /**
      * Constructor a for multiple threaded lambda forms caching test case.
@@ -144,6 +147,7 @@
      * @param args Accepts no arguments.
      */
     public static void main(String[] args) {
-        LambdaFormTestCase.runTests(LFMultiThreadCachingTest::new, EnumSet.allOf(TestMethods.class));
+        LambdaFormTestCase.runTests(LFMultiThreadCachingTest::new,
+                                    EnumSet.allOf(TestMethods.class));
     }
 }
--- a/jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -27,7 +27,7 @@
  * @key randomness
  * @summary Test verifies that lambda forms are cached when run with single thread
  * @author kshefov
- * @library /lib/testlibrary/jsr292 /lib/testlibrary
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @modules java.base/java.lang.ref:open
  *          java.base/java.lang.invoke:open
  *          java.management
@@ -77,6 +77,7 @@
      * @param args Accepts no arguments.
      */
     public static void main(String[] args) {
-        LambdaFormTestCase.runTests(LFSingleThreadCachingTest::new, EnumSet.allOf(TestMethods.class));
+        LambdaFormTestCase.runTests(LFSingleThreadCachingTest::new,
+                                    EnumSet.allOf(TestMethods.class));
     }
 }
--- a/jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,8 +21,11 @@
  * questions.
  */
 
-import com.oracle.testlibrary.jsr292.Helper;
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
+import jdk.testlibrary.TimeLimitedRunner;
+import jdk.testlibrary.Utils;
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
+import test.java.lang.invoke.lib.Helper;
+
 import java.lang.invoke.MethodHandle;
 import java.lang.management.GarbageCollectorMXBean;
 import java.lang.management.ManagementFactory;
@@ -32,8 +35,6 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.function.Function;
-import jdk.testlibrary.Utils;
-import jdk.testlibrary.TimeLimitedRunner;
 
 /**
  * Lambda forms caching test case class. Contains all necessary test routines to
@@ -44,7 +45,8 @@
  */
 public abstract class LambdaFormTestCase {
 
-    private static final long TIMEOUT = Helper.IS_THOROUGH ? 0L : (long) (Utils.adjustTimeout(Utils.DEFAULT_TEST_TIMEOUT) * 0.9);
+    private static final long TIMEOUT = Helper.IS_THOROUGH ?
+            0L : (long) (Utils.adjustTimeout(Utils.DEFAULT_TEST_TIMEOUT) * 0.9);
 
     /**
      * Reflection link to {@code j.l.i.MethodHandle.internalForm} method. It is
@@ -92,7 +94,8 @@
         long failCounter;
         boolean passed;
 
-        TestRun(Function<TestMethods, LambdaFormTestCase> ctor, Collection<TestMethods> testMethods) {
+        TestRun(Function<TestMethods, LambdaFormTestCase> ctor,
+                Collection<TestMethods> testMethods) {
             this.ctor = ctor;
             this.testMethods = testMethods;
             long testCaseNum = testMethods.size();
@@ -175,10 +178,12 @@
      * object.
      * @param testMethods list of test methods
      */
-    public static void runTests(Function<TestMethods, LambdaFormTestCase> ctor, Collection<TestMethods> testMethods) {
+    public static void runTests(Function<TestMethods, LambdaFormTestCase> ctor,
+                                Collection<TestMethods> testMethods) {
         LambdaFormTestCase.TestRun run
                 = new LambdaFormTestCase.TestRun(ctor, testMethods);
-        TimeLimitedRunner runner = new TimeLimitedRunner(TIMEOUT, 4.0d, run::doIteration);
+        TimeLimitedRunner runner
+                = new TimeLimitedRunner(TIMEOUT, 4.0d, run::doIteration);
         try {
             runner.call();
         } catch (Exception ex) {
--- a/jdk/test/java/lang/invoke/LFCaching/TestMethods.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/invoke/LFCaching/TestMethods.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,7 +21,8 @@
  * questions.
  */
 
-import com.oracle.testlibrary.jsr292.Helper;
+import test.java.lang.invoke.lib.Helper;
+
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodType;
@@ -41,462 +42,472 @@
 public enum TestMethods {
 
     FOLD_ARGUMENTS("foldArguments") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
-                    data.put("modifierMHArgNum", modifierMHArgNum);
-                    Class<?> combinerReturnType;
-                    if (realArity == 0) {
-                        combinerReturnType = void.class;
-                    } else {
-                        combinerReturnType = Helper.RNG.nextBoolean() ? void.class : mtTarget.parameterType(0);
-                    }
-                    data.put("combinerReturnType", combinerReturnType);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
+            data.put("modifierMHArgNum", modifierMHArgNum);
+            Class<?> combinerReturnType;
+            if (realArity == 0) {
+                combinerReturnType = void.class;
+            } else {
+                combinerReturnType = Helper.RNG.nextBoolean() ?
+                        void.class : mtTarget.parameterType(0);
+            }
+            data.put("combinerReturnType", combinerReturnType);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    Class<?> combinerReturnType = (Class) data.get("combinerReturnType");
-                    int modifierMHArgNum = (int) data.get("modifierMHArgNum");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    Class<?> rType = mtTarget.returnType();
-                    int combListStart = (combinerReturnType == void.class) ? 0 : 1;
-                    if (modifierMHArgNum < combListStart) {
-                        modifierMHArgNum = combListStart;
-                    }
-                    MethodHandle combiner = TestMethods.methodHandleGenerator(combinerReturnType,
-                            mtTarget.parameterList().subList(combListStart,
-                                    modifierMHArgNum), kind);
-                    return MethodHandles.foldArguments(target, combiner);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            Class<?> combinerReturnType = (Class) data.get("combinerReturnType");
+            int modifierMHArgNum = (int) data.get("modifierMHArgNum");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            Class<?> rType = mtTarget.returnType();
+            int combListStart = (combinerReturnType == void.class) ? 0 : 1;
+            if (modifierMHArgNum < combListStart) {
+                modifierMHArgNum = combListStart;
+            }
+            MethodHandle combiner = TestMethods.methodHandleGenerator(combinerReturnType,
+                    mtTarget.parameterList().subList(combListStart,
+                            modifierMHArgNum), kind);
+            return MethodHandles.foldArguments(target, combiner);
+        }
+    },
     DROP_ARGUMENTS("dropArguments") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int dropArgsPos = Helper.RNG.nextInt(realArity + 1);
-                    data.put("dropArgsPos", dropArgsPos);
-                    MethodType mtDropArgs = TestMethods.randomMethodTypeGenerator(
-                            Helper.RNG.nextInt(super.maxArity - realArity));
-                    data.put("mtDropArgs", mtDropArgs);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int dropArgsPos = Helper.RNG.nextInt(realArity + 1);
+            data.put("dropArgsPos", dropArgsPos);
+            MethodType mtDropArgs = TestMethods.randomMethodTypeGenerator(
+                    Helper.RNG.nextInt(super.maxArity - realArity));
+            data.put("mtDropArgs", mtDropArgs);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    MethodType mtDropArgs = (MethodType) data.get("mtDropArgs");
-                    int dropArgsPos = (int) data.get("dropArgsPos");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    int mtTgtSlotsCount = TestMethods.argSlotsCount(mtTarget);
-                    int mtDASlotsCount = TestMethods.argSlotsCount(mtDropArgs);
-                    List<Class<?>> fakeParList;
-                    if (mtTgtSlotsCount + mtDASlotsCount > super.maxArity - 1) {
-                        fakeParList = TestMethods.reduceArgListToSlotsCount(mtDropArgs.parameterList(),
-                                super.maxArity - mtTgtSlotsCount - 1);
-                    } else {
-                        fakeParList = mtDropArgs.parameterList();
-                    }
-                    return MethodHandles.dropArguments(target, dropArgsPos, fakeParList);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            MethodType mtDropArgs = (MethodType) data.get("mtDropArgs");
+            int dropArgsPos = (int) data.get("dropArgsPos");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            int mtTgtSlotsCount = TestMethods.argSlotsCount(mtTarget);
+            int mtDASlotsCount = TestMethods.argSlotsCount(mtDropArgs);
+            List<Class<?>> fakeParList;
+            if (mtTgtSlotsCount + mtDASlotsCount > super.maxArity - 1) {
+                fakeParList = TestMethods.reduceArgListToSlotsCount(mtDropArgs.parameterList(),
+                        super.maxArity - mtTgtSlotsCount - 1);
+            } else {
+                fakeParList = mtDropArgs.parameterList();
+            }
+            return MethodHandles.dropArguments(target, dropArgsPos, fakeParList);
+        }
+    },
     EXPLICIT_CAST_ARGUMENTS("explicitCastArguments", Helper.MAX_ARITY / 2) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    MethodType mtExcplCastArgs = TestMethods.randomMethodTypeGenerator(realArity);
-                    if (mtTarget.returnType() == void.class) {
-                        mtExcplCastArgs = MethodType.methodType(void.class,
-                                mtExcplCastArgs.parameterArray());
-                    }
-                    if (mtExcplCastArgs.returnType() == void.class) {
-                        mtExcplCastArgs = MethodType.methodType(mtTarget.returnType(),
-                                mtExcplCastArgs.parameterArray());
-                    }
-                    data.put("mtExcplCastArgs", mtExcplCastArgs);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            MethodType mtExcplCastArgs = TestMethods.randomMethodTypeGenerator(realArity);
+            if (mtTarget.returnType() == void.class) {
+                mtExcplCastArgs = MethodType.methodType(void.class,
+                        mtExcplCastArgs.parameterArray());
+            }
+            if (mtExcplCastArgs.returnType() == void.class) {
+                mtExcplCastArgs = MethodType.methodType(mtTarget.returnType(),
+                        mtExcplCastArgs.parameterArray());
+            }
+            data.put("mtExcplCastArgs", mtExcplCastArgs);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    MethodType mtExcplCastArgs = (MethodType) data.get("mtExcplCastArgs");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    return MethodHandles.explicitCastArguments(target, mtExcplCastArgs);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            MethodType mtExcplCastArgs = (MethodType) data.get("mtExcplCastArgs");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            return MethodHandles.explicitCastArguments(target, mtExcplCastArgs);
+        }
+    },
     FILTER_ARGUMENTS("filterArguments", Helper.MAX_ARITY / 2) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int filterArgsPos = Helper.RNG.nextInt(realArity + 1);
-                    data.put("filterArgsPos", filterArgsPos);
-                    int filtersArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - filterArgsPos);
-                    data.put("filtersArgsArrayLength", filtersArgsArrayLength);
-                    MethodType mtFilter = TestMethods.randomMethodTypeGenerator(filtersArgsArrayLength);
-                    data.put("mtFilter", mtFilter);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int filterArgsPos = Helper.RNG.nextInt(realArity + 1);
+            data.put("filterArgsPos", filterArgsPos);
+            int filtersArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - filterArgsPos);
+            data.put("filtersArgsArrayLength", filtersArgsArrayLength);
+            MethodType mtFilter = TestMethods.randomMethodTypeGenerator(filtersArgsArrayLength);
+            data.put("mtFilter", mtFilter);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    MethodType mtFilter = (MethodType) data.get("mtFilter");
-                    int filterArgsPos = (int) data.get("filterArgsPos");
-                    int filtersArgsArrayLength = (int) data.get("filtersArgsArrayLength");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    MethodHandle[] filters = new MethodHandle[filtersArgsArrayLength];
-                    for (int i = 0; i < filtersArgsArrayLength; i++) {
-                        filters[i] = TestMethods.filterGenerator(mtFilter.parameterType(i),
-                                mtTarget.parameterType(filterArgsPos + i), kind);
-                    }
-                    return MethodHandles.filterArguments(target, filterArgsPos, filters);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            MethodType mtFilter = (MethodType) data.get("mtFilter");
+            int filterArgsPos = (int) data.get("filterArgsPos");
+            int filtersArgsArrayLength = (int) data.get("filtersArgsArrayLength");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            MethodHandle[] filters = new MethodHandle[filtersArgsArrayLength];
+            for (int i = 0; i < filtersArgsArrayLength; i++) {
+                filters[i] = TestMethods.filterGenerator(mtFilter.parameterType(i),
+                        mtTarget.parameterType(filterArgsPos + i), kind);
+            }
+            return MethodHandles.filterArguments(target, filterArgsPos, filters);
+        }
+    },
     FILTER_RETURN_VALUE("filterReturnValue") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int filterArgsPos = Helper.RNG.nextInt(realArity + 1);
-                    int filtersArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - filterArgsPos);
-                    MethodType mtFilter = TestMethods.randomMethodTypeGenerator(filtersArgsArrayLength);
-                    data.put("mtFilter", mtFilter);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int filterArgsPos = Helper.RNG.nextInt(realArity + 1);
+            int filtersArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - filterArgsPos);
+            MethodType mtFilter = TestMethods.randomMethodTypeGenerator(filtersArgsArrayLength);
+            data.put("mtFilter", mtFilter);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    MethodType mtFilter = (MethodType) data.get("mtFilter");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    MethodHandle filter = TestMethods.filterGenerator(mtTarget.returnType(),
-                            mtFilter.returnType(), kind);
-                    return MethodHandles.filterReturnValue(target, filter);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            MethodType mtFilter = (MethodType) data.get("mtFilter");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            MethodHandle filter = TestMethods.filterGenerator(mtTarget.returnType(),
+                    mtFilter.returnType(), kind);
+            return MethodHandles.filterReturnValue(target, filter);
+        }
+    },
     INSERT_ARGUMENTS("insertArguments", Helper.MAX_ARITY - 3) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int insertArgsPos = Helper.RNG.nextInt(realArity + 1);
-                    data.put("insertArgsPos", insertArgsPos);
-                    int insertArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - insertArgsPos);
-                    MethodType mtInsertArgs = MethodType.methodType(void.class, mtTarget.parameterList()
-                            .subList(insertArgsPos, insertArgsPos + insertArgsArrayLength));
-                    data.put("mtInsertArgs", mtInsertArgs);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int insertArgsPos = Helper.RNG.nextInt(realArity + 1);
+            data.put("insertArgsPos", insertArgsPos);
+            int insertArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - insertArgsPos);
+            MethodType mtInsertArgs = MethodType.methodType(void.class, mtTarget.parameterList()
+                    .subList(insertArgsPos, insertArgsPos + insertArgsArrayLength));
+            data.put("mtInsertArgs", mtInsertArgs);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    MethodType mtInsertArgs = (MethodType) data.get("mtInsertArgs");
-                    int insertArgsPos = (int) data.get("insertArgsPos");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    Object[] insertList = Helper.randomArgs(mtInsertArgs.parameterList());
-                    return MethodHandles.insertArguments(target, insertArgsPos, insertList);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            MethodType mtInsertArgs = (MethodType) data.get("mtInsertArgs");
+            int insertArgsPos = (int) data.get("insertArgsPos");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            Object[] insertList = Helper.randomArgs(mtInsertArgs.parameterList());
+            return MethodHandles.insertArguments(target, insertArgsPos, insertList);
+        }
+    },
     PERMUTE_ARGUMENTS("permuteArguments", Helper.MAX_ARITY / 2) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int[] permuteArgsReorderArray = new int[realArity];
-                    int mtPermuteArgsNum = Helper.RNG.nextInt(Helper.MAX_ARITY);
-                    mtPermuteArgsNum = mtPermuteArgsNum == 0 ? 1 : mtPermuteArgsNum;
-                    MethodType mtPermuteArgs = TestMethods.randomMethodTypeGenerator(mtPermuteArgsNum);
-                    mtTarget = mtTarget.changeReturnType(mtPermuteArgs.returnType());
-                    for (int i = 0; i < realArity; i++) {
-                        int mtPermuteArgsParNum = Helper.RNG.nextInt(mtPermuteArgs.parameterCount());
-                        permuteArgsReorderArray[i] = mtPermuteArgsParNum;
-                        mtTarget = mtTarget.changeParameterType(
-                                i, mtPermuteArgs.parameterType(mtPermuteArgsParNum));
-                    }
-                    data.put("mtTarget", mtTarget);
-                    data.put("permuteArgsReorderArray", permuteArgsReorderArray);
-                    data.put("mtPermuteArgs", mtPermuteArgs);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int[] permuteArgsReorderArray = new int[realArity];
+            int mtPermuteArgsNum = Helper.RNG.nextInt(Helper.MAX_ARITY);
+            mtPermuteArgsNum = mtPermuteArgsNum == 0 ? 1 : mtPermuteArgsNum;
+            MethodType mtPermuteArgs = TestMethods.randomMethodTypeGenerator(mtPermuteArgsNum);
+            mtTarget = mtTarget.changeReturnType(mtPermuteArgs.returnType());
+            for (int i = 0; i < realArity; i++) {
+                int mtPermuteArgsParNum = Helper.RNG.nextInt(mtPermuteArgs.parameterCount());
+                permuteArgsReorderArray[i] = mtPermuteArgsParNum;
+                mtTarget = mtTarget.changeParameterType(
+                        i, mtPermuteArgs.parameterType(mtPermuteArgsParNum));
+            }
+            data.put("mtTarget", mtTarget);
+            data.put("permuteArgsReorderArray", permuteArgsReorderArray);
+            data.put("mtPermuteArgs", mtPermuteArgs);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    MethodType mtPermuteArgs = (MethodType) data.get("mtPermuteArgs");
-                    int[] permuteArgsReorderArray = (int[]) data.get("permuteArgsReorderArray");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    return MethodHandles.permuteArguments(target, mtPermuteArgs, permuteArgsReorderArray);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            MethodType mtPermuteArgs = (MethodType) data.get("mtPermuteArgs");
+            int[] permuteArgsReorderArray = (int[]) data.get("permuteArgsReorderArray");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            return MethodHandles.permuteArguments(target, mtPermuteArgs, permuteArgsReorderArray);
+        }
+    },
     THROW_EXCEPTION("throwException") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    Class<?> rType = mtTarget.returnType();
-                    return MethodHandles.throwException(rType, Exception.class
-                    );
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            Class<?> rType = mtTarget.returnType();
+            return MethodHandles.throwException(rType, Exception.class
+            );
+        }
+    },
     GUARD_WITH_TEST("guardWithTest") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
-                    data.put("modifierMHArgNum", modifierMHArgNum);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
+            data.put("modifierMHArgNum", modifierMHArgNum);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    int modifierMHArgNum = (int) data.get("modifierMHArgNum");
-                    TestMethods.Kind targetKind;
-                    TestMethods.Kind fallbackKind;
-                    if (kind.equals(TestMethods.Kind.ONE)) {
-                        targetKind = TestMethods.Kind.ONE;
-                        fallbackKind = TestMethods.Kind.TWO;
-                    } else {
-                        targetKind = TestMethods.Kind.TWO;
-                        fallbackKind = TestMethods.Kind.ONE;
-                    }
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), targetKind);
-                    MethodHandle fallback = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), fallbackKind);
-                    MethodHandle test = TestMethods.methodHandleGenerator(boolean.class,
-                            mtTarget.parameterList().subList(0, modifierMHArgNum), kind);
-                    return MethodHandles.guardWithTest(test, target, fallback);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            int modifierMHArgNum = (int) data.get("modifierMHArgNum");
+            TestMethods.Kind targetKind;
+            TestMethods.Kind fallbackKind;
+            if (kind.equals(TestMethods.Kind.ONE)) {
+                targetKind = TestMethods.Kind.ONE;
+                fallbackKind = TestMethods.Kind.TWO;
+            } else {
+                targetKind = TestMethods.Kind.TWO;
+                fallbackKind = TestMethods.Kind.ONE;
+            }
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), targetKind);
+            MethodHandle fallback = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), fallbackKind);
+            MethodHandle test = TestMethods.methodHandleGenerator(boolean.class,
+                    mtTarget.parameterList().subList(0, modifierMHArgNum), kind);
+            return MethodHandles.guardWithTest(test, target, fallback);
+        }
+    },
     CATCH_EXCEPTION("catchException") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
-                    data.put("modifierMHArgNum", modifierMHArgNum);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
+            data.put("modifierMHArgNum", modifierMHArgNum);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    int modifierMHArgNum = (int) data.get("modifierMHArgNum");
-                    MethodHandle target;
-                    if (kind.equals(TestMethods.Kind.ONE)) {
-                        target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                                mtTarget.parameterList(), TestMethods.Kind.ONE);
-                    } else {
-                        target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                                mtTarget.parameterList(), TestMethods.Kind.EXCEPT);
-                    }
-                    List<Class<?>> handlerParamList = new ArrayList<>(mtTarget.parameterCount() + 1);
-                    handlerParamList.add(Exception.class);
-                    handlerParamList.addAll(mtTarget.parameterList().subList(0, modifierMHArgNum));
-                    MethodHandle handler = TestMethods.methodHandleGenerator(
-                            mtTarget.returnType(), handlerParamList, TestMethods.Kind.TWO);
-                    return MethodHandles.catchException(target, Exception.class, handler);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            int modifierMHArgNum = (int) data.get("modifierMHArgNum");
+            MethodHandle target;
+            if (kind.equals(TestMethods.Kind.ONE)) {
+                target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                        mtTarget.parameterList(), TestMethods.Kind.ONE);
+            } else {
+                target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                        mtTarget.parameterList(), TestMethods.Kind.EXCEPT);
+            }
+            List<Class<?>> handlerParamList = new ArrayList<>(mtTarget.parameterCount() + 1);
+            handlerParamList.add(Exception.class);
+            handlerParamList.addAll(mtTarget.parameterList().subList(0, modifierMHArgNum));
+            MethodHandle handler = TestMethods.methodHandleGenerator(
+                    mtTarget.returnType(), handlerParamList, TestMethods.Kind.TWO);
+            return MethodHandles.catchException(target, Exception.class, handler);
+        }
+    },
     INVOKER("invoker", Helper.MAX_ARITY - 1) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    return MethodHandles.invoker(mtTarget);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            return MethodHandles.invoker(mtTarget);
+        }
+    },
     EXACT_INVOKER("exactInvoker", Helper.MAX_ARITY - 1) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    return MethodHandles.exactInvoker(mtTarget);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            return MethodHandles.exactInvoker(mtTarget);
+        }
+    },
     SPREAD_INVOKER("spreadInvoker", Helper.MAX_ARITY - 1) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
-                    data.put("modifierMHArgNum", modifierMHArgNum);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
+            data.put("modifierMHArgNum", modifierMHArgNum);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    int modifierMHArgNum = (int) data.get("modifierMHArgNum");
-                    return MethodHandles.spreadInvoker(mtTarget, modifierMHArgNum);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            int modifierMHArgNum = (int) data.get("modifierMHArgNum");
+            return MethodHandles.spreadInvoker(mtTarget, modifierMHArgNum);
+        }
+    },
     ARRAY_ELEMENT_GETTER("arrayElementGetter") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    Class<?> rType = mtTarget.returnType();
-                    if (rType == void.class) {
-                        rType = Object.class;
-                    }
-                    return MethodHandles.arrayElementGetter(Array.newInstance(rType, 2).getClass());
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            Class<?> rType = mtTarget.returnType();
+            if (rType == void.class) {
+                rType = Object.class;
+            }
+            return MethodHandles.arrayElementGetter(Array.newInstance(rType, 2).getClass());
+        }
+    },
     ARRAY_ELEMENT_SETTER("arrayElementSetter") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    Class<?> rType = mtTarget.returnType();
-                    if (rType == void.class) {
-                        rType = Object.class;
-                    }
-                    return MethodHandles.arrayElementSetter(Array.newInstance(rType, 2).getClass());
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            Class<?> rType = mtTarget.returnType();
+            if (rType == void.class) {
+                rType = Object.class;
+            }
+            return MethodHandles.arrayElementSetter(Array.newInstance(rType, 2).getClass());
+        }
+    },
     CONSTANT("constant") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    Class<?> rType = mtTarget.returnType();
-                    if (rType == void.class) {
-                        rType = Object.class;
-                    }
-                    if (rType.equals(boolean.class)) {
-                        // There should be the same return values because for default values there are special "zero" forms
-                        return MethodHandles.constant(rType, true);
-                    } else {
-                        return MethodHandles.constant(rType, kind.getValue(rType));
-                    }
-                }
-            },
-    IDENTITY("identity") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            Class<?> rType = mtTarget.returnType();
+            if (rType == void.class) {
+                rType = Object.class;
+            }
+            if (rType.equals(boolean.class)) {
+                // There should be the same return values because for default values there are special "zero" forms
+                return MethodHandles.constant(rType, true);
+            } else {
+                return MethodHandles.constant(rType, kind.getValue(rType));
+            }
+        }
+    },
+IDENTITY("identity") {
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    Class<?> rType = mtTarget.returnType();
-                    if (rType == void.class) {
-                        rType = Object.class;
-                    }
-                    return MethodHandles.identity(rType);
-                }
-            };
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            Class<?> rType = mtTarget.returnType();
+            if (rType == void.class) {
+                rType = Object.class;
+            }
+            return MethodHandles.identity(rType);
+        }
+    };
 
     /**
      * Test method's name.
@@ -514,8 +525,10 @@
         this(name, Helper.MAX_ARITY);
     }
 
-    protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-        throw new UnsupportedOperationException("TESTBUG: getMH method is not implemented for test method " + this);
+    protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+            throws NoSuchMethodException, IllegalAccessException {
+        throw new UnsupportedOperationException(
+                "TESTBUG: getMH method is not implemented for test method " + this);
     }
 
     /**
@@ -575,13 +588,15 @@
             return Helper.castToWrapper(value, cl);
         }
 
-        private MethodHandle getBasicMH(Class<?> rType) throws NoSuchMethodException, IllegalAccessException {
+        private MethodHandle getBasicMH(Class<?> rType)
+                throws NoSuchMethodException, IllegalAccessException {
             MethodHandle result = null;
             switch (this) {
                 case ONE:
                 case TWO:
                     if (rType.equals(void.class)) {
-                        result = MethodHandles.lookup().findVirtual(Kind.class, "returnVoid", MethodType.methodType(void.class));
+                        result = MethodHandles.lookup().findVirtual(Kind.class,
+                                "returnVoid", MethodType.methodType(void.class));
                         result = MethodHandles.insertArguments(result, 0, this);
                     } else {
                         result = MethodHandles.constant(rType, getValue(rType));
--- a/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -20,25 +20,30 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+
 package test.java.lang.invoke.MethodHandles;
 
-import com.oracle.testlibrary.jsr292.Helper;
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
 import jdk.testlibrary.Asserts;
 import jdk.testlibrary.TimeLimitedRunner;
 import jdk.testlibrary.Utils;
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
+import test.java.lang.invoke.lib.Helper;
 
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodType;
 import java.lang.reflect.Array;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
 import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.function.Supplier;
 
 /* @test
- * @library /lib/testlibrary/jsr292 /lib/testlibrary/
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @compile CatchExceptionTest.java
  * @run main/othervm -esa test.java.lang.invoke.MethodHandles.CatchExceptionTest
  * @key intermittent randomness
@@ -68,8 +73,8 @@
     private int dropped;
     private MethodHandle thrower;
 
-    public CatchExceptionTest(TestCase testCase, final boolean isVararg, final int argsCount,
-            final int catchDrops) {
+    public CatchExceptionTest(TestCase testCase, final boolean isVararg,
+                              final int argsCount, final int catchDrops) {
         this.testCase = testCase;
         this.dropped = catchDrops;
         MethodHandle thrower = testCase.thrower;
@@ -353,8 +358,8 @@
                 new ClassCastException("testing"),
                 new java.io.IOException("testing"),
                 new LinkageError("testing")};
-        List<Supplier<TestCase>> list = new ArrayList<>(constructors.length *
-                throwables.length * ThrowMode.values().length);
+        List<Supplier<TestCase>> list = new ArrayList<>(constructors.length
+                * throwables.length * ThrowMode.values().length);
         //noinspection unchecked
         for (PartialConstructor f : constructors) {
             for (ThrowMode mode : ThrowMode.values()) {
--- a/jdk/test/java/lang/invoke/MethodHandlesTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/invoke/MethodHandlesTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,23 +23,46 @@
 
 /* @test
  * @summary unit tests for java.lang.invoke.MethodHandles
- * @library /lib/testlibrary /lib/testlibrary/jsr292
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @compile MethodHandlesTest.java remote/RemoteExample.java
- * @run junit/othervm/timeout=2500 -XX:+IgnoreUnrecognizedVMOptions -XX:-VerifyDependencies -esa test.java.lang.invoke.MethodHandlesTest
+ * @run junit/othervm/timeout=2500 -XX:+IgnoreUnrecognizedVMOptions
+ *                                 -XX:-VerifyDependencies
+ *                                 -esa
+ *                                 test.java.lang.invoke.MethodHandlesTest
  */
 
 package test.java.lang.invoke;
 
+import org.junit.*;
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
 import test.java.lang.invoke.remote.RemoteExample;
-import java.lang.invoke.*;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandleProxies;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodHandles.Lookup;
+import java.lang.invoke.MethodType;
+import java.lang.invoke.MutableCallSite;
+import java.lang.invoke.WrongMethodTypeException;
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.UndeclaredThrowableException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Formatter;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import static java.lang.invoke.MethodType.methodType;
-import java.lang.invoke.MethodHandles.Lookup;
-import java.lang.reflect.*;
-import java.util.*;
-import org.junit.*;
 import static org.junit.Assert.*;
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
-
 
 /**
  *
--- a/jdk/test/java/lang/invoke/PermuteArgsTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/invoke/PermuteArgsTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,10 @@
 
 /* @test
  * @summary unit tests for method handles which permute their arguments
- * @library /lib/testlibrary/jsr292 /lib/testlibrary
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @run testng/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-VerifyDependencies -ea -esa -DPermuteArgsTest.MAX_ARITY=8 test.java.lang.invoke.PermuteArgsTest
  */
+
 /* Examples of manual runs:
  * java -DPermuteArgsTest.{DRY_RUN=true,MAX_ARITY=253} test.java.lang.invoke.PermuteArgsTest
  * java -DPermuteArgsTest.{VERBOSE=true,MAX_ARITY=5} test.java.lang.invoke.PermuteArgsTest
@@ -34,17 +35,23 @@
 
 package test.java.lang.invoke;
 
-import org.testng.*;
-import org.testng.annotations.*;
+import org.testng.annotations.Test;
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
 
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodType;
+import java.lang.invoke.WrongMethodTypeException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
 
-import java.util.*;
-import java.lang.reflect.*;
-
-import java.lang.invoke.*;
-import static java.lang.invoke.MethodHandles.*;
-import static java.lang.invoke.MethodType.*;
+import static java.lang.invoke.MethodHandles.Lookup;
+import static java.lang.invoke.MethodHandles.lookup;
+import static java.lang.invoke.MethodHandles.permuteArguments;
+import static java.lang.invoke.MethodType.methodType;
 
 public class PermuteArgsTest {
     private static final Class<?> CLASS = PermuteArgsTest.class;
@@ -205,7 +212,8 @@
             throw new IllegalArgumentException("cannot convert to type "+mt1+" from "+mh, ex);
         }
     }
-    static MethodHandle findTestMH(String name, int[] perm) throws ReflectiveOperationException {
+    static MethodHandle findTestMH(String name, int[] perm)
+            throws ReflectiveOperationException {
         int arity = perm.length;
         Lookup lookup = lookup();
         for (Method m : lookup.lookupClass().getDeclaredMethods()) {
@@ -259,7 +267,8 @@
         }
     }
 
-    static void testPermutations(MethodHandle mh, int[] perm, int start, int end, Set<String> done) throws Throwable {
+    static void testPermutations(MethodHandle mh, int[] perm, int start, int end,
+                                 Set<String> done) throws Throwable {
         if (end - start <= 1)  return;
         for (int j = 0; j <= 1; j++) {
             testRotations(mh, perm, start, end, done);
@@ -283,7 +292,8 @@
         }
     }
 
-    static void testRotations(MethodHandle mh, int[] perm, int start, int end, Set<String> done) throws Throwable {
+    static void testRotations(MethodHandle mh, int[] perm, int start, int end,
+                              Set<String> done) throws Throwable {
         Object[] args = junkArgs(mh.type().parameterArray());
         for (int i = start; i < end; i++) {
             if (done.add(Arrays.toString(perm)))
@@ -292,9 +302,11 @@
         }
     }
 
-    static void testOnePermutation(MethodHandle mh, int[] perm, Object[] args) throws Throwable {
+    static void testOnePermutation(MethodHandle mh, int[] perm, Object[] args)
+            throws Throwable {
         MethodType mt = mh.type();
-        MethodType pmt = methodType(mt.returnType(), unpermuteArgs(perm, mt.parameterArray(), Class[].class));
+        MethodType pmt = methodType(mt.returnType(),
+                unpermuteArgs(perm, mt.parameterArray(), Class[].class));
         if (VERBOSE)
             System.out.println(Arrays.toString(perm));
         testCases += 1;
--- a/jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,14 +24,18 @@
 /*
  * @test
  * @bug 8019184
- * @library /lib/testlibrary /lib/testlibrary/jsr292
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @summary MethodHandles.catchException() fails when methods have 8 args + varargs
  * @run main TestCatchExceptionWithVarargs
  */
 
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
-import java.util.*;
-import java.lang.invoke.*;
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.LinkedList;
+import java.util.List;
 
 public class TestCatchExceptionWithVarargs {
 
@@ -48,14 +52,16 @@
 
     public static Object target(Object... a) throws Exception {
         if (a[0] != firstArg) {
-            throw new AssertionError("first argument different than expected: " + a[0] + " != " + firstArg);
+            throw new AssertionError("first argument different than expected: "
+                    + a[0] + " != " + firstArg);
         }
         throw new MyException();
     }
 
     public static Object handler(Object... a) {
         if (a[0] != firstArg) {
-            throw new AssertionError("first argument different than expected: " + a[0] + " != " + firstArg);
+            throw new AssertionError("first argument different than expected: "
+                    + a[0] + " != " + firstArg);
         }
         return a[0];
     }
@@ -83,20 +89,27 @@
         for (int i = 1; i < MAX_MH_ARITY - 1; i++) {
             ptypes.add(0, Object.class);
 
-            MethodHandle targetWithArgs = target.asType(MethodType.methodType(Object.class, ptypes));
-            MethodHandle handlerWithArgs = handler.asType(MethodType.methodType(Object.class, ptypes));
-            handlerWithArgs = MethodHandles.dropArguments(handlerWithArgs, 0, MyException.class);
+            MethodHandle targetWithArgs = target.asType(
+                    MethodType.methodType(Object.class, ptypes));
+            MethodHandle handlerWithArgs = handler.asType(
+                    MethodType.methodType(Object.class, ptypes));
+            handlerWithArgs = MethodHandles.dropArguments(
+                    handlerWithArgs, 0, MyException.class);
 
-            MethodHandle gwc1 = MethodHandles.catchException(targetWithArgs, MyException.class, handlerWithArgs);
+            MethodHandle gwc1 = MethodHandles.catchException(
+                    targetWithArgs, MyException.class, handlerWithArgs);
 
             // The next line throws an IllegalArgumentException if there is a bug.
-            MethodHandle gwc2 = MethodHandles.catchException(gwc1, MyException.class, handlerWithArgs);
+            MethodHandle gwc2 = MethodHandles.catchException(
+                    gwc1, MyException.class, handlerWithArgs);
 
             // This is only to verify that the method handles can actually be invoked and do the right thing.
             firstArg = new Object();
-            Object o = gwc2.asSpreader(Object[].class, ptypes.size() - 1).invoke(firstArg, new Object[i]);
+            Object o = gwc2.asSpreader(Object[].class, ptypes.size() - 1)
+                           .invoke(firstArg, new Object[i]);
             if (o != firstArg) {
-                throw new AssertionError("return value different than expected: " + o + " != " + firstArg);
+                throw new AssertionError("return value different than expected: "
+                        + o + " != " + firstArg);
             }
         }
     }
--- a/jdk/test/java/lang/invoke/VarargsArrayTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/lang/invoke/VarargsArrayTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,20 +21,20 @@
  * questions.
  */
 
+import sun.invoke.util.Wrapper;
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
 
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandleHelper;
 import java.lang.invoke.MethodType;
-import sun.invoke.util.Wrapper;
 import java.util.Arrays;
 import java.util.Collections;
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
 
 /* @test
  * @summary unit tests for varargs array methods: MethodHandleInfo.varargsArray(int),
  *          MethodHandleInfo.varargsArray(Class,int) & MethodHandleInfo.varargsList(int)
  * @modules java.base/sun.invoke.util
- * @library /lib/testlibrary /lib/testlibrary/jsr292
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @compile/module=java.base java/lang/invoke/MethodHandleHelper.java
  * @run main/bootclasspath VarargsArrayTest
  * @run main/bootclasspath/othervm -DVarargsArrayTest.MAX_ARITY=255 -DVarargsArrayTest.START_ARITY=250
@@ -46,9 +46,12 @@
  */
 public class VarargsArrayTest {
     private static final Class<?> CLASS = VarargsArrayTest.class;
-    private static final int MAX_ARITY = Integer.getInteger(CLASS.getSimpleName()+".MAX_ARITY", 40);
-    private static final int START_ARITY = Integer.getInteger(CLASS.getSimpleName()+".START_ARITY", 0);
-    private static final boolean EXHAUSTIVE = Boolean.getBoolean(CLASS.getSimpleName()+".EXHAUSTIVE");
+    private static final int MAX_ARITY = Integer.getInteger(
+            CLASS.getSimpleName()+".MAX_ARITY", 40);
+    private static final int START_ARITY = Integer.getInteger(
+            CLASS.getSimpleName()+".START_ARITY", 0);
+    private static final boolean EXHAUSTIVE = Boolean.getBoolean(
+            CLASS.getSimpleName()+".EXHAUSTIVE");
 
     public static void main(String[] args) throws Throwable {
         CodeCacheOverflowProcessor.runMHTest(VarargsArrayTest::test);
@@ -211,7 +214,8 @@
             }
             return;
         }
-        throw new AssertionError(Arrays.deepToString(arr1) + " != " + Arrays.deepToString(arr2));
+        throw new AssertionError(Arrays.deepToString(arr1)
+                + " != " + Arrays.deepToString(arr2));
     }
 
     public static void assertEquals(Object o1, Object o2) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/invoke/common/test/java/lang/invoke/lib/CodeCacheOverflowProcessor.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package test.java.lang.invoke.lib;
+
+import jdk.testlibrary.Utils;
+
+/**
+ * Helper class used to catch and process VirtualMachineError with message "Out
+ * of space in CodeCache". Some JSR292 tests run out of code cache size, so code
+ * cache overflows and VME is thrown. This VME is considered as non-critical in
+ * some JSR292 tests, so it should be processed to prevent test failure.
+ */
+public class CodeCacheOverflowProcessor {
+
+    /**
+     * Checks if an instance of Throwable is caused by VirtualMachineError with
+     * message "Out of space in CodeCache". May be used as filter in method
+     * {@code jdk.testlibrary.Utils.filterException}.
+     *
+     * @param t - Throwable to check.
+     * @return true if Throwable is caused by VME, false otherwise.
+     */
+    public static Boolean isThrowableCausedByVME(Throwable t) {
+        Throwable causeOfT = t;
+        do {
+            if (causeOfT instanceof VirtualMachineError
+                    && causeOfT.getMessage().matches(".*[Oo]ut of space"
+                            + " in CodeCache.*")) {
+                return true;
+            }
+            causeOfT = causeOfT != null ? causeOfT.getCause() : null;
+        } while (causeOfT != null && causeOfT != t);
+        return false;
+    }
+
+    /**
+     * Checks if the given test throws an exception caused by
+     * VirtualMachineError with message "Out of space in CodeCache", and, if VME
+     * takes place, processes it so that no exception is thrown, and prints its
+     * stack trace. If test throws exception not caused by VME, this method just
+     * re-throws this exception.
+     *
+     * @param test - test to check for and process VirtualMachineError.
+     * @return - an exception caused by VME or null
+     *           if test has thrown no exception.
+     * @throws Throwable - if test has thrown an exception
+     *                     that is not caused by VME.
+     */
+    public static Throwable runMHTest(Utils.ThrowingRunnable test) throws Throwable {
+        Throwable t = Utils.filterException(test::run,
+                CodeCacheOverflowProcessor::isThrowableCausedByVME);
+        if (t != null) {
+            System.err.printf("%nNon-critical exception caught becuse of"
+                    + " code cache size is not enough to run all test cases.%n%n");
+        }
+        return t;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/invoke/common/test/java/lang/invoke/lib/Helper.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,351 @@
+/*
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package test.java.lang.invoke.lib;
+
+import jdk.testlibrary.Asserts;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+
+public class Helper {
+    /** Flag for verbose output, true if {@code -Dverbose} specified */
+    public static final boolean IS_VERBOSE
+            = System.getProperty("verbose") != null;
+    /**
+     * Flag for thorough testing -- all test will be executed,
+     * true if {@code -Dthorough} specified. */
+    public static final boolean IS_THOROUGH
+            = System.getProperty("thorough") != null;
+    /** Random number generator w/ initial seed equal to {@code -Dseed} */
+    public static final Random RNG;
+
+    static {
+        String str = System.getProperty("seed");
+        long seed = str != null ? Long.parseLong(str) : new Random().nextLong();
+        RNG = new Random(seed);
+        System.out.printf("-Dseed=%d%n", seed);
+    }
+
+    public static final long TEST_LIMIT;
+    static {
+        String str = System.getProperty("testLimit");
+        TEST_LIMIT = str != null ? Long.parseUnsignedLong(str) : 2000L;
+        System.out.printf("-DtestLimit=%d%n", TEST_LIMIT);
+    }
+
+    public static final int MAX_ARITY = 254;
+    public static final String MISSING_ARG = "missingArg";
+    public static final String MISSING_ARG_2 = "missingArg#2";
+
+    private static final int
+            // first int value
+            ONE_MILLION = (1000 * 1000),
+            // scale factor to reach upper 32 bits
+            TEN_BILLION = (10 * 1000 * 1000 * 1000),
+            // <<1 makes space for sign bit;
+            INITIAL_ARG_VAL = ONE_MILLION << 1;
+
+    public static final MethodHandle AS_LIST;
+
+    static {
+        try {
+            AS_LIST = MethodHandles.lookup().findStatic(
+                    Arrays.class, "asList",
+                    MethodType.methodType(List.class, Object[].class));
+        } catch (NoSuchMethodException | IllegalAccessException ex) {
+            throw new Error(ex);
+        }
+    }
+
+    public static boolean isDoubleCost(Class<?> aClass) {
+        return aClass == double.class || aClass == long.class;
+    }
+
+    private static List<List<Object>> calledLog = new ArrayList<>();
+    private static long nextArgVal;
+
+    public static void assertCalled(String name, Object... args) {
+        assertCalled(0, name, args);
+    }
+
+    public static void assertCalled(int lag, String name, Object... args) {
+        Object expected = logEntry(name, args);
+        Object actual = getCalled(lag);
+        Asserts.assertEQ(expected, actual, "method call w/ lag = " + lag);
+    }
+
+    public static Object called(String name, Object... args) {
+        List<Object> entry = logEntry(name, args);
+        calledLog.add(entry);
+        return entry;
+    }
+
+    private static List<Object> logEntry(String name, Object... args) {
+        return Arrays.asList(name, Arrays.asList(args));
+    }
+
+    public static void clear() {
+        calledLog.clear();
+    }
+
+    public static List<Object> getCalled(int lag) {
+        int size = calledLog.size();
+        return size <= lag ? null : calledLog.get(size - lag - 1);
+    }
+
+    public static List<Class<?>> randomClasses(Class<?>[] classes, int size) {
+        List<Class<?>> result = new ArrayList<>(size);
+        for (int i = 0; i < size; ++i) {
+            result.add(classes[RNG.nextInt(classes.length)]);
+        }
+        return result;
+    }
+
+    public static List<Class<?>> getParams(List<Class<?>> classes,
+            boolean isVararg, int argsCount) {
+        boolean unmodifiable = true;
+        List<Class<?>> result = classes.subList(0,
+                Math.min(argsCount, (MAX_ARITY / 2) - 1));
+        int extra = 0;
+        if (argsCount >= MAX_ARITY / 2) {
+            result = new ArrayList<>(result);
+            unmodifiable = false;
+            extra = (int) result.stream().filter(Helper::isDoubleCost).count();
+            int i = result.size();
+            while (result.size() + extra < argsCount) {
+                Class<?> aClass = classes.get(i);
+                if (Helper.isDoubleCost(aClass)) {
+                    ++extra;
+                    if (result.size() + extra >= argsCount) {
+                        break;
+                    }
+                }
+                result.add(aClass);
+            }
+        }
+        if (isVararg && result.size() > 0) {
+            if (unmodifiable) {
+                result = new ArrayList<>(result);
+            }
+            int last = result.size() - 1;
+            Class<?> aClass = result.get(last);
+            aClass = Array.newInstance(aClass, 2).getClass();
+            result.set(last, aClass);
+        }
+        return result;
+    }
+
+    public static MethodHandle addTrailingArgs(MethodHandle target, int nargs,
+            List<Class<?>> classes) {
+        int targetLen = target.type().parameterCount();
+        int extra = (nargs - targetLen);
+        if (extra <= 0) {
+            return target;
+        }
+        List<Class<?>> fakeArgs = new ArrayList<>(extra);
+        for (int i = 0; i < extra; ++i) {
+            fakeArgs.add(classes.get(i % classes.size()));
+        }
+        return MethodHandles.dropArguments(target, targetLen, fakeArgs);
+    }
+
+    public static MethodHandle varargsList(int arity) {
+        return AS_LIST.asCollector(Object[].class, arity);
+    }
+
+    private static long nextArg(boolean moreBits) {
+        long val = nextArgVal++;
+        long sign = -(val & 1); // alternate signs
+        val >>= 1;
+        if (moreBits)
+        // Guarantee some bits in the high word.
+        // In any case keep the decimal representation simple-looking,
+        // with lots of zeroes, so as not to make the printed decimal
+        // strings unnecessarily noisy.
+        {
+            val += (val % ONE_MILLION) * TEN_BILLION;
+        }
+        return val ^ sign;
+    }
+
+    private static int nextArg() {
+        // Produce a 32-bit result something like ONE_MILLION+(smallint).
+        // Example: 1_000_042.
+        return (int) nextArg(false);
+    }
+
+    private static long nextArg(Class<?> kind) {
+        if (kind == long.class || kind == Long.class ||
+                kind == double.class || kind == Double.class)
+        // produce a 64-bit result something like
+        // ((TEN_BILLION+1) * (ONE_MILLION+(smallint)))
+        // Example: 10_000_420_001_000_042.
+        {
+            return nextArg(true);
+        }
+        return (long) nextArg();
+    }
+
+    private static Object randomArg(Class<?> param) {
+        Object wrap = castToWrapperOrNull(nextArg(param), param);
+        if (wrap != null) {
+            return wrap;
+        }
+
+        if (param.isInterface()) {
+            for (Class<?> c : param.getClasses()) {
+                if (param.isAssignableFrom(c) && !c.isInterface()) {
+                    param = c;
+                    break;
+                }
+            }
+        }
+        if (param.isArray()) {
+            Class<?> ctype = param.getComponentType();
+            Object arg = Array.newInstance(ctype, 2);
+            Array.set(arg, 0, randomArg(ctype));
+            return arg;
+        }
+        if (param.isInterface() && param.isAssignableFrom(List.class)) {
+            return Arrays.asList("#" + nextArg());
+        }
+        if (param.isInterface() || param.isAssignableFrom(String.class)) {
+            return "#" + nextArg();
+        }
+
+        try {
+            return param.newInstance();
+        } catch (InstantiationException | IllegalAccessException ex) {
+        }
+        return null;  // random class not Object, String, Integer, etc.
+    }
+
+    public static Object[] randomArgs(Class<?>... params) {
+        Object[] args = new Object[params.length];
+        for (int i = 0; i < args.length; i++) {
+            args[i] = randomArg(params[i]);
+        }
+        return args;
+    }
+
+    public static Object[] randomArgs(int nargs, Class<?> param) {
+        Object[] args = new Object[nargs];
+        for (int i = 0; i < args.length; i++) {
+            args[i] = randomArg(param);
+        }
+        return args;
+    }
+
+    public static Object[] randomArgs(int nargs, Class<?>... params) {
+        Object[] args = new Object[nargs];
+        for (int i = 0; i < args.length; i++) {
+            Class<?> param = params[i % params.length];
+            args[i] = randomArg(param);
+        }
+        return args;
+    }
+
+    public static Object[] randomArgs(List<Class<?>> params) {
+        return randomArgs(params.toArray(new Class<?>[params.size()]));
+    }
+
+    public static Object castToWrapper(Object value, Class<?> dst) {
+        Object wrap = null;
+        if (value instanceof Number) {
+            wrap = castToWrapperOrNull(((Number) value).longValue(), dst);
+        }
+        if (value instanceof Character) {
+            wrap = castToWrapperOrNull((char) (Character) value, dst);
+        }
+        if (wrap != null) {
+            return wrap;
+        }
+        return dst.cast(value);
+    }
+
+    @SuppressWarnings("cast")
+    // primitive cast to (long) is part of the pattern
+    private static Object castToWrapperOrNull(long value, Class<?> dst) {
+        if (dst == int.class || dst == Integer.class) {
+            return (int) (value);
+        }
+        if (dst == long.class || dst == Long.class) {
+            return (long) (value);
+        }
+        if (dst == char.class || dst == Character.class) {
+            return (char) (value);
+        }
+        if (dst == short.class || dst == Short.class) {
+            return (short) (value);
+        }
+        if (dst == float.class || dst == Float.class) {
+            return (float) (value);
+        }
+        if (dst == double.class || dst == Double.class) {
+            return (double) (value);
+        }
+        if (dst == byte.class || dst == Byte.class) {
+            return (byte) (value);
+        }
+        if (dst == boolean.class || dst == Boolean.class) {
+            return ((value % 29) & 1) == 0;
+        }
+        return null;
+    }
+
+    /**
+     * Routine used to obtain a randomly generated method type.
+     *
+     * @param arity Arity of returned method type.
+     * @return MethodType generated randomly.
+     */
+    public static MethodType randomMethodTypeGenerator(int arity) {
+        final Class<?>[] CLASSES = {
+            Object.class,
+            int.class,
+            boolean.class,
+            byte.class,
+            short.class,
+            char.class,
+            long.class,
+            float.class,
+            double.class
+        };
+        if (arity > MAX_ARITY) {
+            throw new IllegalArgumentException(
+                    String.format("Arity should not exceed %d!", MAX_ARITY));
+        }
+        List<Class<?>> list = randomClasses(CLASSES, arity);
+        list = getParams(list, false, arity);
+        int i = RNG.nextInt(CLASSES.length + 1);
+        Class<?> rtype = i == CLASSES.length ? void.class : CLASSES[i];
+        return MethodType.methodType(rtype, list);
+    }
+}
--- a/jdk/test/java/math/BigDecimal/StringConstructor.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/math/BigDecimal/StringConstructor.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main StringConstructor
  * @bug 4103117 4331084 4488017 4490929 6255285 6268365 8074460 8078672
  * @summary Tests the BigDecimal string constructor (use -Dseed=X to set PRNG seed).
@@ -33,7 +32,7 @@
 
 import java.math.*;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class StringConstructor {
 
--- a/jdk/test/java/math/BigInteger/BigIntegerTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/math/BigInteger/BigIntegerTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2015, 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
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main BigIntegerTest
  * @bug 4181191 4161971 4227146 4194389 4823171 4624738 4812225 4837946 4026465 8074460 8078672 8032027
  * @summary tests methods in BigInteger (use -Dseed=X to set PRNG seed)
@@ -47,7 +46,7 @@
 import java.util.stream.IntStream;
 import java.util.stream.LongStream;
 import java.util.stream.Stream;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * This is a simple test class created to ensure that the results
--- a/jdk/test/java/math/BigInteger/ModPow65537.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/math/BigInteger/ModPow65537.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main ModPow65537
  * @bug 4891312 8074460 8078672
  * @summary verify that modPow() not broken by the special case for 65537 (use -Dseed=X to set PRNG seed)
@@ -37,7 +36,7 @@
 import java.security.*;
 import java.security.spec.*;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class ModPow65537 {
 
--- a/jdk/test/java/math/BigInteger/PrimeTest.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/math/BigInteger/PrimeTest.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main PrimeTest
  * @bug 8026236 8074460 8078672
  * @summary test primality verification methods in BigInteger (use -Dseed=X to set PRNG seed)
@@ -40,7 +39,7 @@
 import java.util.Set;
 import java.util.SplittableRandom;
 import java.util.TreeSet;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 import static java.util.stream.Collectors.toCollection;
 import static java.util.stream.Collectors.toList;
 
--- a/jdk/test/java/math/BigInteger/SymmetricRangeTests.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/math/BigInteger/SymmetricRangeTests.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,8 +24,7 @@
 /*
  * @test
  * @ignore This test has huge memory requirements
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main/timeout=180/othervm -Xmx8g SymmetricRangeTests
  * @bug 6910473 8021204 8021203 9005933 8074460 8078672
  * @summary Test range of BigInteger values (use -Dseed=X to set PRNG seed)
@@ -40,7 +39,7 @@
 import java.util.Arrays;
 import java.math.BigInteger;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class SymmetricRangeTests {
 
--- a/jdk/test/java/net/Socket/OldSocketImpl.sh	Wed May 31 17:49:11 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-#
-# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 6449565
-# @run shell/timeout=140 OldSocketImpl.sh
-# @summary Pre-1.4 SocketImpl no longer supported
-
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux | Darwin | AIX )
-    PS=":"
-    FS="/"
-    ;;
-  CYGWIN* )
-    PS=";"
-    FS="/"
-    ;;
-  Windows* )
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-# no need to compile the test. It is already compiled
-# with 1.3 and in OldStyleImpl.jar
-
-# run
-${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -cp ${TESTSRC}${FS}OldSocketImpl.jar OldSocketImpl
-result=$?
-if [ "$result" -ne "0" ]; then
-    exit 1
-fi
-
-# no failures, exit.
-exit 0
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/Socket/OldSocketImplTestDriver.java	Wed Jul 05 23:33:24 2017 +0200
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import jdk.test.lib.process.ProcessTools;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * @test
+ * @bug 6449565
+ * @library /test/lib
+ * @build jdk.test.lib.process.ProcessTools
+ * @run main OldSocketImplTestDriver
+ * @summary Test driver for OdlSocketImpl
+ */
+public class OldSocketImplTestDriver {
+    public static void main(String[] args) throws Throwable {
+        Path jar = Paths.get(System.getProperty("test.src"),
+                "OldSocketImpl.jar");
+        ProcessTools.executeTestJava("-cp", jar.toString(), "OldSocketImpl")
+                    .outputTo(System.out)
+                    .errorTo(System.out)
+                    .shouldHaveExitValue(0);
+    }
+}
--- a/jdk/test/java/net/URL/B5086147.java	Wed May 31 17:49:11 2017 +0000
+++ b/jdk/test/java/net/URL/B5086147.java	Wed Jul 05 23:33:24 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ *