Merge from default ihse-manpages-branch
authorihse
Mon, 03 Dec 2018 10:08:18 +0100
branchihse-manpages-branch
changeset 57049 d13c49f43710
parent 57048 b2ed864c52b5 (current diff)
parent 52793 df065f8356d7 (diff)
child 57050 746a7ee75caa
Merge from default
make/CompileToolsJdk.gmk
make/Docs.gmk
make/Images.gmk
make/Main.gmk
make/common/Modules.gmk
make/common/ProcessMarkdown.gmk
make/conf/jib-profiles.js
make/devkit/createPandocBundle.sh
make/launcher/LauncherCommon.gmk
make/nashorn/package-list
make/scripts/pandoc-manpage-filter.js
make/scripts/pandoc-manpage-filter.sh.template
src/java.base/share/man/java.1
test/jdk/java/awt/Choice/ChoiceKeyEventReaction/ChoiceKeyEventReaction.html
test/jdk/lib/testlibrary/ExtendedRobot.java
test/jdk/lib/testlibrary/jdk/testlibrary/OptimalCapacity.java
--- a/.hgtags	Mon Nov 26 19:05:55 2018 +0100
+++ b/.hgtags	Mon Dec 03 10:08:18 2018 +0100
@@ -524,3 +524,4 @@
 dc1f9dec2018a37fedba47d8a2aedef99faaec64 jdk-12+19
 40098289d5804c3b5e7074bc75501a81e70d9b0d jdk-12+20
 f8fb0c86f2b3d24294d39c5685a628e1beb14ba7 jdk-12+21
+732bec44c89e8b93a38296bf690f97b7230c5b6d jdk-12+22
--- a/doc/building.html	Mon Nov 26 19:05:55 2018 +0100
+++ b/doc/building.html	Mon Dec 03 10:08:18 2018 +0100
@@ -464,6 +464,10 @@
 <li><code>--with-jvm-features=&lt;feature&gt;[,&lt;feature&gt;...]</code> - Use the specified JVM features when building Hotspot. The list of features will be enabled on top of the default list. For the <code>custom</code> JVM variant, this default list is empty. A complete list of available JVM features can be found using <code>bash configure --help</code>.</li>
 <li><code>--with-target-bits=&lt;bits&gt;</code> - Create a target binary suitable for running on a <code>&lt;bits&gt;</code> platform. Use this to create 32-bit output on a 64-bit build platform, instead of doing a full cross-compile. (This is known as a <em>reduced</em> build.)</li>
 </ul>
+<p>On Linux, BSD and AIX, it is possible to override where Java by default searches for runtime/JNI libraries. This can be useful in situations where there is a special shared directory for system JNI libraries. This setting can in turn be overriden at runtime by setting the <code>java.library.path</code> property.</p>
+<ul>
+<li><code>--with-jni-libpath=&lt;path&gt;</code> - Use the specified path as a default when searching for runtime libraries.</li>
+</ul>
 <h4 id="configure-arguments-for-native-compilation">Configure Arguments for Native Compilation</h4>
 <ul>
 <li><code>--with-devkit=&lt;path&gt;</code> - Use this devkit for compilers, tools and resources</li>
--- a/doc/building.md	Mon Nov 26 19:05:55 2018 +0100
+++ b/doc/building.md	Mon Dec 03 10:08:18 2018 +0100
@@ -662,6 +662,14 @@
     platform, instead of doing a full cross-compile. (This is known as a
     *reduced* build.)
 
+On Linux, BSD and AIX, it is possible to override where Java by default
+searches for runtime/JNI libraries. This can be useful in situations where
+there is a special shared directory for system JNI libraries. This setting
+can in turn be overriden at runtime by setting the `java.library.path` property.
+
+  * `--with-jni-libpath=<path>` - Use the specified path as a default
+  when searching for runtime libraries.
+
 #### Configure Arguments for Native Compilation
 
   * `--with-devkit=<path>` - Use this devkit for compilers, tools and resources
--- a/make/Bundles.gmk	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/Bundles.gmk	Mon Dec 03 10:08:18 2018 +0100
@@ -262,6 +262,21 @@
 
 ################################################################################
 
+ifneq ($(filter jcov-bundles, $(MAKECMDGOALS)), )
+  JCOV_BUNDLE_FILES := $(call CacheFind, $(JCOV_IMAGE_DIR))
+
+  $(eval $(call SetupBundleFile, BUILD_JCOV_BUNDLE, \
+      BUNDLE_NAME := $(JCOV_BUNDLE_NAME), \
+      FILES := $(JCOV_BUNDLE_FILES), \
+      BASE_DIRS := $(JCOV_IMAGE_DIR), \
+      SUBDIR := $(JDK_BUNDLE_SUBDIR), \
+  ))
+
+  JCOV_TARGETS += $(BUILD_JCOV_BUNDLE)
+endif
+
+################################################################################
+
 # Hook to include the corresponding custom file, if present.
 $(eval $(call IncludeCustomExtension, Bundles.gmk))
 
@@ -270,5 +285,6 @@
 product-bundles: $(PRODUCT_TARGETS)
 test-bundles: $(TEST_TARGETS)
 docs-bundles: $(DOCS_TARGETS)
+jcov-bundles: $(JCOV_TARGETS)
 
-.PHONY: all default product-bundles test-bundles docs-bundles
+.PHONY: all default product-bundles test-bundles docs-bundles jcov-bundles
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/Coverage.gmk	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,56 @@
+#
+# Copyright (c) 2018, 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.
+
+include $(SPEC)
+include MakeBase.gmk
+
+################################################################################
+
+JCOV_INPUT_IMAGE_DIR :=
+
+ifneq ($(JCOV_INPUT_JDK), )
+  JCOV_INPUT_IMAGE_DIR := $(JCOV_INPUT_JDK)
+else
+  JCOV_INPUT_IMAGE_DIR := $(JDK_IMAGE_DIR)
+endif
+
+#moving instrumented jdk image in and out of jcov_temp because of CODETOOLS-7902299
+JCOV_TEMP := $(SUPPORT_OUTPUTDIR)/jcov_temp
+
+$(JCOV_IMAGE_DIR)/release: $(JCOV_INPUT_IMAGE_DIR)/release
+	$(call LogWarn, Creating instrumented jdk image with JCov)
+	$(call MakeDir, $(JCOV_TEMP) $(IMAGES_OUTPUTDIR))
+	$(RM) -r $(JCOV_IMAGE_DIR) $(JCOV_TEMP)/*
+	$(CP) -r $(JCOV_INPUT_IMAGE_DIR) $(JCOV_TEMP)/$(JCOV_IMAGE_SUBDIR)
+	$(JAVA) -Xmx3g -jar $(JCOV_HOME)/lib/jcov.jar JREInstr \
+	    -t $(JCOV_TEMP)/$(JCOV_IMAGE_SUBDIR)/template.xml \
+	    -rt $(JCOV_HOME)/lib/jcov_network_saver.jar \
+	    -exclude 'java.lang.Object' \
+	    -exclude 'jdk.internal.org.objectweb.**' \
+	    -exclude jdk.test.Main -exclude '**\$Proxy*' \
+	    $(JCOV_TEMP)/$(JCOV_IMAGE_SUBDIR)
+	$(MV) $(JCOV_TEMP)/$(JCOV_IMAGE_SUBDIR) $(JCOV_IMAGE_DIR)
+	$(RMDIR) $(JCOV_TEMP)
+
+jcov-image: $(JCOV_IMAGE_DIR)/release
--- a/make/Main.gmk	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/Main.gmk	Mon Dec 03 10:08:18 2018 +0100
@@ -371,10 +371,15 @@
 exploded-image-optimize:
 	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f ExplodedImageOptimize.gmk)
 
+ifeq ($(JCOV_ENABLED), true)
+  jcov-image:
+	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Coverage.gmk jcov-image)
+endif
+
 ALL_TARGETS += store-source-revision create-source-revision-tracker bootcycle-images zip-security \
     zip-source jrtfs-jar jdk-image legacy-jre-image \
     symbols-image mac-jdk-bundle mac-legacy-jre-bundle \
-    release-file exploded-image-optimize
+    release-file exploded-image-optimize jcov-image
 
 ################################################################################
 # Docs targets
@@ -577,7 +582,12 @@
 docs-bundles:
 	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Bundles.gmk docs-bundles)
 
-ALL_TARGETS += product-bundles test-bundles docs-bundles
+ifeq ($(JCOV_ENABLED), true)
+  jcov-bundles:
+	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Bundles.gmk jcov-bundles)
+endif
+
+ALL_TARGETS += product-bundles test-bundles docs-bundles jcov-bundles
 
 ################################################################################
 # Install targets
@@ -820,6 +830,10 @@
   mac-jdk-bundle: jdk-image
   mac-legacy-jre-bundle: legacy-jre-image
 
+  ifeq ($(JCOV_INPUT_JDK), )
+    jcov-image: jdk-image
+  endif
+
   # The optimize target can run as soon as the modules dir has been completely
   # populated (java, copy and gendata targets) and the basic libs and launchers
   # have been built.
@@ -900,6 +914,8 @@
 
   docs-bundles: docs-image
 
+  jcov-bundles: jcov-image
+
   generate-summary: jmods buildtools-modules
 
   update-x11wrappers: java.base-copy buildtools-jdk
--- a/make/RunTests.gmk	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/RunTests.gmk	Mon Dec 03 10:08:18 2018 +0100
@@ -135,9 +135,11 @@
     $1_LD := $$(LD)
   endif
 
+  # Create jaotc flags.
+  # VM flags which don't affect AOT code generation are filtered out: -Xcomp, -XX:+-TieredCompilation
   $1_JAOTC_OPTS := \
       -J-Xmx4g --info \
-      $$(addprefix -J, $$($1_VM_OPTIONS)) \
+      $$(addprefix -J, $$(filter-out -Xcomp %TieredCompilation, $$($1_VM_OPTIONS))) \
       $$(addprefix --compile-commands$(SPACE), $$($1_AOT_CCLIST)) \
       --linker-path $$($1_LD) \
       #
--- a/make/autoconf/flags-other.m4	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/autoconf/flags-other.m4	Mon Dec 03 10:08:18 2018 +0100
@@ -119,6 +119,12 @@
   # Misuse EXTRA_CFLAGS to mimic old behavior
   $2JVM_ASFLAGS="$JVM_BASIC_ASFLAGS ${$2EXTRA_CFLAGS}"
 
+  if test "x$1" = "xTARGET" && \
+      test "x$TOOLCHAIN_TYPE" = xgcc && \
+      test "x$OPENJDK_TARGET_CPU" = xarm; then
+    $2JVM_ASFLAGS="${$2JVM_ASFLAGS} $ARM_ARCH_TYPE_ASFLAGS $ARM_FLOAT_TYPE_ASFLAGS"
+  fi
+
   AC_SUBST($2JVM_ASFLAGS)
 ])
 
--- a/make/autoconf/flags.m4	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/autoconf/flags.m4	Mon Dec 03 10:08:18 2018 +0100
@@ -46,41 +46,59 @@
     AC_MSG_CHECKING([for ABI profle])
     AC_MSG_RESULT([$OPENJDK_TARGET_ABI_PROFILE])
 
+    # --- Arm-sflt CFLAGS and ASFLAGS ---
+    # Armv5te is required for assembler, because pld insn used in arm32 hotspot is only in v5E and above.
+    # However, there is also a GCC bug which generates unaligned strd/ldrd instructions on armv5te:
+    # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82445, and it was fixed only quite recently.
+    # The resulting compromise is to enable v5TE for assembler and let GCC generate code for v5T.
     if test "x$OPENJDK_TARGET_ABI_PROFILE" = xarm-vfp-sflt; then
       ARM_FLOAT_TYPE=vfp-sflt
       ARM_ARCH_TYPE_FLAGS='-march=armv7-a -mthumb'
+      ARM_ARCH_TYPE_ASFLAGS='-march=armv7-a -mthumb'
     elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarm-vfp-hflt; then
       ARM_FLOAT_TYPE=vfp-hflt
       ARM_ARCH_TYPE_FLAGS='-march=armv7-a -mthumb'
+      ARM_ARCH_TYPE_ASFLAGS='-march=armv7-a -mthumb'
     elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarm-sflt; then
       ARM_FLOAT_TYPE=sflt
       ARM_ARCH_TYPE_FLAGS='-march=armv5t -marm'
+      ARM_ARCH_TYPE_ASFLAGS='-march=armv5te'
     elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarmv5-vfp-sflt; then
       ARM_FLOAT_TYPE=vfp-sflt
       ARM_ARCH_TYPE_FLAGS='-march=armv5t -marm'
+      ARM_ARCH_TYPE_ASFLAGS='-march=armv5te'
     elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarmv6-vfp-hflt; then
       ARM_FLOAT_TYPE=vfp-hflt
       ARM_ARCH_TYPE_FLAGS='-march=armv6 -marm'
+      ARM_ARCH_TYPE_ASFLAGS='-march=armv6'
     elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xaarch64; then
       # No special flags, just need to trigger setting JDK_ARCH_ABI_PROP_NAME
       ARM_FLOAT_TYPE=
       ARM_ARCH_TYPE_FLAGS=
+      ARM_ARCH_TYPE_ASFLAGS=
     else
       AC_MSG_ERROR([Invalid ABI profile: "$OPENJDK_TARGET_ABI_PROFILE"])
     fi
 
     if test "x$ARM_FLOAT_TYPE" = xvfp-sflt; then
       ARM_FLOAT_TYPE_FLAGS='-mfloat-abi=softfp -mfpu=vfp -DFLOAT_ARCH=-vfp-sflt'
+      ARM_FLOAT_TYPE_ASFLAGS="-mfloat-abi=softfp -mfpu=vfp"
     elif test "x$ARM_FLOAT_TYPE" = xvfp-hflt; then
       ARM_FLOAT_TYPE_FLAGS='-mfloat-abi=hard -mfpu=vfp -DFLOAT_ARCH=-vfp-hflt'
+      ARM_FLOAT_TYPE_ASFLAGS="-mfloat-abi=hard -mfpu=vfp"
     elif test "x$ARM_FLOAT_TYPE" = xsflt; then
       ARM_FLOAT_TYPE_FLAGS='-msoft-float -mfpu=vfp'
+      ARM_FLOAT_TYPE_ASFLAGS="-mfloat-abi=soft -mfpu=vfp"
     fi
     AC_MSG_CHECKING([for $ARM_FLOAT_TYPE floating point flags])
     AC_MSG_RESULT([$ARM_FLOAT_TYPE_FLAGS])
+    AC_MSG_CHECKING([for $ARM_FLOAT_TYPE floating point flags for assembler])
+    AC_MSG_RESULT([$ARM_FLOAT_TYPE_ASFLAGS])
 
     AC_MSG_CHECKING([for arch type flags])
     AC_MSG_RESULT([$ARM_ARCH_TYPE_FLAGS])
+    AC_MSG_CHECKING([for arch type flags for assembler])
+    AC_MSG_RESULT([$ARM_ARCH_TYPE_ASFLAGS])
 
     # Now set JDK_ARCH_ABI_PROP_NAME. This is equivalent to the last part of the
     # autoconf target triplet.
--- a/make/autoconf/jdk-options.m4	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/autoconf/jdk-options.m4	Mon Dec 03 10:08:18 2018 +0100
@@ -244,6 +244,28 @@
     COPYRIGHT_YEAR=`$DATE +'%Y'`
   fi
   AC_SUBST(COPYRIGHT_YEAR)
+
+  # Override default library path
+  AC_ARG_WITH([jni-libpath], [AS_HELP_STRING([--with-jni-libpath],
+      [override default JNI library search path])])
+  AC_MSG_CHECKING([for jni library path])
+  if test "x${with_jni_libpath}" = "x" || test "x${with_jni_libpath}" = "xno"; then
+    AC_MSG_RESULT([default])
+  elif test "x${with_jni_libpath}" = "xyes"; then
+    AC_MSG_RESULT([invalid])
+    AC_MSG_ERROR([The --with-jni-libpath option requires an argument.])
+  else
+    HOTSPOT_OVERRIDE_LIBPATH=${with_jni_libpath}
+    if test "x$OPENJDK_TARGET_OS" != "xlinux" &&
+         test "x$OPENJDK_TARGET_OS" != "xbsd" &&
+         test "x$OPENJDK_TARGET_OS" != "xaix"; then
+      AC_MSG_RESULT([fail])
+      AC_MSG_ERROR([Overriding JNI library path is supported only on Linux, BSD and AIX.])
+    fi
+    AC_MSG_RESULT(${HOTSPOT_OVERRIDE_LIBPATH})
+  fi
+  AC_SUBST(HOTSPOT_OVERRIDE_LIBPATH)
+
 ])
 
 ###############################################################################
@@ -373,8 +395,37 @@
   elif test "x$enable_native_coverage" != "x"; then
     AC_MSG_ERROR([--enable-native-coverage can only be assigned "yes" or "no"])
   fi
+  AC_SUBST(GCOV_ENABLED)
 
-  AC_SUBST(GCOV_ENABLED)
+  AC_ARG_WITH(jcov, [AS_HELP_STRING([--with-jcov],
+      [jcov library location])])
+  AC_ARG_WITH(jcov-input-jdk, [AS_HELP_STRING([--with-jcov-input-jdk],
+      [jdk image to instrument])])
+  JCOV_HOME=
+  JCOV_INPUT_JDK=
+  JCOV_ENABLED=
+  if test "x$with_jcov" = "x" ; then
+    JCOV_ENABLED="false"
+  else
+    JCOV_HOME="$with_jcov"
+    if test ! -f "$JCOV_HOME/lib/jcov.jar"; then
+      AC_MSG_RESULT([fail])
+      AC_MSG_ERROR([Invalid JCov bundle: "$JCOV_HOME/lib/jcov.jar" does not exist])
+    fi
+    JCOV_ENABLED="true"
+    BASIC_FIXUP_PATH(JCOV_HOME)
+    if test "x$with_jcov_input_jdk" != "x" ; then
+      JCOV_INPUT_JDK="$with_jcov_input_jdk"
+      if test ! -f "$JCOV_INPUT_JDK/bin/java$EXE_SUFFIX"; then
+        AC_MSG_RESULT([fail])
+        AC_MSG_ERROR([Invalid JDK bundle: "$JCOV_INPUT_JDK/bin/java$EXE_SUFFIX" does not exist])
+      fi
+      BASIC_FIXUP_PATH(JCOV_INPUT_JDK)
+    fi
+  fi
+  AC_SUBST(JCOV_ENABLED)
+  AC_SUBST(JCOV_HOME)
+  AC_SUBST(JCOV_INPUT_JDK)
 ])
 
 ###############################################################################
--- a/make/autoconf/jdk-version.m4	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/autoconf/jdk-version.m4	Mon Dec 03 10:08:18 2018 +0100
@@ -91,7 +91,9 @@
     AC_MSG_ERROR([--with-vendor-url must have a value])
   elif [ ! [[ $with_vendor_url =~ ^[[:print:]]*$ ]] ]; then
     AC_MSG_ERROR([--with-vendor-url contains non-printing characters: $with_vendor_url])
-  else
+  elif test "x$with_vendor_url" != x; then
+    # Only set VENDOR_URL if '--with-vendor-url' was used and is not empty.
+    # Otherwise we will use the value from "version-numbers" included above.
     VENDOR_URL="$with_vendor_url"
   fi
   AC_SUBST(VENDOR_URL)
@@ -103,7 +105,9 @@
     AC_MSG_ERROR([--with-vendor-bug-url must have a value])
   elif [ ! [[ $with_vendor_bug_url =~ ^[[:print:]]*$ ]] ]; then
     AC_MSG_ERROR([--with-vendor-bug-url contains non-printing characters: $with_vendor_bug_url])
-  else
+  elif test "x$with_vendor_bug_url" != x; then
+    # Only set VENDOR_URL_BUG if '--with-vendor-bug-url' was used and is not empty.
+    # Otherwise we will use the value from "version-numbers" included above.
     VENDOR_URL_BUG="$with_vendor_bug_url"
   fi
   AC_SUBST(VENDOR_URL_BUG)
--- a/make/autoconf/lib-x11.m4	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/autoconf/lib-x11.m4	Mon Dec 03 10:08:18 2018 +0100
@@ -101,7 +101,9 @@
 
     HEADERS_TO_CHECK="X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h X11/Intrinsic.h"
     # There is no Xrandr extension on AIX
-    if test "x$OPENJDK_TARGET_OS" != xaix; then
+    if test "x$OPENJDK_TARGET_OS" = xaix; then
+      X_CFLAGS="$X_CFLAGS -DNO_XRANDR"
+    else
       HEADERS_TO_CHECK="$HEADERS_TO_CHECK X11/extensions/Xrandr.h"
     fi
 
--- a/make/autoconf/spec.gmk.in	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/autoconf/spec.gmk.in	Mon Dec 03 10:08:18 2018 +0100
@@ -228,7 +228,8 @@
   # Only export "VENDOR" to the build if COMPANY_NAME contains a real value.
   # Otherwise the default value for VENDOR, which is used to set the "java.vendor"
   # and "java.vm.vendor" properties is hard-coded into the source code (i.e. in
-  # System.c in the jdk for "vm.vendor" and vm_version.cpp in the VM for "java.vm.vendor")
+  # VersionProps.java.template in the jdk for "vm.vendor" and
+  # vm_version.cpp in the VM for "java.vm.vendor")
   ifneq ($(COMPANY_NAME), N/A)
     VERSION_CFLAGS += -DVENDOR='"$(COMPANY_NAME)"'
   endif
@@ -274,6 +275,9 @@
 # Control wether Hotspot builds gtest tests
 BUILD_GTEST := @BUILD_GTEST@
 
+# Allow overriding the default hotspot library path
+HOTSPOT_OVERRIDE_LIBPATH := @HOTSPOT_OVERRIDE_LIBPATH@
+
 # Control use of precompiled header in hotspot libjvm build
 USE_PRECOMPILED_HEADER := @USE_PRECOMPILED_HEADER@
 
@@ -368,6 +372,9 @@
 UNLIMITED_CRYPTO=@UNLIMITED_CRYPTO@
 
 GCOV_ENABLED=@GCOV_ENABLED@
+JCOV_ENABLED=@JCOV_ENABLED@
+JCOV_HOME=@JCOV_HOME@
+JCOV_INPUT_JDK=@JCOV_INPUT_JDK@
 
 # AddressSanitizer
 export ASAN_ENABLED:=@ASAN_ENABLED@
@@ -835,10 +842,12 @@
 # Images directory definitions
 JDK_IMAGE_SUBDIR:=jdk
 JRE_IMAGE_SUBDIR:=jre
+JCOV_IMAGE_SUBDIR := jdk-jcov
 
 # Colon left out to be able to override output dir for bootcycle-images
 JDK_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(JDK_IMAGE_SUBDIR)
 JRE_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(JRE_IMAGE_SUBDIR)
+JCOV_IMAGE_DIR = $(IMAGES_OUTPUTDIR)/$(JCOV_IMAGE_SUBDIR)
 
 # Test image, as above
 TEST_IMAGE_SUBDIR:=test
@@ -885,12 +894,14 @@
 TEST_DEMOS_BUNDLE_NAME := jdk-$(BASE_NAME)_bin-tests-demos$(DEBUG_PART).tar.gz
 TEST_BUNDLE_NAME := jdk-$(BASE_NAME)_bin-tests$(DEBUG_PART).tar.gz
 DOCS_BUNDLE_NAME := jdk-$(BASE_NAME)_doc-api-spec$(DEBUG_PART).tar.gz
+JCOV_BUNDLE_NAME := jdk-jcov-$(BASE_NAME)_bin$(DEBUG_PART).$(JDK_BUNDLE_EXTENSION)
 
 JDK_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JDK_BUNDLE_NAME)
 JDK_SYMBOLS_BUNDLE :=  $(BUNDLES_OUTPUTDIR)/$(JDK_SYMBOLS_BUNDLE_NAME)
 TEST_DEMOS_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(TEST_DEMOS_BUNDLE_NAME)
 TEST_BUNDLE :=  $(BUNDLES_OUTPUTDIR)/$(TEST_BUNDLE_NAME)
 DOCS_BUNDLE :=  $(BUNDLES_OUTPUTDIR)/$(DOCS_BUNDLE_NAME)
+JCOV_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JCOV_BUNDLE_NAME)
 
 # This macro is called to allow inclusion of closed source counterparts.
 # Unless overridden in closed sources, it expands to nothing.
--- a/make/autoconf/version-numbers	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/autoconf/version-numbers	Mon Dec 03 10:08:18 2018 +0100
@@ -43,6 +43,8 @@
 JDK_RC_PLATFORM_NAME=Platform
 COMPANY_NAME=N/A
 HOTSPOT_VM_DISTRO="OpenJDK"
+VENDOR_URL=https://openjdk.java.net/
+VENDOR_URL_BUG=https://bugreport.java.com/bugreport/
 
 # Might need better names for these
 MACOSX_BUNDLE_NAME_BASE="OpenJDK"
--- a/make/common/ProcessMarkdown.gmk	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/common/ProcessMarkdown.gmk	Mon Dec 03 10:08:18 2018 +0100
@@ -76,7 +76,7 @@
   $1_$2_VARDEPS_FILE := $$(call DependOnVariable, $1_$2_VARDEPS, \
       $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER).vardeps)
 
-$$($1_$2_PANDOC_OUTPUT): $$($1_$2_PANDOC_INPUT) $$($1_$2_VARDEPS_FILE) $$($1_EXTRA_DEPS)
+  $$($1_$2_PANDOC_OUTPUT): $$($1_$2_PANDOC_INPUT) $$($1_$2_VARDEPS_FILE) $$($1_EXTRA_DEPS)
 	$$(call LogInfo, Converting $2 to $$($1_FORMAT))
 	$$(call MakeDir, $$(SUPPORT_OUTPUTDIR)/markdown $$(dir $$($1_$2_PANDOC_OUTPUT)))
 	$$(call ExecuteWithLog, $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER), \
@@ -95,7 +95,7 @@
   # If we have no post processing, PANDOC_OUTPUT is set to OUTPUT_FILE. Otherwise
   # PANDOC_OUTPUT is a temporary file, and we must now create the real OUTPUT_FILE.
   ifneq ($$($1_POST_PROCESS), )
-$$($1_$2_OUTPUT_FILE): $$($1_$2_PANDOC_OUTPUT)
+    $$($1_$2_OUTPUT_FILE): $$($1_$2_PANDOC_OUTPUT)
 	$$(call LogInfo, Post-processing markdown file $2)
 	$$(call MakeDir, $$(SUPPORT_OUTPUTDIR)/markdown $$($1_$2_TARGET_DIR))
 	$$(call ExecuteWithLog, $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER)_post, \
--- a/make/conf/jib-profiles.js	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/conf/jib-profiles.js	Mon Dec 03 10:08:18 2018 +0100
@@ -243,7 +243,7 @@
 
     // These are the base setttings for all the main build profiles.
     common.main_profile_base = {
-        dependencies: ["boot_jdk", "gnumake", "jtreg", "jib", "autoconf", "jmh"],
+        dependencies: ["boot_jdk", "gnumake", "jtreg", "jib", "autoconf", "jmh", "jcov"],
         default_make_targets: ["product-bundles", "test-bundles"],
         configure_args: concat(["--enable-jtreg-failure-handler"],
             "--with-exclude-translations=de,es,fr,it,ko,pt_BR,sv,ca,tr,cs,sk,ja_JP_A,ja_JP_HA,ja_JP_HI,ja_JP_I,zh_TW,zh_HK",
@@ -898,6 +898,14 @@
             revision: "1.21+1.0"
         },
 
+        jcov: {
+            server: "jpg",
+            product: "jcov",
+            version: "3.0",
+            build_number: "b07",
+            file: "bundles/jcov-3_0.zip",
+        },
+
         gnumake: {
             organization: common.organization,
             ext: "tar.gz",
--- a/make/data/charsetmapping/IBM970.c2b	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/data/charsetmapping/IBM970.c2b	Mon Dec 03 10:08:18 2018 +0100
@@ -5,14 +5,3 @@
 A2A6       FF5E
 A2C1       2299
 A3DC       20A9
-#
-# see .map file for the info regarding following 3 entries
-#
-a1aa	6950
-a1a9	84f1
-a1ad	cf7f
-
-
-
-
-
--- a/make/data/charsetmapping/IBM970.map	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/data/charsetmapping/IBM970.map	Mon Dec 03 10:08:18 2018 +0100
@@ -1,15 +1,6 @@
 #
 #    source: Cp970.b2c, which is identical(?) to 03CA34B0.TPMAP100
 #
-#    Warning:
-#        following 3 c->b only entries exist in the "old" implementation,
-#        they don't appear existing in any of of the cdc 970 tables. Added
-#        them into c2b for "compatibility
-#        6950  ->  a1aa    2014
-#        84f1  ->  a1a9    2010
-#        cf7f  ->  a1ad    301c
-#
-#
 00         0000			
 01         0001			
 02         0002			
@@ -294,6 +285,7 @@
 A2BE       2665			
 A2BF       2667			
 A2C0       2663			
+A2C1       25C9			
 A2C2       25C8			
 A2C3       25A3			
 A2C4       25D0			
--- a/make/data/lsrdata/language-subtag-registry.txt	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/data/lsrdata/language-subtag-registry.txt	Mon Dec 03 10:08:18 2018 +0100
@@ -1,4 +1,4 @@
-File-Date: 2018-04-23
+File-Date: 2018-10-31
 %%
 Type: language
 Subtag: aa
@@ -3351,7 +3351,7 @@
 %%
 Type: language
 Subtag: aue
-Description: =/Kx'au//'ein
+Description: ǂKxʼauǁʼein
 Added: 2009-07-29
 Deprecated: 2015-02-12
 Preferred-Value: ktz
@@ -9812,6 +9812,12 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: dno
+Description: Ndrulo
+Description: Northern Lendu
+Added: 2018-10-28
+%%
+Type: language
 Subtag: dnr
 Description: Danaru
 Added: 2009-07-29
@@ -10338,6 +10344,11 @@
 Added: 2016-05-30
 %%
 Type: language
+Subtag: dwz
+Description: Dewas Rai
+Added: 2018-10-28
+%%
+Type: language
 Subtag: dya
 Description: Dyan
 Added: 2009-07-29
@@ -12022,7 +12033,7 @@
 %%
 Type: language
 Subtag: gfx
-Description: Mangetti Dune !Xung
+Description: Mangetti Dune ǃXung
 Added: 2012-08-12
 Deprecated: 2015-02-12
 Preferred-Value: vaj
@@ -12328,7 +12339,6 @@
 Type: language
 Subtag: gku
 Description: ǂUngkue
-Description: =/Ungkue
 Added: 2015-02-12
 %%
 Type: language
@@ -12523,7 +12533,6 @@
 %%
 Type: language
 Subtag: gnk
-Description: //Gana
 Description: ǁGana
 Added: 2009-07-29
 %%
@@ -13156,7 +13165,6 @@
 %%
 Type: language
 Subtag: gwj
-Description: /Gwi
 Description: ǀGwi
 Added: 2009-07-29
 %%
@@ -13489,7 +13497,6 @@
 %%
 Type: language
 Subtag: hgm
-Description: Hai//om
 Description: Haiǁom
 Added: 2009-07-29
 %%
@@ -13833,7 +13840,6 @@
 %%
 Type: language
 Subtag: hnh
-Description: //Ani
 Description: ǁAni
 Added: 2009-07-29
 %%
@@ -14113,7 +14119,6 @@
 %%
 Type: language
 Subtag: huc
-Description: =/Hua
 Description: ǂHua
 Added: 2009-07-29
 %%
@@ -18425,7 +18430,6 @@
 %%
 Type: language
 Subtag: ktz
-Description: Ju/'hoan
 Description: Juǀʼhoan
 Description: Juǀʼhoansi
 Added: 2009-07-29
@@ -24926,7 +24930,6 @@
 %%
 Type: language
 Subtag: ngh
-Description: N/u
 Description: Nǀu
 Added: 2009-07-29
 %%
@@ -25641,7 +25644,6 @@
 %%
 Type: language
 Subtag: nmn
-Description: !Xóõ
 Description: ǃXóõ
 Added: 2009-07-29
 %%
@@ -27613,7 +27615,7 @@
 %%
 Type: language
 Subtag: oun
-Description: !O!ung
+Description: ǃOǃung
 Added: 2009-07-29
 Deprecated: 2015-02-12
 Preferred-Value: vaj
@@ -36667,7 +36669,6 @@
 Type: language
 Subtag: vaj
 Description: Sekele
-Description: Northwestern !Kung
 Description: Northwestern ǃKung
 Description: Vasekele
 Added: 2009-07-29
@@ -38299,7 +38300,6 @@
 %%
 Type: language
 Subtag: xam
-Description: /Xam
 Description: ǀXam
 Added: 2009-07-29
 %%
@@ -38559,7 +38559,6 @@
 %%
 Type: language
 Subtag: xeg
-Description: //Xegwi
 Description: ǁXegwi
 Added: 2009-07-29
 %%
@@ -44036,6 +44035,11 @@
 Added: 2010-08-16
 %%
 Type: script
+Subtag: Elym
+Description: Elymaic
+Added: 2018-10-28
+%%
+Type: script
 Subtag: Ethi
 Description: Ethiopic
 Description: Geʻez
@@ -44432,6 +44436,11 @@
 Added: 2005-10-16
 %%
 Type: script
+Subtag: Nand
+Description: Nandinagari
+Added: 2018-10-28
+%%
+Type: script
 Subtag: Narb
 Description: Old North Arabian
 Description: Ancient North Arabian
@@ -46032,6 +46041,8 @@
 %%
 Type: region
 Subtag: SZ
+Description: Eswatini
+Description: eSwatini
 Description: Swaziland
 Added: 2005-10-16
 %%
--- a/make/gensrc/GensrcMisc.gmk	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/gensrc/GensrcMisc.gmk	Mon Dec 03 10:08:18 2018 +0100
@@ -40,7 +40,12 @@
         @@VERSION_BUILD@@ => $(VERSION_BUILD) ; \
         @@VERSION_OPT@@ => $(VERSION_OPT) ; \
         @@VERSION_DATE@@ => $(VERSION_DATE) ; \
-        @@VENDOR_VERSION_STRING@@ => $(VENDOR_VERSION_STRING), \
+        @@VERSION_CLASSFILE_MAJOR@@ => $(VERSION_CLASSFILE_MAJOR) ; \
+        @@VERSION_CLASSFILE_MINOR@@ => $(VERSION_CLASSFILE_MINOR) ; \
+        @@VENDOR_VERSION_STRING@@ => $(VENDOR_VERSION_STRING) ; \
+        @@VENDOR@@ => $(COMPANY_NAME) ; \
+        @@VENDOR_URL@@ => $(VENDOR_URL) ; \
+        @@VENDOR_URL_BUG@@ => $(VENDOR_URL_BUG), \
 ))
 
 GENSRC_JAVA_BASE += $(BUILD_VERSION_JAVA)
--- a/make/hotspot/lib/JvmFlags.gmk	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/hotspot/lib/JvmFlags.gmk	Mon Dec 03 10:08:18 2018 +0100
@@ -95,3 +95,7 @@
 ifeq ($(USE_PRECOMPILED_HEADER), false)
   JVM_CFLAGS += -DDONT_USE_PRECOMPILED_HEADER
 endif
+
+ifneq ($(HOTSPOT_OVERRIDE_LIBPATH), )
+  JVM_CFLAGS += -DOVERRIDE_LIBPATH='"$(HOTSPOT_OVERRIDE_LIBPATH)"'
+endif
--- a/make/hotspot/symbols/symbols-unix	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/hotspot/symbols/symbols-unix	Mon Dec 03 10:08:18 2018 +0100
@@ -121,6 +121,7 @@
 JVM_GetNestHost
 JVM_GetNestMembers
 JVM_GetPrimitiveArrayElement
+JVM_GetProperties
 JVM_GetProtectionDomain
 JVM_GetSimpleBinaryName
 JVM_GetStackAccessControlContext
@@ -132,7 +133,6 @@
 JVM_HasReferencePendingList
 JVM_HoldsLock
 JVM_IHashCode
-JVM_InitProperties
 JVM_InitStackTraceElement
 JVM_InitStackTraceElementArray
 JVM_InitializeFromArchive
--- a/make/lib/CoreLibraries.gmk	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/lib/CoreLibraries.gmk	Mon Dec 03 10:08:18 2018 +0100
@@ -102,7 +102,6 @@
     OPTIMIZATION := HIGH, \
     CFLAGS := $(CFLAGS_JDKLIB) \
         $(LIBJAVA_CFLAGS), \
-    System.c_CFLAGS := $(VERSION_CFLAGS), \
     jdk_util.c_CFLAGS := $(VERSION_CFLAGS), \
     EXTRA_HEADER_DIRS := libfdlibm, \
     WARNINGS_AS_ERRORS_xlc := false, \
--- a/make/nashorn/build.xml	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/nashorn/build.xml	Mon Dec 03 10:08:18 2018 +0100
@@ -278,7 +278,7 @@
       <arg value="${javadoc.option}"/>
       <fileset dir="${nashorn.module.src.dir}" includes="**/*.java"/>
       <fileset dir="${dynalink.module.src.dir}" includes="**/*.java"/>
-      <link offline="true" href="${javadoc.base.url}" packagelistLoc="${javadoc.pkg.list}"/>
+      <link offline="true" href="${javadoc.base.url}" packagelistLoc="${javadoc.element.list}"/>
     </javadoc>
   </target>
 
@@ -296,7 +296,7 @@
       <arg value="."/>
       <arg value="${javadoc.option}"/>
       <fileset dir="${nashorn.module.src.dir}" includes="jdk/nashorn/api/**/*.java"/>
-      <link offline="true" href="${javadoc.base.url}" packagelistLoc="${javadoc.pkg.list}"/>
+      <link offline="true" href="${javadoc.base.url}" packagelistLoc="${javadoc.element.list}"/>
     </javadoc>
   </target>
 
@@ -314,7 +314,7 @@
       <arg value="."/>
       <arg value="${javadoc.option}"/>
       <fileset dir="${dynalink.module.src.dir}" includes="**/*.java"/>
-      <link offline="true" href="${javadoc.base.url}" packagelistLoc="${javadoc.pkg.list}"/>
+      <link offline="true" href="${javadoc.base.url}" packagelistLoc="${javadoc.element.list}"/>
     </javadoc>
   </target>
 
@@ -835,8 +835,8 @@
 
     <!-- yui -->
     <mkdir dir="${test.external.dir}/yui"/>
-    <get src="http://yui.yahooapis.com/3.5.1/build/yui/yui.js" dest="${test.external.dir}/yui" skipexisting="true" ignoreerrors="true"/>
-    <get src="http://yui.yahooapis.com/3.5.1/build/yui/yui-min.js" dest="${test.external.dir}/yui" skipexisting="true" ignoreerrors="true"/>
+    <get src="http://yui.yahooapis.com/3.5.1/build/yui/yui.js" dest="${test.external.dir}/yui" skipexisting="true" ignoreerrors="true" tryGzipEncoding="true"/>
+    <get src="http://yui.yahooapis.com/3.5.1/build/yui/yui-min.js" dest="${test.external.dir}/yui" skipexisting="true" ignoreerrors="true" tryGzipEncoding="true"/>
 
     <!-- showdown -->
     <mkdir dir="${test.external.dir}/showdown"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/nashorn/element-list	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,282 @@
+module:java.base
+java.io
+java.lang
+java.lang.annotation
+java.lang.invoke
+java.lang.module
+java.lang.ref
+java.lang.reflect
+java.math
+java.net
+java.net.spi
+java.nio
+java.nio.channels
+java.nio.channels.spi
+java.nio.charset
+java.nio.charset.spi
+java.nio.file
+java.nio.file.attribute
+java.nio.file.spi
+java.security
+java.security.acl
+java.security.cert
+java.security.interfaces
+java.security.spec
+java.text
+java.text.spi
+java.time
+java.time.chrono
+java.time.format
+java.time.temporal
+java.time.zone
+java.util
+java.util.concurrent
+java.util.concurrent.atomic
+java.util.concurrent.locks
+java.util.function
+java.util.jar
+java.util.regex
+java.util.spi
+java.util.stream
+java.util.zip
+javax.crypto
+javax.crypto.interfaces
+javax.crypto.spec
+javax.net
+javax.net.ssl
+javax.security.auth
+javax.security.auth.callback
+javax.security.auth.login
+javax.security.auth.spi
+javax.security.auth.x500
+javax.security.cert
+module:java.compiler
+javax.annotation.processing
+javax.lang.model
+javax.lang.model.element
+javax.lang.model.type
+javax.lang.model.util
+javax.tools
+module:java.datatransfer
+java.awt.datatransfer
+module:java.desktop
+java.applet
+java.awt
+java.awt.color
+java.awt.desktop
+java.awt.dnd
+java.awt.event
+java.awt.font
+java.awt.geom
+java.awt.im
+java.awt.im.spi
+java.awt.image
+java.awt.image.renderable
+java.awt.print
+java.beans
+java.beans.beancontext
+javax.accessibility
+javax.imageio
+javax.imageio.event
+javax.imageio.metadata
+javax.imageio.plugins.bmp
+javax.imageio.plugins.jpeg
+javax.imageio.plugins.tiff
+javax.imageio.spi
+javax.imageio.stream
+javax.print
+javax.print.attribute
+javax.print.attribute.standard
+javax.print.event
+javax.sound.midi
+javax.sound.midi.spi
+javax.sound.sampled
+javax.sound.sampled.spi
+javax.swing
+javax.swing.border
+javax.swing.colorchooser
+javax.swing.event
+javax.swing.filechooser
+javax.swing.plaf
+javax.swing.plaf.basic
+javax.swing.plaf.metal
+javax.swing.plaf.multi
+javax.swing.plaf.nimbus
+javax.swing.plaf.synth
+javax.swing.table
+javax.swing.text
+javax.swing.text.html
+javax.swing.text.html.parser
+javax.swing.text.rtf
+javax.swing.tree
+javax.swing.undo
+module:java.instrument
+java.lang.instrument
+module:java.logging
+java.util.logging
+module:java.management
+java.lang.management
+javax.management
+javax.management.loading
+javax.management.modelmbean
+javax.management.monitor
+javax.management.openmbean
+javax.management.relation
+javax.management.remote
+javax.management.timer
+module:java.management.rmi
+javax.management.remote.rmi
+module:java.naming
+javax.naming
+javax.naming.directory
+javax.naming.event
+javax.naming.ldap
+javax.naming.spi
+module:java.net.http
+java.net.http
+module:java.prefs
+java.util.prefs
+module:java.rmi
+java.rmi
+java.rmi.activation
+java.rmi.dgc
+java.rmi.registry
+java.rmi.server
+javax.rmi.ssl
+module:java.scripting
+javax.script
+module:java.se
+module:java.security.jgss
+javax.security.auth.kerberos
+org.ietf.jgss
+module:java.security.sasl
+javax.security.sasl
+module:java.smartcardio
+javax.smartcardio
+module:java.sql
+java.sql
+javax.sql
+module:java.sql.rowset
+javax.sql.rowset
+javax.sql.rowset.serial
+javax.sql.rowset.spi
+module:java.transaction.xa
+javax.transaction.xa
+module:java.xml
+javax.xml
+javax.xml.catalog
+javax.xml.datatype
+javax.xml.namespace
+javax.xml.parsers
+javax.xml.stream
+javax.xml.stream.events
+javax.xml.stream.util
+javax.xml.transform
+javax.xml.transform.dom
+javax.xml.transform.sax
+javax.xml.transform.stax
+javax.xml.transform.stream
+javax.xml.validation
+javax.xml.xpath
+org.w3c.dom
+org.w3c.dom.bootstrap
+org.w3c.dom.events
+org.w3c.dom.ls
+org.w3c.dom.ranges
+org.w3c.dom.traversal
+org.w3c.dom.views
+org.xml.sax
+org.xml.sax.ext
+org.xml.sax.helpers
+module:java.xml.crypto
+javax.xml.crypto
+javax.xml.crypto.dom
+javax.xml.crypto.dsig
+javax.xml.crypto.dsig.dom
+javax.xml.crypto.dsig.keyinfo
+javax.xml.crypto.dsig.spec
+module:jdk.accessibility
+com.sun.java.accessibility.util
+module:jdk.attach
+com.sun.tools.attach
+com.sun.tools.attach.spi
+module:jdk.charsets
+module:jdk.compiler
+com.sun.source.doctree
+com.sun.source.tree
+com.sun.source.util
+com.sun.tools.javac
+module:jdk.crypto.cryptoki
+module:jdk.crypto.ec
+module:jdk.dynalink
+jdk.dynalink
+jdk.dynalink.beans
+jdk.dynalink.linker
+jdk.dynalink.linker.support
+jdk.dynalink.support
+module:jdk.editpad
+module:jdk.hotspot.agent
+module:jdk.httpserver
+com.sun.net.httpserver
+com.sun.net.httpserver.spi
+module:jdk.jartool
+com.sun.jarsigner
+jdk.security.jarsigner
+module:jdk.javadoc
+com.sun.javadoc
+com.sun.tools.javadoc
+jdk.javadoc.doclet
+module:jdk.jcmd
+module:jdk.jconsole
+com.sun.tools.jconsole
+module:jdk.jdeps
+module:jdk.jdi
+com.sun.jdi
+com.sun.jdi.connect
+com.sun.jdi.connect.spi
+com.sun.jdi.event
+com.sun.jdi.request
+module:jdk.jdwp.agent
+module:jdk.jfr
+jdk.jfr
+jdk.jfr.consumer
+module:jdk.jlink
+module:jdk.jshell
+jdk.jshell
+jdk.jshell.execution
+jdk.jshell.spi
+jdk.jshell.tool
+module:jdk.jsobject
+netscape.javascript
+module:jdk.jstatd
+module:jdk.localedata
+module:jdk.management
+com.sun.management
+module:jdk.management.agent
+module:jdk.management.jfr
+jdk.management.jfr
+module:jdk.naming.dns
+module:jdk.naming.rmi
+module:jdk.net
+jdk.net
+jdk.nio
+module:jdk.pack
+module:jdk.rmic
+module:jdk.scripting.nashorn
+jdk.nashorn.api.scripting
+jdk.nashorn.api.tree
+module:jdk.sctp
+com.sun.nio.sctp
+module:jdk.security.auth
+com.sun.security.auth
+com.sun.security.auth.callback
+com.sun.security.auth.login
+com.sun.security.auth.module
+module:jdk.security.jgss
+com.sun.security.jgss
+module:jdk.xml.dom
+org.w3c.dom.css
+org.w3c.dom.html
+org.w3c.dom.stylesheets
+org.w3c.dom.xpath
+module:jdk.zipfs
--- a/make/nashorn/package-list	Mon Nov 26 19:05:55 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,314 +0,0 @@
-com.sun.jarsigner
-com.sun.java.accessibility.util
-com.sun.javadoc
-com.sun.jdi
-com.sun.jdi.connect
-com.sun.jdi.connect.spi
-com.sun.jdi.event
-com.sun.jdi.request
-com.sun.management
-com.sun.net.httpserver
-com.sun.net.httpserver.spi
-com.sun.nio.sctp
-com.sun.security.auth
-com.sun.security.auth.callback
-com.sun.security.auth.login
-com.sun.security.auth.module
-com.sun.security.jgss
-com.sun.source.doctree
-com.sun.source.tree
-com.sun.source.util
-com.sun.tools.attach
-com.sun.tools.attach.spi
-com.sun.tools.doclets
-com.sun.tools.doclets.standard
-com.sun.tools.javac
-com.sun.tools.javadoc
-com.sun.tools.jconsole
-java.applet
-java.awt
-java.awt.color
-java.awt.datatransfer
-java.awt.desktop
-java.awt.dnd
-java.awt.event
-java.awt.font
-java.awt.geom
-java.awt.im
-java.awt.im.spi
-java.awt.image
-java.awt.image.renderable
-java.awt.print
-java.beans
-java.beans.beancontext
-java.io
-java.lang
-java.lang.annotation
-java.lang.instrument
-java.lang.invoke
-java.lang.management
-java.lang.module
-java.lang.ref
-java.lang.reflect
-java.math
-java.net
-java.net.spi
-java.nio
-java.nio.channels
-java.nio.channels.spi
-java.nio.charset
-java.nio.charset.spi
-java.nio.file
-java.nio.file.attribute
-java.nio.file.spi
-java.rmi
-java.rmi.activation
-java.rmi.dgc
-java.rmi.registry
-java.rmi.server
-java.security
-java.security.acl
-java.security.cert
-java.security.interfaces
-java.security.spec
-java.sql
-java.text
-java.text.spi
-java.time
-java.time.chrono
-java.time.format
-java.time.temporal
-java.time.zone
-java.util
-java.util.concurrent
-java.util.concurrent.atomic
-java.util.concurrent.locks
-java.util.function
-java.util.jar
-java.util.logging
-java.util.prefs
-java.util.regex
-java.util.spi
-java.util.stream
-java.util.zip
-javafx.animation
-javafx.application
-javafx.beans
-javafx.beans.binding
-javafx.beans.property
-javafx.beans.property.adapter
-javafx.beans.value
-javafx.collections
-javafx.collections.transformation
-javafx.concurrent
-javafx.css
-javafx.css.converter
-javafx.embed.swing
-javafx.event
-javafx.fxml
-javafx.geometry
-javafx.print
-javafx.scene
-javafx.scene.canvas
-javafx.scene.chart
-javafx.scene.control
-javafx.scene.control.cell
-javafx.scene.control.skin
-javafx.scene.effect
-javafx.scene.image
-javafx.scene.input
-javafx.scene.layout
-javafx.scene.media
-javafx.scene.paint
-javafx.scene.shape
-javafx.scene.text
-javafx.scene.transform
-javafx.scene.web
-javafx.stage
-javafx.util
-javafx.util.converter
-javax.accessibility
-javax.activation
-javax.activity
-javax.annotation
-javax.annotation.processing
-javax.crypto
-javax.crypto.interfaces
-javax.crypto.spec
-javax.imageio
-javax.imageio.event
-javax.imageio.metadata
-javax.imageio.plugins.bmp
-javax.imageio.plugins.jpeg
-javax.imageio.plugins.tiff
-javax.imageio.spi
-javax.imageio.stream
-javax.jnlp
-javax.jws
-javax.jws.soap
-javax.lang.model
-javax.lang.model.element
-javax.lang.model.type
-javax.lang.model.util
-javax.management
-javax.management.loading
-javax.management.modelmbean
-javax.management.monitor
-javax.management.openmbean
-javax.management.relation
-javax.management.remote
-javax.management.remote.rmi
-javax.management.timer
-javax.naming
-javax.naming.directory
-javax.naming.event
-javax.naming.ldap
-javax.naming.spi
-javax.net
-javax.net.ssl
-javax.print
-javax.print.attribute
-javax.print.attribute.standard
-javax.print.event
-javax.rmi
-javax.rmi.CORBA
-javax.rmi.ssl
-javax.script
-javax.security.auth
-javax.security.auth.callback
-javax.security.auth.kerberos
-javax.security.auth.login
-javax.security.auth.spi
-javax.security.auth.x500
-javax.security.cert
-javax.security.sasl
-javax.smartcardio
-javax.sound.midi
-javax.sound.midi.spi
-javax.sound.sampled
-javax.sound.sampled.spi
-javax.sql
-javax.sql.rowset
-javax.sql.rowset.serial
-javax.sql.rowset.spi
-javax.swing
-javax.swing.border
-javax.swing.colorchooser
-javax.swing.event
-javax.swing.filechooser
-javax.swing.plaf
-javax.swing.plaf.basic
-javax.swing.plaf.metal
-javax.swing.plaf.multi
-javax.swing.plaf.nimbus
-javax.swing.plaf.synth
-javax.swing.table
-javax.swing.text
-javax.swing.text.html
-javax.swing.text.html.parser
-javax.swing.text.rtf
-javax.swing.tree
-javax.swing.undo
-javax.tools
-javax.transaction
-javax.transaction.xa
-javax.xml
-javax.xml.bind
-javax.xml.bind.annotation
-javax.xml.bind.annotation.adapters
-javax.xml.bind.attachment
-javax.xml.bind.helpers
-javax.xml.bind.util
-javax.xml.catalog
-javax.xml.crypto
-javax.xml.crypto.dom
-javax.xml.crypto.dsig
-javax.xml.crypto.dsig.dom
-javax.xml.crypto.dsig.keyinfo
-javax.xml.crypto.dsig.spec
-javax.xml.datatype
-javax.xml.namespace
-javax.xml.parsers
-javax.xml.soap
-javax.xml.stream
-javax.xml.stream.events
-javax.xml.stream.util
-javax.xml.transform
-javax.xml.transform.dom
-javax.xml.transform.sax
-javax.xml.transform.stax
-javax.xml.transform.stream
-javax.xml.validation
-javax.xml.ws
-javax.xml.ws.handler
-javax.xml.ws.handler.soap
-javax.xml.ws.http
-javax.xml.ws.soap
-javax.xml.ws.spi
-javax.xml.ws.spi.http
-javax.xml.ws.wsaddressing
-javax.xml.xpath
-jdk.dynalink
-jdk.dynalink.beans
-jdk.dynalink.linker
-jdk.dynalink.linker.support
-jdk.dynalink.support
-jdk.incubator.http
-jdk.javadoc.doclet
-jdk.jfr
-jdk.jfr.consumer
-jdk.jshell
-jdk.jshell.execution
-jdk.jshell.spi
-jdk.jshell.tool
-jdk.management.jfr
-jdk.management.resource
-jdk.nashorn.api.scripting
-jdk.nashorn.api.tree
-jdk.net
-jdk.packager.services
-jdk.security.jarsigner
-netscape.javascript
-org.ietf.jgss
-org.omg.CORBA
-org.omg.CORBA_2_3
-org.omg.CORBA_2_3.portable
-org.omg.CORBA.DynAnyPackage
-org.omg.CORBA.ORBPackage
-org.omg.CORBA.portable
-org.omg.CORBA.TypeCodePackage
-org.omg.CosNaming
-org.omg.CosNaming.NamingContextExtPackage
-org.omg.CosNaming.NamingContextPackage
-org.omg.Dynamic
-org.omg.DynamicAny
-org.omg.DynamicAny.DynAnyFactoryPackage
-org.omg.DynamicAny.DynAnyPackage
-org.omg.IOP
-org.omg.IOP.CodecFactoryPackage
-org.omg.IOP.CodecPackage
-org.omg.Messaging
-org.omg.PortableInterceptor
-org.omg.PortableInterceptor.ORBInitInfoPackage
-org.omg.PortableServer
-org.omg.PortableServer.CurrentPackage
-org.omg.PortableServer.POAManagerPackage
-org.omg.PortableServer.POAPackage
-org.omg.PortableServer.portable
-org.omg.PortableServer.ServantLocatorPackage
-org.omg.SendingContext
-org.omg.stub.java.rmi
-org.w3c.dom
-org.w3c.dom.bootstrap
-org.w3c.dom.css
-org.w3c.dom.events
-org.w3c.dom.html
-org.w3c.dom.ls
-org.w3c.dom.ranges
-org.w3c.dom.stylesheets
-org.w3c.dom.traversal
-org.w3c.dom.views
-org.w3c.dom.xpath
-org.xml.sax
-org.xml.sax.ext
-org.xml.sax.helpers
--- a/make/nashorn/project.properties	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/nashorn/project.properties	Mon Dec 03 10:08:18 2018 +0100
@@ -36,8 +36,8 @@
 jdk.build.dir=build
 nashorn.make.dir=make/nashorn
 
-javadoc.base.url=https://docs.oracle.com/javase/9/docs/api/
-javadoc.pkg.list=make/nashorn
+javadoc.base.url=https://docs.oracle.com/en/java/javase/11/docs/api/
+javadoc.element.list=make/nashorn
 
 javadoc.option=\
     -tag "implSpec:a:Implementation Requirements:" \
--- a/make/test/JtregNativeJdk.gmk	Mon Nov 26 19:05:55 2018 +0100
+++ b/make/test/JtregNativeJdk.gmk	Mon Dec 03 10:08:18 2018 +0100
@@ -48,28 +48,38 @@
 
 BUILD_JDK_JTREG_IMAGE_DIR := $(TEST_IMAGE_DIR)/jdk/jtreg
 
+BUILD_JDK_JTREG_EXECUTABLES_CFLAGS_exeJliLaunchTest := \
+    -I$(TOPDIR)/src/java.base/share/native/libjli \
+    -I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjli \
+    -I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libjli
+
 # Platform specific setup
 ifeq ($(OPENJDK_TARGET_OS), windows)
   BUILD_JDK_JTREG_EXCLUDE += libDirectIO.c libInheritedChannel.c
 
   WIN_LIB_JAVA := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib
   BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := $(WIN_LIB_JAVA)
+  WIN_LIB_JLI := $(SUPPORT_OUTPUTDIR)/native/java.base/libjli/jli.lib
+  BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJliLaunchTest := $(WIN_LIB_JLI)
 else
   BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava
   BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava
   ifeq ($(OPENJDK_TARGET_OS), linux)
     BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava
   else ifeq ($(OPENJDK_TARGET_OS), solaris)
-    BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava
+    BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava -lsocket -lnsl
   endif
+  BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJliLaunchTest := -ljli
 endif
 
 ifeq ($(OPENJDK_TARGET_OS), macosx)
   BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libTestMainKeyWindow := -ObjC
   BUILD_JDK_JTREG_LIBRARIES_LIBS_libTestMainKeyWindow := -framework JavaVM \
       -framework Cocoa -framework JavaNativeFoundation
+  BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJniInvocationTest := -ljli
 else
   BUILD_JDK_JTREG_EXCLUDE += libTestMainKeyWindow.c
+  BUILD_JDK_JTREG_EXCLUDE += exeJniInvocationTest.c
 endif
 
 $(eval $(call SetupTestFilesCompilation, BUILD_JDK_JTREG_LIBRARIES, \
--- a/src/demo/share/jfc/FileChooserDemo/FileChooserDemo.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/demo/share/jfc/FileChooserDemo/FileChooserDemo.java	Mon Dec 03 10:08:18 2018 +0100
@@ -800,7 +800,7 @@
                      * NOTE: By default, the look and feel will be set to the
                      * Cross Platform Look and Feel (which is currently Metal).
                      * The following code tries to set the Look and Feel to Nimbus.
-                     * http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/nimbus.html
+                     * https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/nimbus.html
                      */
                     try {
                         for (LookAndFeelInfo info : UIManager.
--- a/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -4019,105 +4019,6 @@
  * @param len   register containing number of bytes
  * @param table register pointing to CRC table
  *
- * Uses R9..R12 as work register. Must be saved/restored by caller!
- */
-void MacroAssembler::kernel_crc32_2word(Register crc, Register buf, Register len, Register table,
-                                        Register t0,  Register t1,  Register t2,  Register t3,
-                                        Register tc0, Register tc1, Register tc2, Register tc3,
-                                        bool invertCRC) {
-  assert_different_registers(crc, buf, len, table);
-
-  Label L_mainLoop, L_tail;
-  Register  tmp  = t0;
-  Register  data = t0;
-  Register  tmp2 = t1;
-  const int mainLoop_stepping  = 8;
-  const int tailLoop_stepping  = 1;
-  const int log_stepping       = exact_log2(mainLoop_stepping);
-  const int mainLoop_alignment = 32; // InputForNewCode > 4 ? InputForNewCode : 32;
-  const int complexThreshold   = 2*mainLoop_stepping;
-
-  // Don't test for len <= 0 here. This pathological case should not occur anyway.
-  // Optimizing for it by adding a test and a branch seems to be a waste of CPU cycles
-  // for all well-behaved cases. The situation itself is detected and handled correctly
-  // within update_byteLoop_crc32.
-  assert(tailLoop_stepping == 1, "check tailLoop_stepping!");
-
-  BLOCK_COMMENT("kernel_crc32_2word {");
-
-  if (invertCRC) {
-    nand(crc, crc, crc);                      // 1s complement of crc
-  }
-
-  // Check for short (<mainLoop_stepping) buffer.
-  cmpdi(CCR0, len, complexThreshold);
-  blt(CCR0, L_tail);
-
-  // Pre-mainLoop alignment did show a slight (1%) positive effect on performance.
-  // We leave the code in for reference. Maybe we need alignment when we exploit vector instructions.
-  {
-    // Align buf addr to mainLoop_stepping boundary.
-    neg(tmp2, buf);                           // Calculate # preLoop iterations for alignment.
-    rldicl(tmp2, tmp2, 0, 64-log_stepping);   // Rotate tmp2 0 bits, insert into tmp2, anding with mask with 1s from 62..63.
-
-    if (complexThreshold > mainLoop_stepping) {
-      sub(len, len, tmp2);                       // Remaining bytes for main loop (>=mainLoop_stepping is guaranteed).
-    } else {
-      sub(tmp, len, tmp2);                       // Remaining bytes for main loop.
-      cmpdi(CCR0, tmp, mainLoop_stepping);
-      blt(CCR0, L_tail);                         // For less than one mainloop_stepping left, do only tail processing
-      mr(len, tmp);                              // remaining bytes for main loop (>=mainLoop_stepping is guaranteed).
-    }
-    update_byteLoop_crc32(crc, buf, tmp2, table, data, false);
-  }
-
-  srdi(tmp2, len, log_stepping);                 // #iterations for mainLoop
-  andi(len, len, mainLoop_stepping-1);           // remaining bytes for tailLoop
-  mtctr(tmp2);
-
-#ifdef VM_LITTLE_ENDIAN
-  Register crc_rv = crc;
-#else
-  Register crc_rv = tmp;                         // Load_reverse needs separate registers to work on.
-                                                 // Occupies tmp, but frees up crc.
-  load_reverse_32(crc_rv, crc);                  // Revert byte order because we are dealing with big-endian data.
-  tmp = crc;
-#endif
-
-  int reconstructTableOffset = crc32_table_columns(table, tc0, tc1, tc2, tc3);
-
-  align(mainLoop_alignment);                     // Octoword-aligned loop address. Shows 2% improvement.
-  BIND(L_mainLoop);
-    update_1word_crc32(crc_rv, buf, table, 0, 0, crc_rv, t1, t2, t3, tc0, tc1, tc2, tc3);
-    update_1word_crc32(crc_rv, buf, table, 4, mainLoop_stepping, crc_rv, t1, t2, t3, tc0, tc1, tc2, tc3);
-    bdnz(L_mainLoop);
-
-#ifndef VM_LITTLE_ENDIAN
-  load_reverse_32(crc, crc_rv);                  // Revert byte order because we are dealing with big-endian data.
-  tmp = crc_rv;                                  // Tmp uses it's original register again.
-#endif
-
-  // Restore original table address for tailLoop.
-  if (reconstructTableOffset != 0) {
-    addi(table, table, -reconstructTableOffset);
-  }
-
-  // Process last few (<complexThreshold) bytes of buffer.
-  BIND(L_tail);
-  update_byteLoop_crc32(crc, buf, len, table, data, false);
-
-  if (invertCRC) {
-    nand(crc, crc, crc);                      // 1s complement of crc
-  }
-  BLOCK_COMMENT("} kernel_crc32_2word");
-}
-
-/**
- * @param crc   register containing existing CRC (32-bit)
- * @param buf   register pointing to input byte buffer (byte*)
- * @param len   register containing number of bytes
- * @param table register pointing to CRC table
- *
  * uses R9..R12 as work register. Must be saved/restored by caller!
  */
 void MacroAssembler::kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
--- a/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -835,10 +835,6 @@
   void update_1word_crc32(Register crc, Register buf, Register table, int bufDisp, int bufInc,
                           Register t0,  Register t1,  Register t2,  Register t3,
                           Register tc0, Register tc1, Register tc2, Register tc3);
-  void kernel_crc32_2word(Register crc, Register buf, Register len, Register table,
-                          Register t0,  Register t1,  Register t2,  Register t3,
-                          Register tc0, Register tc1, Register tc2, Register tc3,
-                          bool invertCRC);
   void kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
                           Register t0,  Register t1,  Register t2,  Register t3,
                           Register tc0, Register tc1, Register tc2, Register tc3,
--- a/src/hotspot/cpu/ppc/stubRoutines_ppc.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/cpu/ppc/stubRoutines_ppc.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -62,7 +62,6 @@
  public:
 
   // CRC32 Intrinsics.
-  static void generate_load_table_addr(MacroAssembler* masm, Register table, address table_addr, uint64_t table_contents);
   static void generate_load_crc_table_addr(MacroAssembler* masm, Register table);
   static void generate_load_crc_constants_addr(MacroAssembler* masm, Register table);
   static void generate_load_crc_barret_constants_addr(MacroAssembler* masm, Register table);
--- a/src/hotspot/cpu/s390/macroAssembler_s390.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/cpu/s390/macroAssembler_s390.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -6333,75 +6333,6 @@
  *
  * uses Z_R10..Z_R13 as work register. Must be saved/restored by caller!
  */
-void MacroAssembler::kernel_crc32_2word(Register crc, Register buf, Register len, Register table,
-                                        Register t0,  Register t1,  Register t2,  Register t3,
-                                        bool invertCRC) {
-  assert_different_registers(crc, buf, len, table);
-
-  Label L_mainLoop, L_tail;
-  Register  data = t0;
-  Register  ctr  = Z_R0;
-  const int mainLoop_stepping = 8;
-  const int tailLoop_stepping = 1;
-  const int log_stepping      = exact_log2(mainLoop_stepping);
-
-  // Don't test for len <= 0 here. This pathological case should not occur anyway.
-  // Optimizing for it by adding a test and a branch seems to be a waste of CPU cycles.
-  // The situation itself is detected and handled correctly by the conditional branches
-  // following aghi(len, -stepping) and aghi(len, +stepping).
-
-  if (invertCRC) {
-    not_(crc, noreg, false);           // 1s complement of crc
-  }
-
-#if 0
-  {
-    // Pre-mainLoop alignment did not show any positive effect on performance.
-    // We leave the code in for reference. Maybe the vector instructions in z13 depend on alignment.
-
-    z_cghi(len, mainLoop_stepping);    // Alignment is useless for short data streams.
-    z_brnh(L_tail);
-
-    // Align buf to word (4-byte) boundary.
-    z_lcr(ctr, buf);
-    rotate_then_insert(ctr, ctr, 62, 63, 0, true); // TODO: should set cc
-    z_sgfr(len, ctr);                  // Remaining len after alignment.
-
-    update_byteLoop_crc32(crc, buf, ctr, table, data);
-  }
-#endif
-
-  // Check for short (<mainLoop_stepping bytes) buffer.
-  z_srag(ctr, len, log_stepping);
-  z_brnh(L_tail);
-
-  z_lrvr(crc, crc);          // Revert byte order because we are dealing with big-endian data.
-  rotate_then_insert(len, len, 64-log_stepping, 63, 0, true); // #bytes for tailLoop
-
-  BIND(L_mainLoop);
-    update_1word_crc32(crc, buf, table, 0, 0, crc, t1, t2, t3);
-    update_1word_crc32(crc, buf, table, 4, mainLoop_stepping, crc, t1, t2, t3);
-    z_brct(ctr, L_mainLoop); // Iterate.
-
-  z_lrvr(crc, crc);          // Revert byte order back to original.
-
-  // Process last few (<8) bytes of buffer.
-  BIND(L_tail);
-  update_byteLoop_crc32(crc, buf, len, table, data);
-
-  if (invertCRC) {
-    not_(crc, noreg, false);           // 1s complement of crc
-  }
-}
-
-/**
- * @param crc   register containing existing CRC (32-bit)
- * @param buf   register pointing to input byte buffer (byte*)
- * @param len   register containing number of bytes
- * @param table register pointing to CRC table
- *
- * uses Z_R10..Z_R13 as work register. Must be saved/restored by caller!
- */
 void MacroAssembler::kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
                                         Register t0,  Register t1,  Register t2,  Register t3,
                                         bool invertCRC) {
--- a/src/hotspot/cpu/s390/macroAssembler_s390.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/cpu/s390/macroAssembler_s390.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -1056,9 +1056,6 @@
   void kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
                           Register t0,  Register t1,  Register t2,  Register t3,
                           bool invertCRC);
-  void kernel_crc32_2word(Register crc, Register buf, Register len, Register table,
-                          Register t0,  Register t1,  Register t2,  Register t3,
-                          bool invertCRC);
 
   // Emitters for BigInteger.multiplyToLen intrinsic
   // note: length of result array (zlen) is passed on the stack
--- a/src/hotspot/os/aix/os_aix.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/os/aix/os_aix.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -541,7 +541,11 @@
 
 void os::init_system_properties_values() {
 
-#define DEFAULT_LIBPATH "/lib:/usr/lib"
+#ifndef OVERRIDE_LIBPATH
+  #define DEFAULT_LIBPATH "/lib:/usr/lib"
+#else
+  #define DEFAULT_LIBPATH OVERRIDE_LIBPATH
+#endif
 #define EXTENSIONS_DIR  "/lib/ext"
 
   // Buffer that fits several sprintfs.
--- a/src/hotspot/os/bsd/os_bsd.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/os/bsd/os_bsd.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -316,7 +316,11 @@
   //        ...
   //        7: The default directories, normally /lib and /usr/lib.
 #ifndef DEFAULT_LIBPATH
-  #define DEFAULT_LIBPATH "/lib:/usr/lib"
+  #ifndef OVERRIDE_LIBPATH
+    #define DEFAULT_LIBPATH "/lib:/usr/lib"
+  #else
+    #define DEFAULT_LIBPATH OVERRIDE_LIBPATH
+  #endif
 #endif
 
 // Base path of extensions installed on the system.
--- a/src/hotspot/os/linux/os_linux.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/os/linux/os_linux.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -323,10 +323,14 @@
   //        1: ...
   //        ...
   //        7: The default directories, normally /lib and /usr/lib.
-#if defined(AMD64) || (defined(_LP64) && defined(SPARC)) || defined(PPC64) || defined(S390)
-  #define DEFAULT_LIBPATH "/usr/lib64:/lib64:/lib:/usr/lib"
+#ifndef OVERRIDE_LIBPATH
+  #if defined(AMD64) || (defined(_LP64) && defined(SPARC)) || defined(PPC64) || defined(S390)
+    #define DEFAULT_LIBPATH "/usr/lib64:/lib64:/lib:/usr/lib"
+  #else
+    #define DEFAULT_LIBPATH "/lib:/usr/lib"
+  #endif
 #else
-  #define DEFAULT_LIBPATH "/lib:/usr/lib"
+  #define DEFAULT_LIBPATH OVERRIDE_LIBPATH
 #endif
 
 // Base path of extensions installed on the system.
--- a/src/hotspot/share/ci/ciInstanceKlass.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/ci/ciInstanceKlass.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -57,7 +57,7 @@
   AccessFlags access_flags = ik->access_flags();
   _flags = ciFlags(access_flags);
   _has_finalizer = access_flags.has_finalizer();
-  _has_subklass = ik->subklass() != NULL;
+  _has_subklass = flags().is_final() ? subklass_false : subklass_unknown;
   _init_state = ik->init_state();
   _nonstatic_field_size = ik->nonstatic_field_size();
   _has_nonstatic_fields = ik->has_nonstatic_fields();
@@ -147,8 +147,8 @@
 bool ciInstanceKlass::compute_shared_has_subklass() {
   GUARDED_VM_ENTRY(
     InstanceKlass* ik = get_instanceKlass();
-    _has_subklass = ik->subklass() != NULL;
-    return _has_subklass;
+    _has_subklass = ik->subklass() != NULL ? subklass_true : subklass_false;
+    return _has_subklass == subklass_true;
   )
 }
 
@@ -583,7 +583,7 @@
   if (is_shared()) {
     return is_final();  // approximately correct
   } else {
-    return !_has_subklass && (nof_implementors() == 0);
+    return !has_subklass() && (nof_implementors() == 0);
   }
 }
 
--- a/src/hotspot/share/ci/ciInstanceKlass.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/ci/ciInstanceKlass.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -44,13 +44,15 @@
   friend class ciField;
 
 private:
+  enum SubklassValue { subklass_unknown, subklass_false, subklass_true };
+
   jobject                _loader;
   jobject                _protection_domain;
 
   InstanceKlass::ClassState _init_state;           // state of class
   bool                   _is_shared;
   bool                   _has_finalizer;
-  bool                   _has_subklass;
+  SubklassValue          _has_subklass;
   bool                   _has_nonstatic_fields;
   bool                   _has_nonstatic_concrete_methods;
   bool                   _is_unsafe_anonymous;
@@ -139,14 +141,15 @@
     return _has_finalizer; }
   bool                   has_subklass()   {
     assert(is_loaded(), "must be loaded");
-    if (_is_shared && !_has_subklass) {
+    if (_has_subklass == subklass_unknown ||
+        (_is_shared && _has_subklass == subklass_false)) {
       if (flags().is_final()) {
         return false;
       } else {
         return compute_shared_has_subklass();
       }
     }
-    return _has_subklass;
+    return _has_subklass == subklass_true;
   }
   jint                   size_helper()  {
     return (Klass::layout_helper_size_in_bytes(layout_helper())
--- a/src/hotspot/share/ci/ciMethodData.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/ci/ciMethodData.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -198,17 +198,28 @@
   }
 }
 
-
 void ciTypeStackSlotEntries::translate_type_data_from(const TypeStackSlotEntries* entries) {
   for (int i = 0; i < number_of_entries(); i++) {
     intptr_t k = entries->type(i);
-    TypeStackSlotEntries::set_type(i, translate_klass(k));
+    Klass* klass = (Klass*)klass_part(k);
+    if (klass != NULL && !klass->is_loader_alive()) {
+      // With concurrent class unloading, the MDO could have stale metadata; override it
+      TypeStackSlotEntries::set_type(i, TypeStackSlotEntries::with_status((Klass*)NULL, k));
+    } else {
+      TypeStackSlotEntries::set_type(i, translate_klass(k));
+    }
   }
 }
 
 void ciReturnTypeEntry::translate_type_data_from(const ReturnTypeEntry* ret) {
   intptr_t k = ret->type();
-  set_type(translate_klass(k));
+  Klass* klass = (Klass*)klass_part(k);
+  if (klass != NULL && !klass->is_loader_alive()) {
+    // With concurrent class unloading, the MDO could have stale metadata; override it
+    set_type(ReturnTypeEntry::with_status((Klass*)NULL, k));
+  } else {
+    set_type(translate_klass(k));
+  }
 }
 
 void ciSpeculativeTrapData::translate_from(const ProfileData* data) {
--- a/src/hotspot/share/classfile/classFileParser.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/classfile/classFileParser.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -5521,10 +5521,16 @@
 
   assert(_klass == ik, "invariant");
 
+
+  if (ik->should_store_fingerprint()) {
+    ik->store_fingerprint(_stream->compute_fingerprint());
+  }
+
   ik->set_has_passed_fingerprint_check(false);
   if (UseAOT && ik->supers_have_passed_fingerprint_checks()) {
     uint64_t aot_fp = AOTLoader::get_saved_fingerprint(ik);
-    if (aot_fp != 0 && aot_fp == _stream->compute_fingerprint()) {
+    uint64_t fp = ik->has_stored_fingerprint() ? ik->get_stored_fingerprint() : _stream->compute_fingerprint();
+    if (aot_fp != 0 && aot_fp == fp) {
       // This class matches with a class saved in an AOT library
       ik->set_has_passed_fingerprint_check(true);
     } else {
--- a/src/hotspot/share/classfile/classLoaderDataGraph.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/classfile/classLoaderDataGraph.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -29,6 +29,7 @@
 #include "classfile/metadataOnStackMark.hpp"
 #include "classfile/moduleEntry.hpp"
 #include "classfile/packageEntry.hpp"
+#include "code/dependencyContext.hpp"
 #include "logging/log.hpp"
 #include "logging/logStream.hpp"
 #include "memory/allocation.inline.hpp"
@@ -597,6 +598,7 @@
     Metaspace::purge();
     set_metaspace_oom(false);
   }
+  DependencyContext::purge_dependency_contexts();
 }
 
 int ClassLoaderDataGraph::resize_if_needed() {
--- a/src/hotspot/share/classfile/javaClasses.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/classfile/javaClasses.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -3741,6 +3741,7 @@
 // Support for java_lang_invoke_MethodHandleNatives_CallSiteContext
 
 int java_lang_invoke_MethodHandleNatives_CallSiteContext::_vmdependencies_offset;
+int java_lang_invoke_MethodHandleNatives_CallSiteContext::_last_cleanup_offset;
 
 void java_lang_invoke_MethodHandleNatives_CallSiteContext::compute_offsets() {
   InstanceKlass* k = SystemDictionary::Context_klass();
@@ -3755,8 +3756,9 @@
 
 DependencyContext java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(oop call_site) {
   assert(java_lang_invoke_MethodHandleNatives_CallSiteContext::is_instance(call_site), "");
-  intptr_t* vmdeps_addr = (intptr_t*)call_site->field_addr(_vmdependencies_offset);
-  DependencyContext dep_ctx(vmdeps_addr);
+  nmethodBucket* volatile* vmdeps_addr = (nmethodBucket* volatile*)call_site->field_addr(_vmdependencies_offset);
+  volatile uint64_t* last_cleanup_addr = (volatile uint64_t*)call_site->field_addr(_last_cleanup_offset);
+  DependencyContext dep_ctx(vmdeps_addr, last_cleanup_addr);
   return dep_ctx;
 }
 
--- a/src/hotspot/share/classfile/javaClasses.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/classfile/javaClasses.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -1201,7 +1201,8 @@
 // Interface to java.lang.invoke.MethodHandleNatives$CallSiteContext objects
 
 #define CALLSITECONTEXT_INJECTED_FIELDS(macro) \
-  macro(java_lang_invoke_MethodHandleNatives_CallSiteContext, vmdependencies, intptr_signature, false)
+  macro(java_lang_invoke_MethodHandleNatives_CallSiteContext, vmdependencies, intptr_signature, false) \
+  macro(java_lang_invoke_MethodHandleNatives_CallSiteContext, last_cleanup, long_signature, false)
 
 class DependencyContext;
 
@@ -1210,6 +1211,7 @@
 
 private:
   static int _vmdependencies_offset;
+  static int _last_cleanup_offset;
 
   static void compute_offsets();
 
--- a/src/hotspot/share/classfile/klassFactory.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/classfile/klassFactory.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -231,10 +231,6 @@
     result->set_cached_class_file(cached_class_file);
   }
 
-  if (result->should_store_fingerprint()) {
-    result->store_fingerprint(stream->compute_fingerprint());
-  }
-
   JFR_ONLY(ON_KLASS_CREATION(result, parser, THREAD);)
 
 #if INCLUDE_CDS
--- a/src/hotspot/share/classfile/stringTable.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/classfile/stringTable.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -206,6 +206,12 @@
   _local_table = new StringTableHash(start_size_log_2, END_SIZE, REHASH_LEN);
 }
 
+void StringTable::update_needs_rehash(bool rehash) {
+  if (rehash) {
+    _needs_rehashing = true;
+  }
+}
+
 size_t StringTable::item_added() {
   return Atomic::add((size_t)1, &(the_table()->_items_count));
 }
@@ -281,9 +287,7 @@
   StringTableGet stg(thread);
   bool rehash_warning;
   _local_table->get(thread, lookup, stg, &rehash_warning);
-  if (rehash_warning) {
-    _needs_rehashing = true;
-  }
+  update_needs_rehash(rehash_warning);
   return stg.get_res_oop();
 }
 
@@ -334,30 +338,6 @@
                                              hash, CHECK_NULL);
 }
 
-class StringTableCreateEntry : public StackObj {
- private:
-   Thread* _thread;
-   Handle  _return;
-   Handle  _store;
- public:
-  StringTableCreateEntry(Thread* thread, Handle store)
-    : _thread(thread), _store(store) {}
-
-  WeakHandle<vm_string_table_data> operator()() { // No dups found
-    WeakHandle<vm_string_table_data> wh =
-      WeakHandle<vm_string_table_data>::create(_store);
-    return wh;
-  }
-  void operator()(bool inserted, WeakHandle<vm_string_table_data>* val) {
-    oop result = val->resolve();
-    assert(result != NULL, "Result should be reachable");
-    _return = Handle(_thread, result);
-  }
-  oop get_return() const {
-    return _return();
-  }
-};
-
 oop StringTable::do_intern(Handle string_or_null_h, const jchar* name,
                            int len, uintx hash, TRAPS) {
   HandleMark hm(THREAD);  // cleanup strings created
@@ -377,15 +357,23 @@
   assert(java_lang_String::equals(string_h(), name, len),
          "string must be properly initialized");
   assert(len == java_lang_String::length(string_h()), "Must be same length");
+
   StringTableLookupOop lookup(THREAD, hash, string_h);
-  StringTableCreateEntry stc(THREAD, string_h);
+  StringTableGet stg(THREAD);
 
   bool rehash_warning;
-  _local_table->get_insert_lazy(THREAD, lookup, stc, stc, &rehash_warning);
-  if (rehash_warning) {
-    _needs_rehashing = true;
-  }
-  return stc.get_return();
+  do {
+    if (_local_table->get(THREAD, lookup, stg, &rehash_warning)) {
+      update_needs_rehash(rehash_warning);
+      return stg.get_res_oop();
+    }
+    WeakHandle<vm_string_table_data> wh = WeakHandle<vm_string_table_data>::create(string_h);
+    // The hash table takes ownership of the WeakHandle, even if it's not inserted.
+    if (_local_table->insert(THREAD, lookup, wh, &rehash_warning)) {
+      update_needs_rehash(rehash_warning);
+      return wh.resolve();
+    }
+  } while(true);
 }
 
 // GC support
--- a/src/hotspot/share/classfile/stringTable.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/classfile/stringTable.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -93,6 +93,7 @@
 
   void try_rehash_table();
   bool do_rehash();
+  inline void update_needs_rehash(bool rehash);
 
  public:
   // The string table
--- a/src/hotspot/share/classfile/vmSymbols.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/classfile/vmSymbols.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -426,6 +426,7 @@
   template(signers_name,                              "signers_name")                             \
   template(loader_data_name,                          "loader_data")                              \
   template(vmdependencies_name,                       "vmdependencies")                           \
+  template(last_cleanup_name,                         "last_cleanup")                             \
   template(loader_name,                               "loader")                                   \
   template(getModule_name,                            "getModule")                                \
   template(input_stream_void_signature,               "(Ljava/io/InputStream;)V")                 \
--- a/src/hotspot/share/code/codeBlob.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/code/codeBlob.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -116,7 +116,12 @@
 
   CodeBlob(const char* name, CompilerType type, const CodeBlobLayout& layout, int frame_complete_offset, int frame_size, ImmutableOopMapSet* oop_maps, bool caller_must_gc_arguments);
   CodeBlob(const char* name, CompilerType type, const CodeBlobLayout& layout, CodeBuffer* cb, int frame_complete_offset, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments);
+
 public:
+  // Only used by unit test.
+  CodeBlob()
+    : _type(compiler_none) {}
+
   // Returns the space needed for CodeBlob
   static unsigned int allocation_size(CodeBuffer* cb, int header_size);
   static unsigned int align_code_offset(int offset);
--- a/src/hotspot/share/code/codeCache.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/code/codeCache.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -29,6 +29,7 @@
 #include "code/codeHeapState.hpp"
 #include "code/compiledIC.hpp"
 #include "code/dependencies.hpp"
+#include "code/dependencyContext.hpp"
 #include "code/icBuffer.hpp"
 #include "code/nmethod.hpp"
 #include "code/pcDesc.hpp"
@@ -940,6 +941,19 @@
   }
 }
 
+CodeCache::UnloadingScope::UnloadingScope(BoolObjectClosure* is_alive)
+  : _is_unloading_behaviour(is_alive)
+{
+  IsUnloadingBehaviour::set_current(&_is_unloading_behaviour);
+  increment_unloading_cycle();
+  DependencyContext::cleaning_start();
+}
+
+CodeCache::UnloadingScope::~UnloadingScope() {
+  IsUnloadingBehaviour::set_current(NULL);
+  DependencyContext::cleaning_end();
+}
+
 void CodeCache::verify_oops() {
   MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
   VerifyOopClosure voc;
--- a/src/hotspot/share/code/codeCache.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/code/codeCache.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -180,17 +180,10 @@
     ClosureIsUnloadingBehaviour _is_unloading_behaviour;
 
   public:
-    UnloadingScope(BoolObjectClosure* is_alive)
-      : _is_unloading_behaviour(is_alive)
-    {
-      IsUnloadingBehaviour::set_current(&_is_unloading_behaviour);
-      increment_unloading_cycle();
-    }
+    UnloadingScope(BoolObjectClosure* is_alive);
+    ~UnloadingScope();
+  };
 
-    ~UnloadingScope() {
-      IsUnloadingBehaviour::set_current(NULL);
-    }
-  };
   static void do_unloading(BoolObjectClosure* is_alive, bool unloading_occurred);
   static uint8_t unloading_cycle() { return _unloading_cycle; }
   static void increment_unloading_cycle();
--- a/src/hotspot/share/code/compiledMethod.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/code/compiledMethod.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -177,6 +177,9 @@
   CompiledMethod(Method* method, const char* name, CompilerType type, int size, int header_size, CodeBuffer* cb, int frame_complete_offset, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments);
 
 public:
+  // Only used by unit test.
+  CompiledMethod() {}
+
   virtual bool is_compiled() const                { return true; }
 
   template<typename T>
--- a/src/hotspot/share/code/dependencyContext.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/code/dependencyContext.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -35,6 +35,8 @@
 PerfCounter* DependencyContext::_perf_total_buckets_deallocated_count = NULL;
 PerfCounter* DependencyContext::_perf_total_buckets_stale_count       = NULL;
 PerfCounter* DependencyContext::_perf_total_buckets_stale_acc_count   = NULL;
+nmethodBucket* volatile DependencyContext::_purge_list = NULL;
+volatile uint64_t DependencyContext::_cleaning_epoch = 0;
 
 void dependencyContext_init() {
   DependencyContext::init();
@@ -61,7 +63,7 @@
 //
 int DependencyContext::mark_dependent_nmethods(DepChange& changes) {
   int found = 0;
-  for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) {
+  for (nmethodBucket* b = dependencies_not_unloading(); b != NULL; b = b->next_not_unloading()) {
     nmethod* nm = b->get_nmethod();
     // since dependencies aren't removed until an nmethod becomes a zombie,
     // the dependency list may contain nmethods which aren't alive.
@@ -86,21 +88,49 @@
 // so a count is kept for each bucket to guarantee that creation and
 // deletion of dependencies is consistent.
 //
-void DependencyContext::add_dependent_nmethod(nmethod* nm, bool expunge) {
+void DependencyContext::add_dependent_nmethod(nmethod* nm) {
   assert_lock_strong(CodeCache_lock);
-  for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) {
+  for (nmethodBucket* b = dependencies_not_unloading(); b != NULL; b = b->next_not_unloading()) {
     if (nm == b->get_nmethod()) {
       b->increment();
       return;
     }
   }
-  set_dependencies(new nmethodBucket(nm, dependencies()));
+  nmethodBucket* new_head = new nmethodBucket(nm, NULL);
+  for (;;) {
+    nmethodBucket* head = Atomic::load(_dependency_context_addr);
+    new_head->set_next(head);
+    if (Atomic::cmpxchg(new_head, _dependency_context_addr, head) == head) {
+      break;
+    }
+  }
   if (UsePerfData) {
     _perf_total_buckets_allocated_count->inc();
   }
+}
+
+void DependencyContext::release(nmethodBucket* b) {
+  bool expunge = Atomic::load(&_cleaning_epoch) == 0;
   if (expunge) {
-    // Remove stale entries from the list.
-    expunge_stale_entries();
+    assert_locked_or_safepoint(CodeCache_lock);
+    delete b;
+    if (UsePerfData) {
+      _perf_total_buckets_deallocated_count->inc();
+    }
+  } else {
+    // Mark the context as having stale entries, since it is not safe to
+    // expunge the list right now.
+    for (;;) {
+      nmethodBucket* purge_list_head = Atomic::load(&_purge_list);
+      b->set_purge_list_next(purge_list_head);
+      if (Atomic::cmpxchg(b, &_purge_list, purge_list_head) == purge_list_head) {
+        break;
+      }
+    }
+    if (UsePerfData) {
+      _perf_total_buckets_stale_count->inc();
+      _perf_total_buckets_stale_acc_count->inc();
+    }
   }
 }
 
@@ -111,92 +141,71 @@
 // a corresponding bucket otherwise there's a bug in the recording of dependencies.
 // Can be called concurrently by parallel GC threads.
 //
-void DependencyContext::remove_dependent_nmethod(nmethod* nm, bool expunge) {
+void DependencyContext::remove_dependent_nmethod(nmethod* nm) {
   assert_locked_or_safepoint(CodeCache_lock);
-  nmethodBucket* first = dependencies();
+  nmethodBucket* first = dependencies_not_unloading();
   nmethodBucket* last = NULL;
-  for (nmethodBucket* b = first; b != NULL; b = b->next()) {
+  for (nmethodBucket* b = first; b != NULL; b = b->next_not_unloading()) {
     if (nm == b->get_nmethod()) {
       int val = b->decrement();
       guarantee(val >= 0, "Underflow: %d", val);
       if (val == 0) {
-        if (expunge) {
-          if (last == NULL) {
-            set_dependencies(b->next());
-          } else {
-            last->set_next(b->next());
-          }
-          delete b;
-          if (UsePerfData) {
-            _perf_total_buckets_deallocated_count->inc();
-          }
+        if (last == NULL) {
+          // If there was not a head that was not unloading, we can set a new
+          // head without a CAS, because we know there is no contending cleanup.
+          set_dependencies(b->next_not_unloading());
         } else {
-          // Mark the context as having stale entries, since it is not safe to
-          // expunge the list right now.
-          set_has_stale_entries(true);
-          if (UsePerfData) {
-            _perf_total_buckets_stale_count->inc();
-            _perf_total_buckets_stale_acc_count->inc();
-          }
+          // Only supports a single inserting thread (protected by CodeCache_lock)
+          // for now. Therefore, the next pointer only competes with another cleanup
+          // operation. That interaction does not need a CAS.
+          last->set_next(b->next_not_unloading());
         }
-      }
-      if (expunge) {
-        // Remove stale entries from the list.
-        expunge_stale_entries();
+        release(b);
       }
       return;
     }
     last = b;
   }
-#ifdef ASSERT
-  tty->print_raw_cr("### can't find dependent nmethod");
-  nm->print();
-#endif // ASSERT
-  ShouldNotReachHere();
 }
 
 //
 // Reclaim all unused buckets.
 //
-void DependencyContext::expunge_stale_entries() {
-  assert_locked_or_safepoint(CodeCache_lock);
-  if (!has_stale_entries()) {
-    assert(!find_stale_entries(), "inconsistent info");
+void DependencyContext::purge_dependency_contexts() {
+  int removed = 0;
+  for (nmethodBucket* b = _purge_list; b != NULL;) {
+    nmethodBucket* next = b->purge_list_next();
+    removed++;
+    delete b;
+    b = next;
+  }
+  if (UsePerfData && removed > 0) {
+    _perf_total_buckets_deallocated_count->inc(removed);
+  }
+  _purge_list = NULL;
+}
+
+//
+// Cleanup a dependency context by unlinking and placing all dependents corresponding
+// to is_unloading nmethods on a purge list, which will be deleted later when it is safe.
+void DependencyContext::clean_unloading_dependents() {
+  if (!claim_cleanup()) {
+    // Somebody else is cleaning up this dependency context.
     return;
   }
-  nmethodBucket* first = dependencies();
-  nmethodBucket* last = NULL;
-  int removed = 0;
-  for (nmethodBucket* b = first; b != NULL;) {
-    assert(b->count() >= 0, "bucket count: %d", b->count());
-    nmethodBucket* next = b->next();
-    if (b->count() == 0) {
-      if (last == NULL) {
-        first = next;
-      } else {
-        last->set_next(next);
-      }
-      removed++;
-      delete b;
-      // last stays the same.
-    } else {
-      last = b;
-    }
+  // Walk the nmethodBuckets and move dead entries on the purge list, which will
+  // be deleted during ClassLoaderDataGraph::purge().
+  nmethodBucket* b = dependencies_not_unloading();
+  while (b != NULL) {
+    nmethodBucket* next = b->next_not_unloading();
     b = next;
   }
-  set_dependencies(first);
-  set_has_stale_entries(false);
-  if (UsePerfData && removed > 0) {
-    _perf_total_buckets_deallocated_count->inc(removed);
-    _perf_total_buckets_stale_count->dec(removed);
-  }
 }
 
 //
 // Invalidate all dependencies in the context
 int DependencyContext::remove_all_dependents() {
-  assert_locked_or_safepoint(CodeCache_lock);
-  nmethodBucket* b = dependencies();
+  nmethodBucket* b = dependencies_not_unloading();
   set_dependencies(NULL);
   int marked = 0;
   int removed = 0;
@@ -206,12 +215,11 @@
       nm->mark_for_deoptimization();
       marked++;
     }
-    nmethodBucket* next = b->next();
+    nmethodBucket* next = b->next_not_unloading();
     removed++;
-    delete b;
+    release(b);
     b = next;
   }
-  set_has_stale_entries(false);
   if (UsePerfData && removed > 0) {
     _perf_total_buckets_deallocated_count->inc(removed);
   }
@@ -221,7 +229,7 @@
 #ifndef PRODUCT
 void DependencyContext::print_dependent_nmethods(bool verbose) {
   int idx = 0;
-  for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) {
+  for (nmethodBucket* b = dependencies_not_unloading(); b != NULL; b = b->next_not_unloading()) {
     nmethod* nm = b->get_nmethod();
     tty->print("[%d] count=%d { ", idx++, b->count());
     if (!verbose) {
@@ -236,7 +244,7 @@
 }
 
 bool DependencyContext::is_dependent_nmethod(nmethod* nm) {
-  for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) {
+  for (nmethodBucket* b = dependencies_not_unloading(); b != NULL; b = b->next_not_unloading()) {
     if (nm == b->get_nmethod()) {
 #ifdef ASSERT
       int count = b->count();
@@ -248,15 +256,112 @@
   return false;
 }
 
-bool DependencyContext::find_stale_entries() {
-  for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) {
-    if (b->count() == 0)  return true;
-  }
-  return false;
-}
-
 #endif //PRODUCT
 
 int nmethodBucket::decrement() {
   return Atomic::sub(1, &_count);
 }
+
+// We use a safepoint counter to track the safepoint counter the last time a given
+// dependency context was cleaned. GC threads claim cleanup tasks by performing
+// a CAS on this value.
+bool DependencyContext::claim_cleanup() {
+  uint64_t cleaning_epoch = Atomic::load(&_cleaning_epoch);
+  uint64_t last_cleanup = Atomic::load(_last_cleanup_addr);
+  if (last_cleanup >= cleaning_epoch) {
+    return false;
+  }
+  return Atomic::cmpxchg(cleaning_epoch, _last_cleanup_addr, last_cleanup) == last_cleanup;
+}
+
+// Retrieve the first nmethodBucket that has a dependent that does not correspond to
+// an is_unloading nmethod. Any nmethodBucket entries observed from the original head
+// that is_unloading() will be unlinked and placed on the purge list.
+nmethodBucket* DependencyContext::dependencies_not_unloading() {
+  for (;;) {
+    // Need acquire becase the read value could come from a concurrent insert.
+    nmethodBucket* head = OrderAccess::load_acquire(_dependency_context_addr);
+    if (head == NULL || !head->get_nmethod()->is_unloading()) {
+      return head;
+    }
+    nmethodBucket* head_next = head->next();
+    OrderAccess::loadload();
+    if (Atomic::load(_dependency_context_addr) != head) {
+      // Unstable load of head w.r.t. head->next
+      continue;
+    }
+    if (Atomic::cmpxchg(head_next, _dependency_context_addr, head) == head) {
+      // Release is_unloading entries if unlinking was claimed
+      DependencyContext::release(head);
+    }
+  }
+}
+
+// Relaxed accessors
+void DependencyContext::set_dependencies(nmethodBucket* b) {
+  Atomic::store(b, _dependency_context_addr);
+}
+
+nmethodBucket* DependencyContext::dependencies() {
+  return Atomic::load(_dependency_context_addr);
+}
+
+// After the gc_prologue, the dependency contexts may be claimed by the GC
+// and releasing of nmethodBucket entries will be deferred and placed on
+// a purge list to be deleted later.
+void DependencyContext::cleaning_start() {
+  assert(SafepointSynchronize::is_at_safepoint(), "must be");
+  uint64_t epoch = SafepointSynchronize::safepoint_counter();
+  Atomic::store(epoch, &_cleaning_epoch);
+}
+
+// The epilogue marks the end of dependency context cleanup by the GC,
+// and also makes subsequent releases of nmethodBuckets case immediate
+// deletion. It is admitted to end the cleanup in a concurrent phase.
+void DependencyContext::cleaning_end() {
+  uint64_t epoch = 0;
+  Atomic::store(epoch, &_cleaning_epoch);
+}
+
+// This function skips over nmethodBuckets in the list corresponding to
+// nmethods that are is_unloading. This allows exposing a view of the
+// dependents as-if they were already cleaned, despite being cleaned
+// concurrently. Any entry observed that is_unloading() will be unlinked
+// and placed on the purge list.
+nmethodBucket* nmethodBucket::next_not_unloading() {
+  for (;;) {
+    // Do not need acquire because the loaded entry can never be
+    // concurrently inserted.
+    nmethodBucket* next = Atomic::load(&_next);
+    if (next == NULL || !next->get_nmethod()->is_unloading()) {
+      return next;
+    }
+    nmethodBucket* next_next = Atomic::load(&next->_next);
+    OrderAccess::loadload();
+    if (Atomic::load(&_next) != next) {
+      // Unstable load of next w.r.t. next->next
+      continue;
+    }
+    if (Atomic::cmpxchg(next_next, &_next, next) == next) {
+      // Release is_unloading entries if unlinking was claimed
+      DependencyContext::release(next);
+    }
+  }
+}
+
+// Relaxed accessors
+nmethodBucket* nmethodBucket::next() {
+  return Atomic::load(&_next);
+}
+
+void nmethodBucket::set_next(nmethodBucket* b) {
+  Atomic::store(b, &_next);
+}
+
+nmethodBucket* nmethodBucket::purge_list_next() {
+  return Atomic::load(&_purge_list_next);
+}
+
+void nmethodBucket::set_purge_list_next(nmethodBucket* b) {
+  Atomic::store(b, &_purge_list_next);
+}
--- a/src/hotspot/share/code/dependencyContext.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/code/dependencyContext.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -48,70 +48,50 @@
   friend class VMStructs;
  private:
   nmethod*       _nmethod;
-  int            _count;
-  nmethodBucket* _next;
+  volatile int   _count;
+  nmethodBucket* volatile _next;
+  nmethodBucket* volatile _purge_list_next;
 
  public:
   nmethodBucket(nmethod* nmethod, nmethodBucket* next) :
-   _nmethod(nmethod), _count(1), _next(next) {}
+    _nmethod(nmethod), _count(1), _next(next), _purge_list_next(NULL) {}
 
-  int count()                             { return _count; }
-  int increment()                         { _count += 1; return _count; }
+  int count()                                { return _count; }
+  int increment()                            { _count += 1; return _count; }
   int decrement();
-  nmethodBucket* next()                   { return _next; }
-  void set_next(nmethodBucket* b)         { _next = b; }
-  nmethod* get_nmethod()                  { return _nmethod; }
+  nmethodBucket* next();
+  nmethodBucket* next_not_unloading();
+  void set_next(nmethodBucket* b);
+  nmethodBucket* purge_list_next();
+  void set_purge_list_next(nmethodBucket* b);
+  nmethod* get_nmethod()                     { return _nmethod; }
 };
 
 //
 // Utility class to manipulate nmethod dependency context.
-// The context consists of nmethodBucket* (a head of a linked list)
-// and a boolean flag (does the list contains stale entries). The structure is
-// encoded as an intptr_t: lower bit is used for the flag. It is possible since
-// nmethodBucket* is aligned - the structure is malloc'ed in C heap.
 // Dependency context can be attached either to an InstanceKlass (_dep_context field)
 // or CallSiteContext oop for call_site_target dependencies (see javaClasses.hpp).
-// DependencyContext class operates on some location which holds a intptr_t value.
+// DependencyContext class operates on some location which holds a nmethodBucket* value
+// and uint64_t integer recording the safepoint counter at the last cleanup.
 //
 class DependencyContext : public StackObj {
   friend class VMStructs;
   friend class TestDependencyContext;
  private:
-  enum TagBits { _has_stale_entries_bit = 1, _has_stale_entries_mask = 1 };
-
-  intptr_t* _dependency_context_addr;
-
-  void set_dependencies(nmethodBucket* b) {
-    assert((intptr_t(b) & _has_stale_entries_mask) == 0, "should be aligned");
-    if (has_stale_entries()) {
-      *_dependency_context_addr = intptr_t(b) | _has_stale_entries_mask;
-    } else {
-      *_dependency_context_addr = intptr_t(b);
-    }
-  }
+  nmethodBucket* volatile* _dependency_context_addr;
+  volatile uint64_t*       _last_cleanup_addr;
 
-  void set_has_stale_entries(bool x) {
-    if (x) {
-      *_dependency_context_addr |= _has_stale_entries_mask;
-    } else {
-      *_dependency_context_addr &= ~_has_stale_entries_mask;
-    }
-  }
-
-  nmethodBucket* dependencies() {
-    intptr_t value = *_dependency_context_addr;
-    return (nmethodBucket*) (value & ~_has_stale_entries_mask);
-  }
-
-  bool has_stale_entries() const {
-    intptr_t value = *_dependency_context_addr;
-    return (value & _has_stale_entries_mask) != 0;
-  }
+  bool claim_cleanup();
+  void set_dependencies(nmethodBucket* b);
+  nmethodBucket* dependencies();
+  nmethodBucket* dependencies_not_unloading();
 
   static PerfCounter* _perf_total_buckets_allocated_count;
   static PerfCounter* _perf_total_buckets_deallocated_count;
   static PerfCounter* _perf_total_buckets_stale_count;
   static PerfCounter* _perf_total_buckets_stale_acc_count;
+  static nmethodBucket* volatile _purge_list;
+  static volatile uint64_t       _cleaning_epoch;
 
  public:
 #ifdef ASSERT
@@ -120,31 +100,35 @@
   // (e.g. CallSiteContext Java object).
   uint64_t _safepoint_counter;
 
-  DependencyContext(intptr_t* addr) : _dependency_context_addr(addr),
-    _safepoint_counter(SafepointSynchronize::safepoint_counter()) {}
+  DependencyContext(nmethodBucket* volatile* bucket_addr, volatile uint64_t* last_cleanup_addr)
+    : _dependency_context_addr(bucket_addr),
+      _last_cleanup_addr(last_cleanup_addr),
+      _safepoint_counter(SafepointSynchronize::safepoint_counter()) {}
 
   ~DependencyContext() {
     assert(_safepoint_counter == SafepointSynchronize::safepoint_counter(), "safepoint happened");
   }
 #else
-  DependencyContext(intptr_t* addr) : _dependency_context_addr(addr) {}
+  DependencyContext(nmethodBucket* volatile* bucket_addr, volatile uint64_t* last_cleanup_addr)
+    : _dependency_context_addr(bucket_addr),
+      _last_cleanup_addr(last_cleanup_addr) {}
 #endif // ASSERT
 
-  static const intptr_t EMPTY = 0; // dependencies = NULL, has_stale_entries = false
-
   static void init();
 
   int  mark_dependent_nmethods(DepChange& changes);
-  void add_dependent_nmethod(nmethod* nm, bool expunge_stale_entries = false);
-  void remove_dependent_nmethod(nmethod* nm, bool expunge_stale_entries = false);
+  void add_dependent_nmethod(nmethod* nm);
+  void remove_dependent_nmethod(nmethod* nm);
   int  remove_all_dependents();
-
-  void expunge_stale_entries();
+  void clean_unloading_dependents();
+  static void purge_dependency_contexts();
+  static void release(nmethodBucket* b);
+  static void cleaning_start();
+  static void cleaning_end();
 
 #ifndef PRODUCT
   void print_dependent_nmethods(bool verbose);
   bool is_dependent_nmethod(nmethod* nm);
-  bool find_stale_entries();
 #endif //PRODUCT
 };
 #endif // SHARE_VM_CODE_DEPENDENCYCONTEXT_HPP
--- a/src/hotspot/share/code/nmethod.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/code/nmethod.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -1372,8 +1372,8 @@
 // notifies instanceKlasses that are reachable
 
 void nmethod::flush_dependencies(bool delete_immediately) {
-  assert_locked_or_safepoint(CodeCache_lock);
-  assert(Universe::heap()->is_gc_active() != delete_immediately,
+  DEBUG_ONLY(bool called_by_gc = Universe::heap()->is_gc_active() || Thread::current()->is_ConcurrentGC_thread();)
+  assert(called_by_gc != delete_immediately,
   "delete_immediately is false if and only if we are called during GC");
   if (!has_flushed_dependencies()) {
     set_has_flushed_dependencies();
@@ -1381,7 +1381,12 @@
       if (deps.type() == Dependencies::call_site_target_value) {
         // CallSite dependencies are managed on per-CallSite instance basis.
         oop call_site = deps.argument_oop(0);
-        MethodHandles::remove_dependent_nmethod(call_site, this);
+        if (delete_immediately) {
+          assert_locked_or_safepoint(CodeCache_lock);
+          MethodHandles::remove_dependent_nmethod(call_site, this);
+        } else {
+          MethodHandles::clean_dependency_context(call_site);
+        }
       } else {
         Klass* klass = deps.context_type();
         if (klass == NULL) {
@@ -1389,11 +1394,12 @@
         }
         // During GC delete_immediately is false, and liveness
         // of dependee determines class that needs to be updated.
-        if (delete_immediately || klass->is_loader_alive()) {
-          // The GC defers deletion of this entry, since there might be multiple threads
-          // iterating over the _dependencies graph. Other call paths are single-threaded
-          // and may delete it immediately.
-          InstanceKlass::cast(klass)->remove_dependent_nmethod(this, delete_immediately);
+        if (delete_immediately) {
+          assert_locked_or_safepoint(CodeCache_lock);
+          InstanceKlass::cast(klass)->remove_dependent_nmethod(this);
+        } else if (klass->is_loader_alive()) {
+          // The GC may clean dependency contexts concurrently and in parallel.
+          InstanceKlass::cast(klass)->clean_dependency_context();
         }
       }
     }
--- a/src/hotspot/share/code/nmethod.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/code/nmethod.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -257,6 +257,14 @@
 #endif
   );
 
+  // Only used for unit tests.
+  nmethod()
+    : CompiledMethod(),
+      _is_unloading_state(0),
+      _native_receiver_sp_offset(in_ByteSize(-1)),
+      _native_basic_lock_sp_offset(in_ByteSize(-1)) {}
+
+
   static nmethod* new_native_nmethod(const methodHandle& method,
                                      int compile_id,
                                      CodeBuffer *code_buffer,
--- a/src/hotspot/share/gc/g1/dirtyCardQueue.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/dirtyCardQueue.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -31,6 +31,7 @@
 #include "gc/shared/suspendibleThreadSet.hpp"
 #include "gc/shared/workgroup.hpp"
 #include "runtime/atomic.hpp"
+#include "runtime/flags/flagSetting.hpp"
 #include "runtime/mutexLocker.hpp"
 #include "runtime/safepoint.hpp"
 #include "runtime/thread.inline.hpp"
@@ -148,14 +149,9 @@
 
 void DirtyCardQueueSet::initialize(Monitor* cbl_mon,
                                    BufferNode::Allocator* allocator,
-                                   int process_completed_threshold,
-                                   int max_completed_queue,
                                    Mutex* lock,
                                    bool init_free_ids) {
-  PtrQueueSet::initialize(cbl_mon,
-                          allocator,
-                          process_completed_threshold,
-                          max_completed_queue);
+  PtrQueueSet::initialize(cbl_mon, allocator);
   _shared_dirty_card_queue.set_lock(lock);
   if (init_free_ids) {
     _free_ids = new FreeIdSet(num_par_ids(), _cbl_mon);
@@ -221,23 +217,22 @@
 
 
 BufferNode* DirtyCardQueueSet::get_completed_buffer(size_t stop_at) {
-  BufferNode* nd = NULL;
   MutexLockerEx x(_cbl_mon, Mutex::_no_safepoint_check_flag);
 
   if (_n_completed_buffers <= stop_at) {
-    _process_completed = false;
     return NULL;
   }
 
-  if (_completed_buffers_head != NULL) {
-    nd = _completed_buffers_head;
-    assert(_n_completed_buffers > 0, "Invariant");
-    _completed_buffers_head = nd->next();
-    _n_completed_buffers--;
-    if (_completed_buffers_head == NULL) {
-      assert(_n_completed_buffers == 0, "Invariant");
-      _completed_buffers_tail = NULL;
-    }
+  assert(_n_completed_buffers > 0, "invariant");
+  assert(_completed_buffers_head != NULL, "invariant");
+  assert(_completed_buffers_tail != NULL, "invariant");
+
+  BufferNode* nd = _completed_buffers_head;
+  _completed_buffers_head = nd->next();
+  _n_completed_buffers--;
+  if (_completed_buffers_head == NULL) {
+    assert(_n_completed_buffers == 0, "Invariant");
+    _completed_buffers_tail = NULL;
   }
   DEBUG_ONLY(assert_completed_buffer_list_len_correct_locked());
   return nd;
@@ -335,13 +330,11 @@
   // Iterate over all the threads, if we find a partial log add it to
   // the global list of logs.  Temporarily turn off the limit on the number
   // of outstanding buffers.
-  int save_max_completed_queue = _max_completed_queue;
-  _max_completed_queue = max_jint;
   assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint.");
+  SizeTFlagSetting local_max(_max_completed_buffers,
+                             MaxCompletedBuffersUnlimited);
   for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) {
     concatenate_log(G1ThreadLocalData::dirty_card_queue(t));
   }
   concatenate_log(_shared_dirty_card_queue);
-  // Restore the completed buffer queue limit.
-  _max_completed_queue = save_max_completed_queue;
 }
--- a/src/hotspot/share/gc/g1/dirtyCardQueue.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/dirtyCardQueue.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -119,8 +119,6 @@
 
   void initialize(Monitor* cbl_mon,
                   BufferNode::Allocator* allocator,
-                  int process_completed_threshold,
-                  int max_completed_queue,
                   Mutex* lock,
                   bool init_free_ids = false);
 
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -1016,7 +1016,6 @@
   // Make sure we'll choose a new allocation region afterwards.
   _allocator->release_mutator_alloc_region();
   _allocator->abandon_gc_alloc_regions();
-  g1_rem_set()->cleanupHRRS();
 
   // We may have added regions to the current incremental collection
   // set between the last GC or pause and now. We need to clear the
@@ -1564,16 +1563,33 @@
   guarantee(_task_queues != NULL, "task_queues allocation failure.");
 }
 
+static size_t actual_reserved_page_size(ReservedSpace rs) {
+  size_t page_size = os::vm_page_size();
+  if (UseLargePages) {
+    // There are two ways to manage large page memory.
+    // 1. OS supports committing large page memory.
+    // 2. OS doesn't support committing large page memory so ReservedSpace manages it.
+    //    And ReservedSpace calls it 'special'. If we failed to set 'special',
+    //    we reserved memory without large page.
+    if (os::can_commit_large_page_memory() || rs.special()) {
+      page_size = rs.alignment();
+    }
+  }
+
+  return page_size;
+}
+
 G1RegionToSpaceMapper* G1CollectedHeap::create_aux_memory_mapper(const char* description,
                                                                  size_t size,
                                                                  size_t translation_factor) {
   size_t preferred_page_size = os::page_size_for_region_unaligned(size, 1);
   // Allocate a new reserved space, preferring to use large pages.
   ReservedSpace rs(size, preferred_page_size);
+  size_t page_size = actual_reserved_page_size(rs);
   G1RegionToSpaceMapper* result  =
     G1RegionToSpaceMapper::create_mapper(rs,
                                          size,
-                                         rs.alignment(),
+                                         page_size,
                                          HeapRegion::GrainBytes,
                                          translation_factor,
                                          mtGC);
@@ -1581,7 +1597,7 @@
   os::trace_page_sizes_for_requested_size(description,
                                           size,
                                           preferred_page_size,
-                                          rs.alignment(),
+                                          page_size,
                                           rs.base(),
                                           rs.size());
 
@@ -1660,19 +1676,15 @@
                                                  G1SATBBufferEnqueueingThresholdPercent,
                                                  Shared_SATB_Q_lock);
 
-  // process_completed_threshold and max_completed_queue are updated
+  // process_completed_buffers_threshold and max_completed_buffers are updated
   // later, based on the concurrent refinement object.
   G1BarrierSet::dirty_card_queue_set().initialize(DirtyCardQ_CBL_mon,
                                                   &bs->dirty_card_queue_buffer_allocator(),
-                                                  -1, // temp. never trigger
-                                                  -1, // temp. no limit
                                                   Shared_DirtyCardQ_lock,
                                                   true); // init_free_ids
 
   dirty_card_queue_set().initialize(DirtyCardQ_CBL_mon,
                                     &bs->dirty_card_queue_buffer_allocator(),
-                                    -1, // never trigger processing
-                                    -1, // no limit on length
                                     Shared_DirtyCardQ_lock);
 
   // Create the hot card cache.
@@ -1680,7 +1692,7 @@
 
   // Carve out the G1 part of the heap.
   ReservedSpace g1_rs = heap_rs.first_part(max_byte_size);
-  size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size();
+  size_t page_size = actual_reserved_page_size(heap_rs);
   G1RegionToSpaceMapper* heap_storage =
     G1RegionToSpaceMapper::create_mapper(g1_rs,
                                          g1_rs.size(),
@@ -1783,8 +1795,8 @@
 
   {
     DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
-    dcqs.set_process_completed_threshold((int)concurrent_refine()->yellow_zone());
-    dcqs.set_max_completed_queue((int)concurrent_refine()->red_zone());
+    dcqs.set_process_completed_buffers_threshold(concurrent_refine()->yellow_zone());
+    dcqs.set_max_completed_buffers(concurrent_refine()->red_zone());
   }
 
   // Here we allocate the dummy HeapRegion that is required by the
@@ -2974,13 +2986,6 @@
 
         evacuation_info.set_collectionset_regions(collection_set()->region_length());
 
-        // Make sure the remembered sets are up to date. This needs to be
-        // done before register_humongous_regions_with_cset(), because the
-        // remembered sets are used there to choose eager reclaim candidates.
-        // If the remembered sets are not up to date we might miss some
-        // entries that need to be handled.
-        g1_rem_set()->cleanupHRRS();
-
         register_humongous_regions_with_cset();
 
         assert(_verifier->check_cset_fast_test(), "Inconsistency in the InCSetState table.");
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -60,7 +60,6 @@
 
 // Forward declarations
 class HeapRegion;
-class HRRSCleanupTask;
 class GenerationSpec;
 class G1ParScanThreadState;
 class G1ParScanThreadStateSet;
--- a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -1217,18 +1217,15 @@
     FreeRegionList* _local_cleanup_list;
     uint _old_regions_removed;
     uint _humongous_regions_removed;
-    HRRSCleanupTask* _hrrs_cleanup_task;
 
   public:
     G1ReclaimEmptyRegionsClosure(G1CollectedHeap* g1h,
-                                 FreeRegionList* local_cleanup_list,
-                                 HRRSCleanupTask* hrrs_cleanup_task) :
+                                 FreeRegionList* local_cleanup_list) :
       _g1h(g1h),
       _freed_bytes(0),
       _local_cleanup_list(local_cleanup_list),
       _old_regions_removed(0),
-      _humongous_regions_removed(0),
-      _hrrs_cleanup_task(hrrs_cleanup_task) { }
+      _humongous_regions_removed(0) { }
 
     size_t freed_bytes() { return _freed_bytes; }
     const uint old_regions_removed() { return _old_regions_removed; }
@@ -1248,8 +1245,6 @@
         hr->clear_cardtable();
         _g1h->concurrent_mark()->clear_statistics_in_region(hr->hrm_index());
         log_trace(gc)("Reclaimed empty region %u (%s) bot " PTR_FORMAT, hr->hrm_index(), hr->get_short_type_str(), p2i(hr->bottom()));
-      } else {
-        hr->rem_set()->do_cleanup_work(_hrrs_cleanup_task);
       }
 
       return false;
@@ -1266,16 +1261,11 @@
     _g1h(g1h),
     _cleanup_list(cleanup_list),
     _hrclaimer(n_workers) {
-
-    HeapRegionRemSet::reset_for_cleanup_tasks();
   }
 
   void work(uint worker_id) {
     FreeRegionList local_cleanup_list("Local Cleanup List");
-    HRRSCleanupTask hrrs_cleanup_task;
-    G1ReclaimEmptyRegionsClosure cl(_g1h,
-                                    &local_cleanup_list,
-                                    &hrrs_cleanup_task);
+    G1ReclaimEmptyRegionsClosure cl(_g1h, &local_cleanup_list);
     _g1h->heap_region_par_iterate_from_worker_offset(&cl, &_hrclaimer, worker_id);
     assert(cl.is_complete(), "Shouldn't have aborted!");
 
@@ -1287,8 +1277,6 @@
 
       _cleanup_list->add_ordered(&local_cleanup_list);
       assert(local_cleanup_list.is_empty(), "post-condition");
-
-      HeapRegionRemSet::finish_cleanup_task(&hrrs_cleanup_task);
     }
   }
 };
--- a/src/hotspot/share/gc/g1/g1ConcurrentRefine.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1ConcurrentRefine.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -144,7 +144,7 @@
 STATIC_ASSERT(sizeof(LP64_ONLY(jint) NOT_LP64(jshort)) <= (sizeof(size_t)/2));
 const size_t max_yellow_zone = LP64_ONLY(max_jint) NOT_LP64(max_jshort);
 const size_t max_green_zone = max_yellow_zone / 2;
-const size_t max_red_zone = INT_MAX; // For dcqs.set_max_completed_queue.
+const size_t max_red_zone = INT_MAX; // For dcqs.set_max_completed_buffers.
 STATIC_ASSERT(max_yellow_zone <= max_red_zone);
 
 // Range check assertions for green zone values.
@@ -386,21 +386,22 @@
     // Change the barrier params
     if (max_num_threads() == 0) {
       // Disable dcqs notification when there are no threads to notify.
-      dcqs.set_process_completed_threshold(INT_MAX);
+      dcqs.set_process_completed_buffers_threshold(DirtyCardQueueSet::ProcessCompletedBuffersThresholdNever);
     } else {
       // Worker 0 is the primary; wakeup is via dcqs notification.
       STATIC_ASSERT(max_yellow_zone <= INT_MAX);
       size_t activate = activation_threshold(0);
-      dcqs.set_process_completed_threshold((int)activate);
+      dcqs.set_process_completed_buffers_threshold(activate);
     }
-    dcqs.set_max_completed_queue((int)red_zone());
+    dcqs.set_max_completed_buffers(red_zone());
   }
 
   size_t curr_queue_size = dcqs.completed_buffers_num();
-  if (curr_queue_size >= yellow_zone()) {
-    dcqs.set_completed_queue_padding(curr_queue_size);
+  if ((dcqs.max_completed_buffers() > 0) &&
+      (curr_queue_size >= yellow_zone())) {
+    dcqs.set_completed_buffers_padding(curr_queue_size);
   } else {
-    dcqs.set_completed_queue_padding(0);
+    dcqs.set_completed_buffers_padding(0);
   }
   dcqs.notify_if_necessary();
 }
@@ -433,8 +434,8 @@
   // that means that the transition period after the evacuation pause has ended.
   // Since the value written to the DCQS is the same for all threads, there is no
   // need to synchronize.
-  if (dcqs.completed_queue_padding() > 0 && curr_buffer_num <= yellow_zone()) {
-    dcqs.set_completed_queue_padding(0);
+  if (dcqs.completed_buffers_padding() > 0 && curr_buffer_num <= yellow_zone()) {
+    dcqs.set_completed_buffers_padding(0);
   }
 
   maybe_activate_more_threads(worker_id, curr_buffer_num);
--- a/src/hotspot/share/gc/g1/g1RemSet.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1RemSet.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -512,10 +512,6 @@
   }
 }
 
-void G1RemSet::cleanupHRRS() {
-  HeapRegionRemSet::cleanup();
-}
-
 void G1RemSet::oops_into_collection_set_do(G1ParScanThreadState* pss, uint worker_i) {
   update_rem_set(pss, worker_i);
   scan_rem_set(pss, worker_i);;
--- a/src/hotspot/share/gc/g1/g1RemSet.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1RemSet.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -86,11 +86,6 @@
   // Initialize data that depends on the heap size being known.
   void initialize(size_t capacity, uint max_regions);
 
-  // This is called to reset dual hash tables after the gc pause
-  // is finished and the initial hash table is no longer being
-  // scanned.
-  void cleanupHRRS();
-
   G1RemSet(G1CollectedHeap* g1h,
            G1CardTable* ct,
            G1HotCardCache* hot_card_cache);
--- a/src/hotspot/share/gc/g1/g1SATBMarkQueueSet.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1SATBMarkQueueSet.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -37,12 +37,12 @@
 void G1SATBMarkQueueSet::initialize(G1CollectedHeap* g1h,
                                     Monitor* cbl_mon,
                                     BufferNode::Allocator* allocator,
-                                    int process_completed_threshold,
+                                    size_t process_completed_buffers_threshold,
                                     uint buffer_enqueue_threshold_percentage,
                                     Mutex* lock) {
   SATBMarkQueueSet::initialize(cbl_mon,
                                allocator,
-                               process_completed_threshold,
+                               process_completed_buffers_threshold,
                                buffer_enqueue_threshold_percentage,
                                lock);
   _g1h = g1h;
--- a/src/hotspot/share/gc/g1/g1SATBMarkQueueSet.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1SATBMarkQueueSet.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -39,7 +39,7 @@
   void initialize(G1CollectedHeap* g1h,
                   Monitor* cbl_mon,
                   BufferNode::Allocator* allocator,
-                  int process_completed_threshold,
+                  size_t process_completed_buffers_threshold,
                   uint buffer_enqueue_threshold_percentage,
                   Mutex* lock);
 
--- a/src/hotspot/share/gc/g1/heapRegionRemSet.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/heapRegionRemSet.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -598,11 +598,6 @@
   }
 }
 
-void
-OtherRegionsTable::do_cleanup_work(HRRSCleanupTask* hrrs_cleanup_task) {
-  _sparse_table.do_cleanup_work(hrrs_cleanup_task);
-}
-
 HeapRegionRemSet::HeapRegionRemSet(G1BlockOffsetTable* bot,
                                    HeapRegion* hr)
   : _bot(bot),
@@ -632,10 +627,6 @@
   guarantee(G1RSetSparseRegionEntries > 0 && G1RSetRegionEntries > 0 , "Sanity");
 }
 
-void HeapRegionRemSet::cleanup() {
-  SparsePRT::cleanup_all();
-}
-
 void HeapRegionRemSet::clear(bool only_cardset) {
   MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag);
   clear_locked(only_cardset);
@@ -819,18 +810,6 @@
   return false;
 }
 
-void HeapRegionRemSet::reset_for_cleanup_tasks() {
-  SparsePRT::reset_for_cleanup_tasks();
-}
-
-void HeapRegionRemSet::do_cleanup_work(HRRSCleanupTask* hrrs_cleanup_task) {
-  _other_regions.do_cleanup_work(hrrs_cleanup_task);
-}
-
-void HeapRegionRemSet::finish_cleanup_task(HRRSCleanupTask* hrrs_cleanup_task) {
-  SparsePRT::finish_cleanup_task(hrrs_cleanup_task);
-}
-
 #ifndef PRODUCT
 void HeapRegionRemSet::test() {
   os::sleep(Thread::current(), (jlong)5000, false);
--- a/src/hotspot/share/gc/g1/heapRegionRemSet.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/heapRegionRemSet.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -42,11 +42,6 @@
 class SparsePRT;
 class nmethod;
 
-// Essentially a wrapper around SparsePRTCleanupTask. See
-// sparsePRT.hpp for more details.
-class HRRSCleanupTask : public SparsePRTCleanupTask {
-};
-
 // The "_coarse_map" is a bitmap with one bit for each region, where set
 // bits indicate that the corresponding region may contain some pointer
 // into the owning region.
@@ -122,6 +117,10 @@
 
   bool contains_reference_locked(OopOrNarrowOopStar from) const;
 
+  size_t occ_fine() const;
+  size_t occ_coarse() const;
+  size_t occ_sparse() const;
+
 public:
   // Create a new remembered set. The given mutex is used to ensure consistency.
   OtherRegionsTable(Mutex* m);
@@ -144,9 +143,6 @@
 
   // Returns the number of cards contained in this remembered set.
   size_t occupied() const;
-  size_t occ_fine() const;
-  size_t occ_coarse() const;
-  size_t occ_sparse() const;
 
   static jint n_coarsenings() { return _n_coarsenings; }
 
@@ -159,8 +155,6 @@
 
   // Clear the entire contents of this remembered set.
   void clear();
-
-  void do_cleanup_work(HRRSCleanupTask* hrrs_cleanup_task);
 };
 
 class HeapRegionRemSet : public CHeapObj<mtGC> {
@@ -206,15 +200,6 @@
   size_t occupied_locked() {
     return _other_regions.occupied();
   }
-  size_t occ_fine() const {
-    return _other_regions.occ_fine();
-  }
-  size_t occ_coarse() const {
-    return _other_regions.occ_coarse();
-  }
-  size_t occ_sparse() const {
-    return _other_regions.occ_sparse();
-  }
 
   static jint n_coarsenings() { return OtherRegionsTable::n_coarsenings(); }
 
@@ -340,9 +325,6 @@
   // consumed by the strong code roots.
   size_t strong_code_roots_mem_size();
 
-  // Called during a stop-world phase to perform any deferred cleanups.
-  static void cleanup();
-
   static void invalidate_from_card_cache(uint start_idx, size_t num_regions) {
     G1FromCardCache::invalidate(start_idx, num_regions);
   }
@@ -351,16 +333,7 @@
   static void print_from_card_cache() {
     G1FromCardCache::print();
   }
-#endif
 
-  // These are wrappers for the similarly-named methods on
-  // SparsePRT. Look at sparsePRT.hpp for more details.
-  static void reset_for_cleanup_tasks();
-  void do_cleanup_work(HRRSCleanupTask* hrrs_cleanup_task);
-  static void finish_cleanup_task(HRRSCleanupTask* hrrs_cleanup_task);
-
-  // Run unit tests.
-#ifndef PRODUCT
   static void test();
 #endif
 };
--- a/src/hotspot/share/gc/g1/sparsePRT.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/sparsePRT.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -287,165 +287,55 @@
 
 // ----------------------------------------------------------------------
 
-SparsePRT* volatile SparsePRT::_head_expanded_list = NULL;
-
-void SparsePRT::add_to_expanded_list(SparsePRT* sprt) {
-  // We could expand multiple times in a pause -- only put on list once.
-  if (sprt->expanded()) return;
-  sprt->set_expanded(true);
-  SparsePRT* hd = _head_expanded_list;
-  while (true) {
-    sprt->_next_expanded = hd;
-    SparsePRT* res = Atomic::cmpxchg(sprt, &_head_expanded_list, hd);
-    if (res == hd) return;
-    else hd = res;
-  }
-}
-
-
-SparsePRT* SparsePRT::get_from_expanded_list() {
-  SparsePRT* hd = _head_expanded_list;
-  while (hd != NULL) {
-    SparsePRT* next = hd->next_expanded();
-    SparsePRT* res = Atomic::cmpxchg(next, &_head_expanded_list, hd);
-    if (res == hd) {
-      hd->set_next_expanded(NULL);
-      return hd;
-    } else {
-      hd = res;
-    }
-  }
-  return NULL;
-}
-
-void SparsePRT::reset_for_cleanup_tasks() {
-  _head_expanded_list = NULL;
-}
-
-void SparsePRT::do_cleanup_work(SparsePRTCleanupTask* sprt_cleanup_task) {
-  if (should_be_on_expanded_list()) {
-    sprt_cleanup_task->add(this);
-  }
-}
-
-void SparsePRT::finish_cleanup_task(SparsePRTCleanupTask* sprt_cleanup_task) {
-  assert(ParGCRareEvent_lock->owned_by_self(), "pre-condition");
-  SparsePRT* head = sprt_cleanup_task->head();
-  SparsePRT* tail = sprt_cleanup_task->tail();
-  if (head != NULL) {
-    assert(tail != NULL, "if head is not NULL, so should tail");
-
-    tail->set_next_expanded(_head_expanded_list);
-    _head_expanded_list = head;
-  } else {
-    assert(tail == NULL, "if head is NULL, so should tail");
-  }
-}
-
-bool SparsePRT::should_be_on_expanded_list() {
-  if (_expanded) {
-    assert(_cur != _next, "if _expanded is true, cur should be != _next");
-  } else {
-    assert(_cur == _next, "if _expanded is false, cur should be == _next");
-  }
-  return expanded();
-}
-
-void SparsePRT::cleanup_all() {
-  // First clean up all expanded tables so they agree on next and cur.
-  SparsePRT* sprt = get_from_expanded_list();
-  while (sprt != NULL) {
-    sprt->cleanup();
-    sprt = get_from_expanded_list();
-  }
-}
-
-
 SparsePRT::SparsePRT() :
-  _expanded(false), _next_expanded(NULL)
-{
-  _cur = new RSHashTable(InitialCapacity);
-  _next = _cur;
+  _table(new RSHashTable(InitialCapacity)) {
 }
 
 
 SparsePRT::~SparsePRT() {
-  assert(_next != NULL && _cur != NULL, "Inv");
-  if (_cur != _next) { delete _cur; }
-  delete _next;
+  delete _table;
 }
 
 
 size_t SparsePRT::mem_size() const {
   // We ignore "_cur" here, because it either = _next, or else it is
   // on the deleted list.
-  return sizeof(SparsePRT) + _next->mem_size();
+  return sizeof(SparsePRT) + _table->mem_size();
 }
 
 bool SparsePRT::add_card(RegionIdx_t region_id, CardIdx_t card_index) {
-  if (_next->should_expand()) {
+  if (_table->should_expand()) {
     expand();
   }
-  return _next->add_card(region_id, card_index);
+  return _table->add_card(region_id, card_index);
 }
 
 SparsePRTEntry* SparsePRT::get_entry(RegionIdx_t region_id) {
-  return _next->get_entry(region_id);
+  return _table->get_entry(region_id);
 }
 
 bool SparsePRT::delete_entry(RegionIdx_t region_id) {
-  return _next->delete_entry(region_id);
+  return _table->delete_entry(region_id);
 }
 
 void SparsePRT::clear() {
-  // If they differ, _next is bigger then cur, so next has no chance of
-  // being the initial size.
-  if (_next != _cur) {
-    delete _next;
-  }
-
-  if (_cur->capacity() != InitialCapacity) {
-    delete _cur;
-    _cur = new RSHashTable(InitialCapacity);
+  // If the entry table is not at initial capacity, just create a new one.
+  if (_table->capacity() != InitialCapacity) {
+    delete _table;
+    _table = new RSHashTable(InitialCapacity);
   } else {
-    _cur->clear();
+    _table->clear();
   }
-  _next = _cur;
-  _expanded = false;
-}
-
-void SparsePRT::cleanup() {
-  // Make sure that the current and next tables agree.
-  if (_cur != _next) {
-    delete _cur;
-  }
-  _cur = _next;
-  set_expanded(false);
 }
 
 void SparsePRT::expand() {
-  RSHashTable* last = _next;
-  _next = new RSHashTable(last->capacity() * 2);
+  RSHashTable* last = _table;
+  _table = new RSHashTable(last->capacity() * 2);
   for (size_t i = 0; i < last->num_entries(); i++) {
     SparsePRTEntry* e = last->entry((int)i);
     if (e->valid_entry()) {
-      _next->add_entry(e);
+      _table->add_entry(e);
     }
   }
-  if (last != _cur) {
-    delete last;
-  }
-  add_to_expanded_list(this);
+  delete last;
 }
-
-void SparsePRTCleanupTask::add(SparsePRT* sprt) {
-  assert(sprt->should_be_on_expanded_list(), "pre-condition");
-
-  sprt->set_next_expanded(NULL);
-  if (_tail != NULL) {
-    _tail->set_next_expanded(sprt);
-  } else {
-    _head = sprt;
-  }
-  _tail = sprt;
-}
--- a/src/hotspot/share/gc/g1/sparsePRT.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/g1/sparsePRT.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -37,12 +37,6 @@
 // indices of other regions to short sequences of cards in the other region
 // that might contain pointers into the owner region.
 
-// These tables only expand while they are accessed in parallel --
-// deletions may be done in single-threaded code.  This allows us to allow
-// unsynchronized reads/iterations, as long as expansions caused by
-// insertions only enqueue old versions for deletions, but do not delete
-// old versions synchronously.
-
 class SparsePRTEntry: public CHeapObj<mtGC> {
 private:
   // The type of a card entry.
@@ -158,8 +152,6 @@
   // entries to a larger-capacity representation.
   bool add_card(RegionIdx_t region_id, CardIdx_t card_index);
 
-  bool get_cards(RegionIdx_t region_id, CardIdx_t* cards);
-
   bool delete_entry(RegionIdx_t region_id);
 
   bool contains_card(RegionIdx_t region_id, CardIdx_t card_index) const;
@@ -220,16 +212,11 @@
 // Concurrent access to a SparsePRT must be serialized by some external mutex.
 
 class SparsePRTIter;
-class SparsePRTCleanupTask;
 
 class SparsePRT {
-  friend class SparsePRTCleanupTask;
+  friend class SparsePRTIter;
 
-  //  Iterations are done on the _cur hash table, since they only need to
-  //  see entries visible at the start of a collection pause.
-  //  All other operations are done using the _next hash table.
-  RSHashTable* _cur;
-  RSHashTable* _next;
+  RSHashTable* _table;
 
   enum SomeAdditionalPrivateConstants {
     InitialCapacity = 16
@@ -237,26 +224,11 @@
 
   void expand();
 
-  bool _expanded;
-
-  bool expanded() { return _expanded; }
-  void set_expanded(bool b) { _expanded = b; }
-
-  SparsePRT* _next_expanded;
-
-  SparsePRT* next_expanded() { return _next_expanded; }
-  void set_next_expanded(SparsePRT* nxt) { _next_expanded = nxt; }
-
-  bool should_be_on_expanded_list();
-
-  static SparsePRT* volatile _head_expanded_list;
-
 public:
   SparsePRT();
-
   ~SparsePRT();
 
-  size_t occupied() const { return _next->occupied_cards(); }
+  size_t occupied() const { return _table->occupied_cards(); }
   size_t mem_size() const;
 
   // Attempts to ensure that the given card_index in the given region is in
@@ -277,72 +249,19 @@
   // Clear the table, and reinitialize to initial capacity.
   void clear();
 
-  // Ensure that "_cur" and "_next" point to the same table.
-  void cleanup();
-
-  // Clean up all tables on the expanded list.  Called single threaded.
-  static void cleanup_all();
-  RSHashTable* cur() const { return _cur; }
-
-  static void add_to_expanded_list(SparsePRT* sprt);
-  static SparsePRT* get_from_expanded_list();
-
-  // The purpose of these three methods is to help the GC workers
-  // during the cleanup pause to recreate the expanded list, purging
-  // any tables from it that belong to regions that are freed during
-  // cleanup (if we don't purge those tables, there is a race that
-  // causes various crashes; see CR 7014261).
-  //
-  // We chose to recreate the expanded list, instead of purging
-  // entries from it by iterating over it, to avoid this serial phase
-  // at the end of the cleanup pause.
-  //
-  // The three methods below work as follows:
-  // * reset_for_cleanup_tasks() : Nulls the expanded list head at the
-  //   start of the cleanup pause.
-  // * do_cleanup_work() : Called by the cleanup workers for every
-  //   region that is not free / is being freed by the cleanup
-  //   pause. It creates a list of expanded tables whose head / tail
-  //   are on the thread-local SparsePRTCleanupTask object.
-  // * finish_cleanup_task() : Called by the cleanup workers after
-  //   they complete their cleanup task. It adds the local list into
-  //   the global expanded list. It assumes that the
-  //   ParGCRareEvent_lock is being held to ensure MT-safety.
-  static void reset_for_cleanup_tasks();
-  void do_cleanup_work(SparsePRTCleanupTask* sprt_cleanup_task);
-  static void finish_cleanup_task(SparsePRTCleanupTask* sprt_cleanup_task);
-
   bool contains_card(RegionIdx_t region_id, CardIdx_t card_index) const {
-    return _next->contains_card(region_id, card_index);
+    return _table->contains_card(region_id, card_index);
   }
 };
 
 class SparsePRTIter: public RSHashTableIter {
 public:
   SparsePRTIter(const SparsePRT* sprt) :
-    RSHashTableIter(sprt->cur()) {}
+    RSHashTableIter(sprt->_table) { }
 
   bool has_next(size_t& card_index) {
     return RSHashTableIter::has_next(card_index);
   }
 };
 
-// This allows each worker during a cleanup pause to create a
-// thread-local list of sparse tables that have been expanded and need
-// to be processed at the beginning of the next GC pause. This lists
-// are concatenated into the single expanded list at the end of the
-// cleanup pause.
-class SparsePRTCleanupTask {
-private:
-  SparsePRT* _head;
-  SparsePRT* _tail;
-
-public:
-  SparsePRTCleanupTask() : _head(NULL), _tail(NULL) { }
-
-  void add(SparsePRT* sprt);
-  SparsePRT* head() { return _head; }
-  SparsePRT* tail() { return _tail; }
-};
-
 #endif // SHARE_VM_GC_G1_SPARSEPRT_HPP
--- a/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -61,6 +61,7 @@
 class IdealKit;
 class Node;
 class PhaseGVN;
+class PhaseIdealLoop;
 class PhaseMacroExpand;
 class Type;
 class TypePtr;
@@ -277,9 +278,12 @@
   // Allow barrier sets to have shared state that is preserved across a compilation unit.
   // This could for example comprise macro nodes to be expanded during macro expansion.
   virtual void* create_barrier_state(Arena* comp_arena) const { return NULL; }
-  // If the BarrierSetC2 state has kept macro nodes in its compilation unit state to be
-  // expanded later, then now is the time to do so.
-  virtual bool expand_macro_nodes(PhaseMacroExpand* macro) const { return false; }
+  // If the BarrierSetC2 state has barrier nodes in its compilation
+  // unit state to be expanded later, then now is the time to do so.
+  virtual bool expand_barriers(Compile* C, PhaseIterGVN& igvn) const { return false; }
+  virtual bool optimize_loops(PhaseIdealLoop* phase, LoopOptsMode mode, VectorSet& visited, Node_Stack& nstack, Node_List& worklist) const { return false; }
+  virtual bool strip_mined_loops_expanded(LoopOptsMode mode) const { return false; }
+  virtual bool is_gc_specific_loop_opts_pass(LoopOptsMode mode) const { return false; }
 
   virtual bool has_special_unique_user(const Node* node) const { return false; }
 
@@ -309,6 +313,7 @@
   virtual void igvn_add_users_to_worklist(PhaseIterGVN* igvn, Node* use) const {}
   virtual void ccp_analyze(PhaseCCP* ccp, Unique_Node_List& worklist, Node* use) const {}
 
+  virtual Node* split_if_pre(PhaseIdealLoop* phase, Node* n) const { return NULL; }
 };
 
 #endif // SHARE_GC_SHARED_C2_BARRIERSETC2_HPP
--- a/src/hotspot/share/gc/shared/ptrQueue.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/shared/ptrQueue.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -164,12 +164,12 @@
   _completed_buffers_head(NULL),
   _completed_buffers_tail(NULL),
   _n_completed_buffers(0),
-  _process_completed_threshold(0),
+  _process_completed_buffers_threshold(ProcessCompletedBuffersThresholdNever),
   _process_completed(false),
   _all_active(false),
   _notify_when_complete(notify_when_complete),
-  _max_completed_queue(0),
-  _completed_queue_padding(0)
+  _max_completed_buffers(MaxCompletedBuffersUnlimited),
+  _completed_buffers_padding(0)
 {}
 
 PtrQueueSet::~PtrQueueSet() {
@@ -179,12 +179,7 @@
 }
 
 void PtrQueueSet::initialize(Monitor* cbl_mon,
-                             BufferNode::Allocator* allocator,
-                             int process_completed_threshold,
-                             int max_completed_queue) {
-  _max_completed_queue = max_completed_queue;
-  _process_completed_threshold = process_completed_threshold;
-  _completed_queue_padding = 0;
+                             BufferNode::Allocator* allocator) {
   assert(cbl_mon != NULL && allocator != NULL, "Init order issue?");
   _cbl_mon = cbl_mon;
   _allocator = allocator;
@@ -238,13 +233,14 @@
 
 bool PtrQueueSet::process_or_enqueue_complete_buffer(BufferNode* node) {
   if (Thread::current()->is_Java_thread()) {
-    // We don't lock. It is fine to be epsilon-precise here.
-    if (_max_completed_queue == 0 ||
-        (_max_completed_queue > 0 &&
-          _n_completed_buffers >= _max_completed_queue + _completed_queue_padding)) {
-      bool b = mut_process_buffer(node);
-      if (b) {
-        // True here means that the buffer hasn't been deallocated and the caller may reuse it.
+    // If the number of buffers exceeds the limit, make this Java
+    // thread do the processing itself.  We don't lock to access
+    // buffer count or padding; it is fine to be imprecise here.  The
+    // add of padding could overflow, which is treated as unlimited.
+    size_t limit = _max_completed_buffers + _completed_buffers_padding;
+    if ((_n_completed_buffers > limit) && (limit >= _max_completed_buffers)) {
+      if (mut_process_buffer(node)) {
+        // Successfully processed; return true to allow buffer reuse.
         return true;
       }
     }
@@ -267,8 +263,8 @@
   }
   _n_completed_buffers++;
 
-  if (!_process_completed && _process_completed_threshold >= 0 &&
-      _n_completed_buffers >= (size_t)_process_completed_threshold) {
+  if (!_process_completed &&
+      (_n_completed_buffers > _process_completed_buffers_threshold)) {
     _process_completed = true;
     if (_notify_when_complete) {
       _cbl_mon->notify();
@@ -327,8 +323,7 @@
 
 void PtrQueueSet::notify_if_necessary() {
   MutexLockerEx x(_cbl_mon, Mutex::_no_safepoint_check_flag);
-  assert(_process_completed_threshold >= 0, "_process_completed is negative");
-  if (_n_completed_buffers >= (size_t)_process_completed_threshold || _max_completed_queue == 0) {
+  if (_n_completed_buffers > _process_completed_buffers_threshold) {
     _process_completed = true;
     if (_notify_when_complete)
       _cbl_mon->notify();
--- a/src/hotspot/share/gc/shared/ptrQueue.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/shared/ptrQueue.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -284,7 +284,7 @@
   BufferNode* _completed_buffers_head;
   BufferNode* _completed_buffers_tail;
   size_t _n_completed_buffers;
-  int _process_completed_threshold;
+  size_t _process_completed_buffers_threshold;
   volatile bool _process_completed;
 
   bool _all_active;
@@ -293,9 +293,9 @@
   bool _notify_when_complete;
 
   // Maximum number of elements allowed on completed queue: after that,
-  // enqueuer does the work itself.  Zero indicates no maximum.
-  int _max_completed_queue;
-  size_t _completed_queue_padding;
+  // enqueuer does the work itself.
+  size_t _max_completed_buffers;
+  size_t _completed_buffers_padding;
 
   size_t completed_buffers_list_length();
   void assert_completed_buffer_list_len_correct_locked();
@@ -316,10 +316,7 @@
 
   // Because of init-order concerns, we can't pass these as constructor
   // arguments.
-  void initialize(Monitor* cbl_mon,
-                  BufferNode::Allocator* allocator,
-                  int process_completed_threshold,
-                  int max_completed_queue);
+  void initialize(Monitor* cbl_mon, BufferNode::Allocator* allocator);
 
 public:
 
@@ -350,18 +347,34 @@
   }
 
   // Get/Set the number of completed buffers that triggers log processing.
-  void set_process_completed_threshold(int sz) { _process_completed_threshold = sz; }
-  int process_completed_threshold() const { return _process_completed_threshold; }
+  // Log processing should be done when the number of buffers exceeds the
+  // threshold.
+  void set_process_completed_buffers_threshold(size_t sz) {
+    _process_completed_buffers_threshold = sz;
+  }
+  size_t process_completed_buffers_threshold() const {
+    return _process_completed_buffers_threshold;
+  }
+  static const size_t ProcessCompletedBuffersThresholdNever = ~size_t(0);
 
-  size_t completed_buffers_num() { return _n_completed_buffers; }
+  size_t completed_buffers_num() const { return _n_completed_buffers; }
 
   void merge_bufferlists(PtrQueueSet* src);
 
-  void set_max_completed_queue(int m) { _max_completed_queue = m; }
-  int max_completed_queue() { return _max_completed_queue; }
+  void set_max_completed_buffers(size_t m) {
+    _max_completed_buffers = m;
+  }
+  size_t max_completed_buffers() const {
+    return _max_completed_buffers;
+  }
+  static const size_t MaxCompletedBuffersUnlimited = ~size_t(0);
 
-  void set_completed_queue_padding(size_t padding) { _completed_queue_padding = padding; }
-  size_t completed_queue_padding() { return _completed_queue_padding; }
+  void set_completed_buffers_padding(size_t padding) {
+    _completed_buffers_padding = padding;
+  }
+  size_t completed_buffers_padding() const {
+    return _completed_buffers_padding;
+  }
 
   // Notify the consumer if the number of buffers crossed the threshold
   void notify_if_necessary();
--- a/src/hotspot/share/gc/shared/satbMarkQueue.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/shared/satbMarkQueue.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -113,10 +113,11 @@
 
 void SATBMarkQueueSet::initialize(Monitor* cbl_mon,
                                   BufferNode::Allocator* allocator,
-                                  int process_completed_threshold,
+                                  size_t process_completed_buffers_threshold,
                                   uint buffer_enqueue_threshold_percentage,
                                   Mutex* lock) {
-  PtrQueueSet::initialize(cbl_mon, allocator, process_completed_threshold, -1);
+  PtrQueueSet::initialize(cbl_mon, allocator);
+  set_process_completed_buffers_threshold(process_completed_buffers_threshold);
   _shared_satb_queue.set_lock(lock);
   assert(buffer_size() != 0, "buffer size not initialized");
   // Minimum threshold of 1 ensures enqueuing of completely full buffers.
--- a/src/hotspot/share/gc/shared/satbMarkQueue.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/shared/satbMarkQueue.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -110,7 +110,7 @@
 
   void initialize(Monitor* cbl_mon,
                   BufferNode::Allocator* allocator,
-                  int process_completed_threshold,
+                  size_t process_completed_buffers_threshold,
                   uint buffer_enqueue_threshold_percentage,
                   Mutex* lock);
 
--- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -658,8 +658,6 @@
       kit->set_control(gvn.transform(new ProjNode(barrier, LoadBarrierNode::Control)));
     }
     Node* result = gvn.transform(new ProjNode(transformed_barrier, LoadBarrierNode::Oop));
-    assert(is_gc_barrier_node(result), "sanity");
-    assert(step_over_gc_barrier(result) == val, "sanity");
     return result;
   } else {
     return val;
@@ -996,9 +994,8 @@
   return;
 }
 
-bool ZBarrierSetC2::expand_macro_nodes(PhaseMacroExpand* macro) const {
-  Compile* C = Compile::current();
-  PhaseIterGVN &igvn = macro->igvn();
+bool ZBarrierSetC2::expand_barriers(Compile* C, PhaseIterGVN& igvn) const {
+  PhaseMacroExpand macro(igvn);
   ZBarrierSetC2State* s = state();
   if (s->load_barrier_count() > 0) {
 #ifdef ASSERT
@@ -1018,7 +1015,7 @@
         skipped++;
         continue;
       }
-      expand_loadbarrier_node(macro, n);
+      expand_loadbarrier_node(&macro, n);
       assert(s->load_barrier_count() < load_barrier_count, "must have deleted a node from load barrier list");
       if (C->failing())  return true;
     }
@@ -1027,7 +1024,7 @@
       LoadBarrierNode* n = s->load_barrier_node(load_barrier_count - 1);
       assert(!(igvn.type(n) == Type::TOP || (n->in(0) != NULL && n->in(0)->is_top())), "should have been processed already");
       assert(!n->can_be_eliminated(), "should have been processed already");
-      expand_loadbarrier_node(macro, n);
+      expand_loadbarrier_node(&macro, n);
       assert(s->load_barrier_count() < load_barrier_count, "must have deleted a node from load barrier list");
       if (C->failing())  return true;
     }
@@ -1623,4 +1620,4 @@
       break;
   }
   return false;
-}
\ No newline at end of file
+}
--- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -200,9 +200,9 @@
   virtual void unregister_potential_barrier_node(Node* node) const;
   virtual bool array_copy_requires_gc_barriers(bool tightly_coupled_alloc, BasicType type, bool is_clone, ArrayCopyPhase phase) const;
   virtual Node* step_over_gc_barrier(Node* c) const;
-  // If the BarrierSetC2 state has kept macro nodes in its compilation unit state to be
+  // If the BarrierSetC2 state has kept barrier nodes in its compilation unit state to be
   // expanded later, then now is the time to do so.
-  virtual bool expand_macro_nodes(PhaseMacroExpand* macro) const;
+  virtual bool expand_barriers(Compile* C, PhaseIterGVN& igvn) const;
 
   static void find_dominating_barriers(PhaseIterGVN& igvn);
   static void loop_optimize_gc_barrier(PhaseIdealLoop* phase, Node* node, bool last_round);
--- a/src/hotspot/share/include/jvm.h	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/include/jvm.h	Mon Dec 03 10:08:18 2018 +0100
@@ -111,9 +111,11 @@
 JVM_ArrayCopy(JNIEnv *env, jclass ignored, jobject src, jint src_pos,
               jobject dst, jint dst_pos, jint length);
 
-JNIEXPORT jobject JNICALL
-JVM_InitProperties(JNIEnv *env, jobject p);
-
+/*
+ * Return an array of all properties as alternating name and value pairs.
+ */
+JNIEXPORT jobjectArray JNICALL
+JVM_GetProperties(JNIEnv *env);
 
 /*
  * java.lang.Runtime
--- a/src/hotspot/share/memory/binaryTreeDictionary.inline.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/memory/binaryTreeDictionary.inline.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2018, 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
@@ -229,7 +229,8 @@
   assert(chunk->list() == this, "list should be set for chunk");
   assert(tail() != NULL, "The tree list is embedded in the first chunk");
   // which means that the list can never be empty.
-  assert(!this->verify_chunk_in_free_list(chunk), "Double entry");
+  // This is expensive for metaspace
+  assert(!FLSVerifyDictionary || !this->verify_chunk_in_free_list(chunk), "Double entry");
   assert(head() == NULL || head()->prev() == NULL, "list invariant");
   assert(tail() == NULL || tail()->next() == NULL, "list invariant");
 
@@ -253,7 +254,8 @@
   assert(chunk->list() == this, "list should be set for chunk");
   assert(head() != NULL, "The tree list is embedded in the first chunk");
   assert(chunk != NULL, "returning NULL chunk");
-  assert(!this->verify_chunk_in_free_list(chunk), "Double entry");
+  // This is expensive for metaspace
+  assert(!FLSVerifyDictionary || !this->verify_chunk_in_free_list(chunk), "Double entry");
   assert(head() == NULL || head()->prev() == NULL, "list invariant");
   assert(tail() == NULL || tail()->next() == NULL, "list invariant");
 
--- a/src/hotspot/share/memory/filemap.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/memory/filemap.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -683,7 +683,10 @@
   int arr_len = heap_mem == NULL ? 0 : heap_mem->length();
   if(arr_len > max_num_regions) {
     fail_stop("Unable to write archive heap memory regions: "
-              "number of memory regions exceeds maximum due to fragmentation");
+              "number of memory regions exceeds maximum due to fragmentation."
+              "Please increase java heap size "
+              "(current MaxHeapSize is " SIZE_FORMAT ", InitialHeapSize is " SIZE_FORMAT ").",
+              MaxHeapSize, InitialHeapSize);
   }
 
   size_t total_size = 0;
--- a/src/hotspot/share/memory/heapShared.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/memory/heapShared.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -441,11 +441,6 @@
   // during VM initialization time. No lock is needed.
   if (record != NULL) {
     Thread* THREAD = Thread::current();
-    if (log_is_enabled(Info, cds, heap)) {
-      ResourceMark rm;
-      log_info(cds, heap)("initialize_from_archived_subgraph " PTR_FORMAT " %s", p2i(k),
-                          k->external_name());
-    }
 
     int i;
     // Load/link/initialize the klasses of the objects in the subgraph.
@@ -511,8 +506,13 @@
         log_debug(cds, heap)("  " PTR_FORMAT " init field @ %2d = " PTR_FORMAT, p2i(k), field_offset, p2i(v));
       }
 
-    // Done. Java code can see the archived sub-graphs referenced from k's
-    // mirror after this point.
+      // Done. Java code can see the archived sub-graphs referenced from k's
+      // mirror after this point.
+      if (log_is_enabled(Info, cds, heap)) {
+        ResourceMark rm;
+        log_info(cds, heap)("initialize_from_archived_subgraph %s " PTR_FORMAT,
+                            k->external_name(), p2i(k));
+      }
     }
   }
 }
--- a/src/hotspot/share/memory/universe.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/memory/universe.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -529,10 +529,6 @@
 #undef assert_pll_locked
 #undef assert_pll_ownership
 
-// initialize_vtable could cause gc if
-// 1) we specified true to initialize_vtable and
-// 2) this ran after gc was enabled
-// In case those ever change we use handles for oops
 void Universe::reinitialize_vtable_of(Klass* ko, TRAPS) {
   // init vtable of k and all subclasses
   ko->vtable().initialize_vtable(false, CHECK);
@@ -545,6 +541,14 @@
   }
 }
 
+void Universe::reinitialize_vtables(TRAPS) {
+  // The vtables are initialized by starting at java.lang.Object and
+  // initializing through the subclass links, so that the super
+  // classes are always initialized first.
+  Klass* ok = SystemDictionary::Object_klass();
+  Universe::reinitialize_vtable_of(ok, THREAD);
+}
+
 
 void initialize_itable_for_klass(InstanceKlass* k, TRAPS) {
   k->itable().initialize_itable(false, CHECK);
@@ -961,9 +965,7 @@
   { ResourceMark rm;
     Interpreter::initialize();      // needed for interpreter entry points
     if (!UseSharedSpaces) {
-      HandleMark hm(THREAD);
-      Klass* ok = SystemDictionary::Object_klass();
-      Universe::reinitialize_vtable_of(ok, CHECK_false);
+      Universe::reinitialize_vtables(CHECK_false);
       Universe::reinitialize_itables(CHECK_false);
     }
   }
--- a/src/hotspot/share/memory/universe.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/memory/universe.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -218,6 +218,7 @@
   static void fixup_mirrors(TRAPS);
 
   static void reinitialize_vtable_of(Klass* k, TRAPS);
+  static void reinitialize_vtables(TRAPS);
   static void reinitialize_itables(TRAPS);
   static void compute_base_vtable_size();             // compute vtable size of class Object
 
--- a/src/hotspot/share/oops/instanceKlass.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/oops/instanceKlass.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -284,19 +284,25 @@
 
       if (log_is_enabled(Trace, class, nestmates)) {
         ResourceMark rm(THREAD);
-        log_trace(class, nestmates)("Type %s is not a nest member of resolved type %s: %s",
-                                    this->external_name(),
-                                    k->external_name(),
-                                    error);
+        log_trace(class, nestmates)
+          ("Type %s (loader: %s) is not a nest member of "
+           "resolved type %s (loader: %s): %s",
+           this->external_name(),
+           this->class_loader_data()->loader_name_and_id(),
+           k->external_name(),
+           k->class_loader_data()->loader_name_and_id(),
+           error);
       }
 
       if (validationException != NULL) {
         ResourceMark rm(THREAD);
         Exceptions::fthrow(THREAD_AND_LOCATION,
                            validationException,
-                           "Type %s is not a nest member of %s: %s",
+                           "Type %s (loader: %s) is not a nest member of %s (loader: %s): %s",
                            this->external_name(),
+                           this->class_loader_data()->loader_name_and_id(),
                            k->external_name(),
+                           k->class_loader_data()->loader_name_and_id(),
                            error
                            );
       }
@@ -1064,27 +1070,32 @@
 }
 
 Klass* InstanceKlass::implementor() const {
-  assert_locked_or_safepoint(Compile_lock);
-  Klass** k = adr_implementor();
+  Klass* volatile* k = adr_implementor();
   if (k == NULL) {
     return NULL;
   } else {
-    return *k;
+    // This load races with inserts, and therefore needs acquire.
+    Klass* kls = OrderAccess::load_acquire(k);
+    if (kls != NULL && !kls->is_loader_alive()) {
+      return NULL;  // don't return unloaded class
+    } else {
+      return kls;
+    }
   }
 }
 
+
 void InstanceKlass::set_implementor(Klass* k) {
   assert_lock_strong(Compile_lock);
   assert(is_interface(), "not interface");
-  Klass** addr = adr_implementor();
+  Klass* volatile* addr = adr_implementor();
   assert(addr != NULL, "null addr");
   if (addr != NULL) {
-    *addr = k;
+    OrderAccess::release_store(addr, k);
   }
 }
 
 int  InstanceKlass::nof_implementors() const {
-  assert_lock_strong(Compile_lock);
   Klass* k = implementor();
   if (k == NULL) {
     return 0;
@@ -2111,7 +2122,7 @@
 }
 
 inline DependencyContext InstanceKlass::dependencies() {
-  DependencyContext dep_context(&_dep_context);
+  DependencyContext dep_context(&_dep_context, &_dep_context_last_cleaned);
   return dep_context;
 }
 
@@ -2123,8 +2134,12 @@
   dependencies().add_dependent_nmethod(nm);
 }
 
-void InstanceKlass::remove_dependent_nmethod(nmethod* nm, bool delete_immediately) {
-  dependencies().remove_dependent_nmethod(nm, delete_immediately);
+void InstanceKlass::remove_dependent_nmethod(nmethod* nm) {
+  dependencies().remove_dependent_nmethod(nm);
+}
+
+void InstanceKlass::clean_dependency_context() {
+  dependencies().clean_unloading_dependents();
 }
 
 #ifndef PRODUCT
@@ -2140,26 +2155,28 @@
 void InstanceKlass::clean_weak_instanceklass_links() {
   clean_implementors_list();
   clean_method_data();
-
-  // Since GC iterates InstanceKlasses sequentially, it is safe to remove stale entries here.
-  DependencyContext dep_context(&_dep_context);
-  dep_context.expunge_stale_entries();
 }
 
 void InstanceKlass::clean_implementors_list() {
   assert(is_loader_alive(), "this klass should be live");
   if (is_interface()) {
-    if (ClassUnloading) {
-      Klass* impl = implementor();
-      if (impl != NULL) {
-        if (!impl->is_loader_alive()) {
-          // remove this guy
-          Klass** klass = adr_implementor();
-          assert(klass != NULL, "null klass");
-          if (klass != NULL) {
-            *klass = NULL;
+    assert (ClassUnloading, "only called for ClassUnloading");
+    for (;;) {
+      // Use load_acquire due to competing with inserts
+      Klass* impl = OrderAccess::load_acquire(adr_implementor());
+      if (impl != NULL && !impl->is_loader_alive()) {
+        // NULL this field, might be an unloaded klass or NULL
+        Klass* volatile* klass = adr_implementor();
+        if (Atomic::cmpxchg((Klass*)NULL, klass, impl) == impl) {
+          // Successfully unlinking implementor.
+          if (log_is_enabled(Trace, class, unload)) {
+            ResourceMark rm;
+            log_trace(class, unload)("unlinking class (implementor): %s", impl->external_name());
           }
+          return;
         }
+      } else {
+        return;
       }
     }
   }
@@ -2328,7 +2345,7 @@
   // These are not allocated from metaspace, but they should should all be empty
   // during dump time, so we don't need to worry about them in InstanceKlass::iterate().
   guarantee(_source_debug_extension == NULL, "must be");
-  guarantee(_dep_context == DependencyContext::EMPTY, "must be");
+  guarantee(_dep_context == NULL, "must be");
   guarantee(_osr_nmethods_head == NULL, "must be");
 
 #if INCLUDE_JVMTI
@@ -2473,7 +2490,7 @@
     FreeHeap(jmeths);
   }
 
-  assert(_dep_context == DependencyContext::EMPTY,
+  assert(_dep_context == NULL,
          "dependencies should already be cleaned");
 
 #if INCLUDE_JVMTI
@@ -3100,7 +3117,6 @@
   st->cr();
 
   if (is_interface()) {
-    MutexLocker ml(Compile_lock);
     st->print_cr(BULLET"nof implementors:  %d", nof_implementors());
     if (nof_implementors() == 1) {
       st->print_cr(BULLET"implementor:    ");
@@ -3508,9 +3524,6 @@
     guarantee(sib->super() == super, "siblings should have same superklass");
   }
 
-  // Verify implementor fields requires the Compile_lock, but this is sometimes
-  // called inside a safepoint, so don't verify.
-
   // Verify local interfaces
   if (local_interfaces()) {
     Array<InstanceKlass*>* local_interfaces = this->local_interfaces();
--- a/src/hotspot/share/oops/instanceKlass.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/oops/instanceKlass.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -69,6 +69,7 @@
 class jniIdMapBase;
 class JNIid;
 class JvmtiCachedClassFieldMap;
+class nmethodBucket;
 class SuperTypeClosure;
 
 // This is used in iterators below.
@@ -249,7 +250,8 @@
   OopMapCache*    volatile _oop_map_cache;   // OopMapCache for all methods in the klass (allocated lazily)
   JNIid*          _jni_ids;              // First JNI identifier for static fields in this class
   jmethodID*      volatile _methods_jmethod_ids;  // jmethodIDs corresponding to method_idnum, or NULL if none
-  intptr_t        _dep_context;          // packed DependencyContext structure
+  nmethodBucket*  volatile _dep_context;          // packed DependencyContext structure
+  uint64_t        volatile _dep_context_last_cleaned;
   nmethod*        _osr_nmethods_head;    // Head of list of on-stack replacement nmethods for this class
 #if INCLUDE_JVMTI
   BreakpointInfo* _breakpoints;          // bpt lists, managed by Method*
@@ -976,7 +978,8 @@
   inline DependencyContext dependencies();
   int  mark_dependent_nmethods(KlassDepChange& changes);
   void add_dependent_nmethod(nmethod* nm);
-  void remove_dependent_nmethod(nmethod* nm, bool delete_immediately);
+  void remove_dependent_nmethod(nmethod* nm);
+  void clean_dependency_context();
 
   // On-stack replacement support
   nmethod* osr_nmethods_head() const         { return _osr_nmethods_head; };
@@ -1092,9 +1095,9 @@
                      nonstatic_oop_map_count());
   }
 
-  Klass** adr_implementor() const {
+  Klass* volatile* adr_implementor() const {
     if (is_interface()) {
-      return (Klass**)end_of_nonstatic_oop_maps();
+      return (Klass* volatile*)end_of_nonstatic_oop_maps();
     } else {
       return NULL;
     }
@@ -1102,7 +1105,7 @@
 
   InstanceKlass** adr_unsafe_anonymous_host() const {
     if (is_unsafe_anonymous()) {
-      InstanceKlass** adr_impl = (InstanceKlass **)adr_implementor();
+      InstanceKlass** adr_impl = (InstanceKlass**)adr_implementor();
       if (adr_impl != NULL) {
         return adr_impl + 1;
       } else {
@@ -1120,7 +1123,7 @@
         return (address)(adr_host + 1);
       }
 
-      Klass** adr_impl = adr_implementor();
+      Klass* volatile* adr_impl = adr_implementor();
       if (adr_impl != NULL) {
         return (address)(adr_impl + 1);
       }
--- a/src/hotspot/share/oops/klass.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/oops/klass.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -121,7 +121,7 @@
   Klass *r = this;
   while( r->is_abstract() ) {   // Receiver is abstract?
     Klass *s = r->subklass();   // Check for exactly 1 subklass
-    if( !s || s->next_sibling() ) // Oops; wrong count; give up
+    if (s == NULL || s->next_sibling() != NULL) // Oops; wrong count; give up
       return this;              // Return 'this' as a no-progress flag
     r = s;                    // Loop till find concrete class
   }
@@ -362,22 +362,71 @@
 }
 
 
+// superklass links
 InstanceKlass* Klass::superklass() const {
   assert(super() == NULL || super()->is_instance_klass(), "must be instance klass");
   return _super == NULL ? NULL : InstanceKlass::cast(_super);
 }
 
+// subklass links.  Used by the compiler (and vtable initialization)
+// May be cleaned concurrently, so must use the Compile_lock.
+// The log parameter is for clean_weak_klass_links to report unlinked classes.
+Klass* Klass::subklass(bool log) const {
+  // Need load_acquire on the _subklass, because it races with inserts that
+  // publishes freshly initialized data.
+  for (Klass* chain = OrderAccess::load_acquire(&_subklass);
+       chain != NULL;
+       // Do not need load_acquire on _next_sibling, because inserts never
+       // create _next_sibling edges to dead data.
+       chain = Atomic::load(&chain->_next_sibling))
+  {
+    if (chain->is_loader_alive()) {
+      return chain;
+    } else if (log) {
+      if (log_is_enabled(Trace, class, unload)) {
+        ResourceMark rm;
+        log_trace(class, unload)("unlinking class (subclass): %s", chain->external_name());
+      }
+    }
+  }
+  return NULL;
+}
+
+Klass* Klass::next_sibling(bool log) const {
+  // Do not need load_acquire on _next_sibling, because inserts never
+  // create _next_sibling edges to dead data.
+  for (Klass* chain = Atomic::load(&_next_sibling);
+       chain != NULL;
+       chain = Atomic::load(&chain->_next_sibling)) {
+    // Only return alive klass, there may be stale klass
+    // in this chain if cleaned concurrently.
+    if (chain->is_loader_alive()) {
+      return chain;
+    } else if (log) {
+      if (log_is_enabled(Trace, class, unload)) {
+        ResourceMark rm;
+        log_trace(class, unload)("unlinking class (sibling): %s", chain->external_name());
+      }
+    }
+  }
+  return NULL;
+}
+
 void Klass::set_subklass(Klass* s) {
   assert(s != this, "sanity check");
-  _subklass = s;
+  OrderAccess::release_store(&_subklass, s);
 }
 
 void Klass::set_next_sibling(Klass* s) {
   assert(s != this, "sanity check");
-  _next_sibling = s;
+  // Does not need release semantics. If used by cleanup, it will link to
+  // already safely published data, and if used by inserts, will be published
+  // safely using cmpxchg.
+  Atomic::store(s, &_next_sibling);
 }
 
 void Klass::append_to_sibling_list() {
+  assert_locked_or_safepoint(Compile_lock);
   debug_only(verify();)
   // add ourselves to superklass' subklass list
   InstanceKlass* super = superklass();
@@ -385,16 +434,39 @@
   assert((!super->is_interface()    // interfaces cannot be supers
           && (super->superklass() == NULL || !is_interface())),
          "an interface can only be a subklass of Object");
-  Klass* prev_first_subklass = super->subklass();
-  if (prev_first_subklass != NULL) {
-    // set our sibling to be the superklass' previous first subklass
-    set_next_sibling(prev_first_subklass);
+
+  // Make sure there is no stale subklass head
+  super->clean_subklass();
+
+  for (;;) {
+    Klass* prev_first_subklass = OrderAccess::load_acquire(&_super->_subklass);
+    if (prev_first_subklass != NULL) {
+      // set our sibling to be the superklass' previous first subklass
+      assert(prev_first_subklass->is_loader_alive(), "May not attach not alive klasses");
+      set_next_sibling(prev_first_subklass);
+    }
+    // Note that the prev_first_subklass is always alive, meaning no sibling_next links
+    // are ever created to not alive klasses. This is an important invariant of the lock-free
+    // cleaning protocol, that allows us to safely unlink dead klasses from the sibling list.
+    if (Atomic::cmpxchg(this, &super->_subklass, prev_first_subklass) == prev_first_subklass) {
+      return;
+    }
   }
-  // make ourselves the superklass' first subklass
-  super->set_subklass(this);
   debug_only(verify();)
 }
 
+void Klass::clean_subklass() {
+  for (;;) {
+    // Need load_acquire, due to contending with concurrent inserts
+    Klass* subklass = OrderAccess::load_acquire(&_subklass);
+    if (subklass == NULL || subklass->is_loader_alive()) {
+      return;
+    }
+    // Try to fix _subklass until it points at something not dead.
+    Atomic::cmpxchg(subklass->next_sibling(), &_subklass, subklass);
+  }
+}
+
 oop Klass::holder_phantom() const {
   return class_loader_data()->holder_phantom();
 }
@@ -414,30 +486,14 @@
     assert(current->is_loader_alive(), "just checking, this should be live");
 
     // Find and set the first alive subklass
-    Klass* sub = current->subklass();
-    while (sub != NULL && !sub->is_loader_alive()) {
-#ifndef PRODUCT
-      if (log_is_enabled(Trace, class, unload)) {
-        ResourceMark rm;
-        log_trace(class, unload)("unlinking class (subclass): %s", sub->external_name());
-      }
-#endif
-      sub = sub->next_sibling();
-    }
-    current->set_subklass(sub);
+    Klass* sub = current->subklass(true);
+    current->clean_subklass();
     if (sub != NULL) {
       stack.push(sub);
     }
 
     // Find and set the first alive sibling
-    Klass* sibling = current->next_sibling();
-    while (sibling != NULL && !sibling->is_loader_alive()) {
-      if (log_is_enabled(Trace, class, unload)) {
-        ResourceMark rm;
-        log_trace(class, unload)("[Unlinking class (sibling) %s]", sibling->external_name());
-      }
-      sibling = sibling->next_sibling();
-    }
+    Klass* sibling = current->next_sibling(true);
     current->set_next_sibling(sibling);
     if (sibling != NULL) {
       stack.push(sibling);
@@ -470,8 +526,8 @@
     it->push(&_primary_supers[i]);
   }
   it->push(&_super);
-  it->push(&_subklass);
-  it->push(&_next_sibling);
+  it->push((Klass**)&_subklass);
+  it->push((Klass**)&_next_sibling);
   it->push(&_next_link);
 
   vtableEntry* vt = start_of_vtable();
--- a/src/hotspot/share/oops/klass.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/oops/klass.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -140,9 +140,9 @@
   // Superclass
   Klass*      _super;
   // First subclass (NULL if none); _subklass->next_sibling() is next one
-  Klass*      _subklass;
+  Klass* volatile _subklass;
   // Sibling link (or NULL); links all subklasses of a klass
-  Klass*      _next_sibling;
+  Klass* volatile _next_sibling;
 
   // All klasses loaded by a class loader are chained through these links
   Klass*      _next_link;
@@ -284,8 +284,9 @@
   // Use InstanceKlass::contains_field_offset to classify field offsets.
 
   // sub/superklass links
-  Klass* subklass() const              { return _subklass; }
-  Klass* next_sibling() const          { return _next_sibling; }
+  Klass* subklass(bool log = false) const;
+  Klass* next_sibling(bool log = false) const;
+
   InstanceKlass* superklass() const;
   void append_to_sibling_list();           // add newly created receiver to superklass' subklass list
 
@@ -659,6 +660,8 @@
   // be used safely.
   oop holder_phantom() const;
 
+  void clean_subklass();
+
   static void clean_weak_klass_links(bool unloading_occurred, bool clean_alive_klasses = true);
   static void clean_subklass_tree() {
     clean_weak_klass_links(/*unloading_occurred*/ true , /* clean_alive_klasses */ false);
--- a/src/hotspot/share/opto/compile.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/opto/compile.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -1122,7 +1122,7 @@
   set_decompile_count(0);
 
   set_do_freq_based_layout(_directive->BlockLayoutByFrequencyOption);
-  set_num_loop_opts(LoopOptsCount);
+  _loop_opts_cnt = LoopOptsCount;
   set_do_inlining(Inline);
   set_max_inline_size(MaxInlineSize);
   set_freq_inline_size(FreqInlineSize);
@@ -2169,14 +2169,14 @@
 }
 
 
-bool Compile::optimize_loops(int& loop_opts_cnt, PhaseIterGVN& igvn, LoopOptsMode mode) {
-  if(loop_opts_cnt > 0) {
+bool Compile::optimize_loops(PhaseIterGVN& igvn, LoopOptsMode mode) {
+  if(_loop_opts_cnt > 0) {
     debug_only( int cnt = 0; );
-    while(major_progress() && (loop_opts_cnt > 0)) {
+    while(major_progress() && (_loop_opts_cnt > 0)) {
       TracePhase tp("idealLoop", &timers[_t_idealLoop]);
       assert( cnt++ < 40, "infinite cycle in loop optimization" );
       PhaseIdealLoop ideal_loop(igvn, mode);
-      loop_opts_cnt--;
+      _loop_opts_cnt--;
       if (failing())  return false;
       if (major_progress()) print_method(PHASE_PHASEIDEALLOOP_ITERATIONS, 2);
     }
@@ -2202,7 +2202,6 @@
 #endif
 
   ResourceMark rm;
-  int          loop_opts_cnt;
 
   print_inlining_reinit();
 
@@ -2305,28 +2304,27 @@
   // peeling, unrolling, etc.
 
   // Set loop opts counter
-  loop_opts_cnt = num_loop_opts();
-  if((loop_opts_cnt > 0) && (has_loops() || has_split_ifs())) {
+  if((_loop_opts_cnt > 0) && (has_loops() || has_split_ifs())) {
     {
       TracePhase tp("idealLoop", &timers[_t_idealLoop]);
       PhaseIdealLoop ideal_loop(igvn, LoopOptsDefault);
-      loop_opts_cnt--;
+      _loop_opts_cnt--;
       if (major_progress()) print_method(PHASE_PHASEIDEALLOOP1, 2);
       if (failing())  return;
     }
     // Loop opts pass if partial peeling occurred in previous pass
-    if(PartialPeelLoop && major_progress() && (loop_opts_cnt > 0)) {
+    if(PartialPeelLoop && major_progress() && (_loop_opts_cnt > 0)) {
       TracePhase tp("idealLoop", &timers[_t_idealLoop]);
       PhaseIdealLoop ideal_loop(igvn, LoopOptsSkipSplitIf);
-      loop_opts_cnt--;
+      _loop_opts_cnt--;
       if (major_progress()) print_method(PHASE_PHASEIDEALLOOP2, 2);
       if (failing())  return;
     }
     // Loop opts pass for loop-unrolling before CCP
-    if(major_progress() && (loop_opts_cnt > 0)) {
+    if(major_progress() && (_loop_opts_cnt > 0)) {
       TracePhase tp("idealLoop", &timers[_t_idealLoop]);
       PhaseIdealLoop ideal_loop(igvn, LoopOptsSkipSplitIf);
-      loop_opts_cnt--;
+      _loop_opts_cnt--;
       if (major_progress()) print_method(PHASE_PHASEIDEALLOOP3, 2);
     }
     if (!failing()) {
@@ -2361,7 +2359,7 @@
 
   // Loop transforms on the ideal graph.  Range Check Elimination,
   // peeling, unrolling, etc.
-  if (!optimize_loops(loop_opts_cnt, igvn, LoopOptsDefault)) {
+  if (!optimize_loops(igvn, LoopOptsDefault)) {
     return;
   }
 
@@ -2404,6 +2402,16 @@
     }
   }
 
+  {
+    TracePhase tp("barrierExpand", &timers[_t_barrierExpand]);
+    print_method(PHASE_BEFORE_BARRIER_EXPAND, 2);
+    BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
+    if (bs->expand_barriers(this, igvn)) {
+      assert(failing(), "must bail out w/ explicit message");
+      return;
+    }
+  }
+
   if (opaque4_count() > 0) {
     C->remove_opaque4_nodes(igvn);
     igvn.optimize();
--- a/src/hotspot/share/opto/compile.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/opto/compile.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -369,7 +369,6 @@
   address               _stub_entry_point;      // Compile code entry for generated stub, or NULL
 
   // Control of this compilation.
-  int                   _num_loop_opts;         // Number of iterations for doing loop optimiztions
   int                   _max_inline_size;       // Max inline size for this compilation
   int                   _freq_inline_size;      // Max hot method inline size for this compilation
   int                   _fixed_slots;           // count of frame slots not allocated by the register
@@ -413,6 +412,7 @@
   // JSR 292
   bool                  _has_method_handle_invokes; // True if this method has MethodHandle invokes.
   RTMState              _rtm_state;             // State of Restricted Transactional Memory usage
+  int                   _loop_opts_cnt;         // loop opts round
 
   // Compilation environment.
   Arena                 _comp_arena;            // Arena with lifetime equivalent to Compile
@@ -653,8 +653,6 @@
   int               inlining_incrementally() const { return _inlining_incrementally; }
   void          set_major_progress()            { _major_progress++; }
   void        clear_major_progress()            { _major_progress = 0; }
-  int               num_loop_opts() const       { return _num_loop_opts; }
-  void          set_num_loop_opts(int n)        { _num_loop_opts = n; }
   int               max_inline_size() const     { return _max_inline_size; }
   void          set_freq_inline_size(int n)     { _freq_inline_size = n; }
   int               freq_inline_size() const    { return _freq_inline_size; }
@@ -1087,7 +1085,7 @@
   void inline_incrementally(PhaseIterGVN& igvn);
   void inline_string_calls(bool parse_time);
   void inline_boxing_calls(PhaseIterGVN& igvn);
-  bool optimize_loops(int& loop_opts_cnt, PhaseIterGVN& igvn, LoopOptsMode mode);
+  bool optimize_loops(PhaseIterGVN& igvn, LoopOptsMode mode);
 
   // Matching, CFG layout, allocation, code generation
   PhaseCFG*         cfg()                       { return _cfg; }
--- a/src/hotspot/share/opto/loopnode.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/opto/loopnode.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -2774,9 +2774,12 @@
     return;
   }
 
+  BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
   // Nothing to do, so get out
-  bool stop_early = !C->has_loops() && !skip_loop_opts && !do_split_ifs && !_verify_me && !_verify_only;
+  bool stop_early = !C->has_loops() && !skip_loop_opts && !do_split_ifs && !_verify_me && !_verify_only &&
+    !bs->is_gc_specific_loop_opts_pass(mode);
   bool do_expensive_nodes = C->should_optimize_expensive_nodes(_igvn);
+  bool strip_mined_loops_expanded = bs->strip_mined_loops_expanded(mode);
   if (stop_early && !do_expensive_nodes) {
     _igvn.optimize();           // Cleanup NeverBranches
     return;
@@ -2854,8 +2857,9 @@
 
   // Given early legal placement, try finding counted loops.  This placement
   // is good enough to discover most loop invariants.
-  if( !_verify_me && !_verify_only )
+  if (!_verify_me && !_verify_only && !strip_mined_loops_expanded) {
     _ltree_root->counted_loop( this );
+  }
 
   // Find latest loop placement.  Find ideal loop placement.
   visited.Clear();
@@ -2926,6 +2930,14 @@
     return;
   }
 
+  if (bs->optimize_loops(this, mode, visited, nstack, worklist)) {
+    _igvn.optimize();
+    if (C->log() != NULL) {
+      log_loop_tree(_ltree_root, _ltree_root, C->log());
+    }
+    return;
+  }
+
   if (ReassociateInvariants) {
     // Reassociate invariants and prep for split_thru_phi
     for (LoopTreeIterator iter(_ltree_root); !iter.done(); iter.next()) {
@@ -4136,7 +4148,7 @@
   }
 }
 
-// Verify that no data node is schedules in the outer loop of a strip
+// Verify that no data node is scheduled in the outer loop of a strip
 // mined loop.
 void PhaseIdealLoop::verify_strip_mined_scheduling(Node *n, Node* least) {
 #ifdef ASSERT
@@ -4145,7 +4157,9 @@
   }
   IdealLoopTree* loop = get_loop(least);
   Node* head = loop->_head;
-  if (head->is_OuterStripMinedLoop()) {
+  if (head->is_OuterStripMinedLoop() &&
+      // Verification can't be applied to fully built strip mined loops
+      head->as_Loop()->outer_loop_end()->in(1)->find_int_con(-1) == 0) {
     Node* sfpt = head->as_Loop()->outer_safepoint();
     ResourceMark rm;
     Unique_Node_List wq;
--- a/src/hotspot/share/opto/loopopts.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/opto/loopopts.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -887,6 +887,11 @@
 // Do the real work in a non-recursive function.  Data nodes want to be
 // cloned in the pre-order so they can feed each other nicely.
 Node *PhaseIdealLoop::split_if_with_blocks_pre( Node *n ) {
+  BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
+  Node* bs_res = bs->split_if_pre(this, n);
+  if (bs_res != NULL) {
+    return bs_res;
+  }
   // Cloning these guys is unlikely to win
   int n_op = n->Opcode();
   if( n_op == Op_MergeMem ) return n;
--- a/src/hotspot/share/opto/macro.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/opto/macro.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -2600,6 +2600,5 @@
   _igvn.set_delay_transform(false);
   _igvn.optimize();
   if (C->failing())  return true;
-  BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
-  return bs->expand_macro_nodes(this);
+  return false;
 }
--- a/src/hotspot/share/opto/matcher.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/opto/matcher.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -1208,9 +1208,7 @@
   // Allocate a private array of RegMasks.  These RegMasks are not shared.
   msfpt->_in_rms = NEW_RESOURCE_ARRAY( RegMask, cnt );
   // Empty them all.
-  for (uint i = 0; i < cnt; i++) {
-    msfpt->_in_rms[i] = RegMask();
-  }
+  for (uint i = 0; i < cnt; i++) ::new (&(msfpt->_in_rms[i])) RegMask();
 
   // Do all the pre-defined non-Empty register masks
   msfpt->_in_rms[TypeFunc::ReturnAdr] = _return_addr_mask;
--- a/src/hotspot/share/opto/mulnode.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/opto/mulnode.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -286,20 +286,20 @@
 
   // Check for negative constant; if so negate the final result
   bool sign_flip = false;
-  unsigned long abs_con = uabs(con);
-  if (abs_con != (unsigned long)con) {
+  julong abs_con = uabs(con);
+  if (abs_con != (julong)con) {
     sign_flip = true;
   }
 
   // Get low bit; check for being the only bit
   Node *res = NULL;
-  unsigned long bit1 = abs_con & (0-abs_con);      // Extract low bit
+  julong bit1 = abs_con & (0-abs_con);      // Extract low bit
   if (bit1 == abs_con) {           // Found a power of 2?
     res = new LShiftLNode(in(1), phase->intcon(log2_long(bit1)));
   } else {
 
     // Check for constant with 2 bits set
-    unsigned long bit2 = abs_con-bit1;
+    julong bit2 = abs_con-bit1;
     bit2 = bit2 & (0-bit2);          // Extract 2nd bit
     if (bit2 + bit1 == abs_con) {    // Found all bits in con?
       Node *n1 = phase->transform(new LShiftLNode(in(1), phase->intcon(log2_long(bit1))));
@@ -308,7 +308,7 @@
 
     } else if (is_power_of_2_long(abs_con+1)) {
       // Sleezy: power-of-2 -1.  Next time be generic.
-      unsigned long temp = abs_con + 1;
+      julong temp = abs_con + 1;
       Node *n1 = phase->transform( new LShiftLNode(in(1), phase->intcon(log2_long(temp))));
       res = new SubLNode(n1, in(1));
     } else {
--- a/src/hotspot/share/opto/phase.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/opto/phase.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -83,6 +83,7 @@
     tty->print_cr ("         Cond Const Prop:     %7.3f s", timers[_t_ccp].seconds());
     tty->print_cr ("         GVN 2:               %7.3f s", timers[_t_iterGVN2].seconds());
     tty->print_cr ("         Macro Expand:        %7.3f s", timers[_t_macroExpand].seconds());
+    tty->print_cr ("         Barrier Expand:      %7.3f s", timers[_t_barrierExpand].seconds());
     tty->print_cr ("         Graph Reshape:       %7.3f s", timers[_t_graphReshaping].seconds());
 
     double other = timers[_t_optimizer].seconds() -
@@ -95,6 +96,7 @@
        timers[_t_ccp].seconds() +
        timers[_t_iterGVN2].seconds() +
        timers[_t_macroExpand].seconds() +
+       timers[_t_barrierExpand].seconds() +
        timers[_t_graphReshaping].seconds());
     if (other > 0) {
       tty->print_cr("         Other:               %7.3f s", other);
--- a/src/hotspot/share/opto/phase.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/opto/phase.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -80,6 +80,7 @@
       _t_ccp,
       _t_iterGVN2,
       _t_macroExpand,
+      _t_barrierExpand,
       _t_graphReshaping,
     _t_matcher,
     _t_scheduler,
--- a/src/hotspot/share/opto/phasetype.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/opto/phasetype.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -52,6 +52,7 @@
   PHASE_MATCHING,
   PHASE_INCREMENTAL_INLINE,
   PHASE_INCREMENTAL_BOXING_INLINE,
+  PHASE_BEFORE_BARRIER_EXPAND,
   PHASE_BEFORE_MACRO_EXPANSION,
   PHASE_END,
   PHASE_FAILURE,
@@ -89,6 +90,7 @@
       case PHASE_MATCHING:                   return "After matching";
       case PHASE_INCREMENTAL_INLINE:         return "Incremental Inline";
       case PHASE_INCREMENTAL_BOXING_INLINE:  return "Incremental Boxing Inline";
+      case PHASE_BEFORE_BARRIER_EXPAND:      return "Before Barrier Expand";
       case PHASE_BEFORE_MACRO_EXPANSION:     return "Before macro expansion";
       case PHASE_END:                        return "End";
       case PHASE_FAILURE:                    return "Failure";
--- a/src/hotspot/share/opto/vectornode.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/opto/vectornode.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -553,6 +553,7 @@
   LoadVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt, ControlDependency control_dependency = LoadNode::DependsOnlyOnTest)
     : LoadNode(c, mem, adr, at, vt, MemNode::unordered, control_dependency) {
     init_class_id(Class_LoadVector);
+    set_mismatched_access();
   }
 
   const TypeVect* vect_type() const { return type()->is_vect(); }
@@ -581,6 +582,7 @@
     : StoreNode(c, mem, adr, at, val, MemNode::unordered) {
     assert(val->is_Vector() || val->is_LoadVector(), "sanity");
     init_class_id(Class_StoreVector);
+    set_mismatched_access();
   }
 
   const TypeVect* vect_type() const { return in(MemNode::ValueIn)->bottom_type()->is_vect(); }
--- a/src/hotspot/share/prims/jvm.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/prims/jvm.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -354,19 +354,37 @@
 
 #define PUTPROP(props, name, value) set_property((props), (name), (value), CHECK_(properties));
 
-
-JVM_ENTRY(jobject, JVM_InitProperties(JNIEnv *env, jobject properties))
-  JVMWrapper("JVM_InitProperties");
-  ResourceMark rm;
-
-  Handle props(THREAD, JNIHandles::resolve_non_null(properties));
-
-  // System property list includes both user set via -D option and
-  // jvm system specific properties.
-  for (SystemProperty* p = Arguments::system_properties(); p != NULL; p = p->next()) {
-    if (strcmp(p->key(), "sun.nio.MaxDirectMemorySize") == 0)  // Can not be defined with -D
-      continue;
-    PUTPROP(props, p->key(), p->value());
+/*
+ * Return all of the system properties in a Java String array with alternating
+ * names and values from the jvm SystemProperty.
+ * Which includes some internal and all commandline -D defined properties.
+ */
+JVM_ENTRY(jobjectArray, JVM_GetProperties(JNIEnv *env))
+  JVMWrapper("JVM_GetProperties");
+  ResourceMark rm(THREAD);
+  HandleMark hm(THREAD);
+  int ndx = 0;
+  int fixedCount = 2;
+
+  SystemProperty* p = Arguments::system_properties();
+  int count = Arguments::PropertyList_count(p);
+
+  // Allocate result String array
+  InstanceKlass* ik = SystemDictionary::String_klass();
+  objArrayOop r = oopFactory::new_objArray(ik, (count + fixedCount) * 2, CHECK_NULL);
+  objArrayHandle result_h(THREAD, r);
+
+  while (p != NULL) {
+    const char * key = p->key();
+    if (strcmp(key, "sun.nio.MaxDirectMemorySize") != 0) {
+        const char * value = p->value();
+        Handle key_str    = java_lang_String::create_from_platform_dependent_str(key, CHECK_NULL);
+        Handle value_str  = java_lang_String::create_from_platform_dependent_str((value != NULL ? value : ""), CHECK_NULL);
+        result_h->obj_at_put(ndx * 2,  key_str());
+        result_h->obj_at_put(ndx * 2 + 1, value_str());
+        ndx++;
+    }
+    p = p->next();
   }
 
   // Convert the -XX:MaxDirectMemorySize= command line flag
@@ -377,7 +395,11 @@
   if (!FLAG_IS_DEFAULT(MaxDirectMemorySize)) {
     char as_chars[256];
     jio_snprintf(as_chars, sizeof(as_chars), JULONG_FORMAT, MaxDirectMemorySize);
-    PUTPROP(props, "sun.nio.MaxDirectMemorySize", as_chars);
+    Handle key_str = java_lang_String::create_from_platform_dependent_str("sun.nio.MaxDirectMemorySize", CHECK_NULL);
+    Handle value_str  = java_lang_String::create_from_platform_dependent_str(as_chars, CHECK_NULL);
+    result_h->obj_at_put(ndx * 2,  key_str());
+    result_h->obj_at_put(ndx * 2 + 1, value_str());
+    ndx++;
   }
 
   // JVM monitoring and management support
@@ -406,11 +428,15 @@
 
     if (*compiler_name != '\0' &&
         (Arguments::mode() != Arguments::_int)) {
-      PUTPROP(props, "sun.management.compiler", compiler_name);
+      Handle key_str = java_lang_String::create_from_platform_dependent_str("sun.management.compiler", CHECK_NULL);
+      Handle value_str  = java_lang_String::create_from_platform_dependent_str(compiler_name, CHECK_NULL);
+      result_h->obj_at_put(ndx * 2,  key_str());
+      result_h->obj_at_put(ndx * 2 + 1, value_str());
+      ndx++;
     }
   }
 
-  return properties;
+  return (jobjectArray) JNIHandles::make_local(env, result_h());
 JVM_END
 
 
--- a/src/hotspot/share/prims/jvmtiExport.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/prims/jvmtiExport.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -1483,6 +1483,18 @@
 }
 
 void JvmtiExport::post_resource_exhausted(jint resource_exhausted_flags, const char* description) {
+
+  JavaThread *thread  = JavaThread::current();
+
+  // JDK-8213834: handlers of ResourceExhausted may attempt some analysis
+  // which often requires running java.
+  // This will cause problems on threads not able to run java, e.g. compiler
+  // threads. To forestall these problems, we therefore suppress sending this
+  // event from threads which are not able to run java.
+  if (!thread->can_call_java()) {
+    return;
+  }
+
   EVT_TRIG_TRACE(JVMTI_EVENT_RESOURCE_EXHAUSTED, ("Trg resource exhausted event triggered" ));
 
   JvmtiEnvIterator it;
@@ -1490,7 +1502,6 @@
     if (env->is_enabled(JVMTI_EVENT_RESOURCE_EXHAUSTED)) {
       EVT_TRACE(JVMTI_EVENT_RESOURCE_EXHAUSTED, ("Evt resource exhausted event sent" ));
 
-      JavaThread *thread  = JavaThread::current();
       JvmtiThreadEventMark jem(thread);
       JvmtiJavaThreadEventTransition jet(thread);
       jvmtiEventResourceExhausted callback = env->callbacks()->ResourceExhausted;
--- a/src/hotspot/share/prims/methodHandles.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/prims/methodHandles.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -1064,14 +1064,6 @@
   return rfill + overflow;
 }
 
-// Is it safe to remove stale entries from a dependency list?
-static bool safe_to_expunge() {
-  // Since parallel GC threads can concurrently iterate over a dependency
-  // list during safepoint, it is safe to remove entries only when
-  // CodeCache lock is held.
-  return CodeCache_lock->owned_by_self();
-}
-
 void MethodHandles::add_dependent_nmethod(oop call_site, nmethod* nm) {
   assert_locked_or_safepoint(CodeCache_lock);
 
@@ -1082,7 +1074,7 @@
   // in order to avoid memory leak, stale entries are purged whenever a dependency list
   // is changed (both on addition and removal). Though memory reclamation is delayed,
   // it avoids indefinite memory usage growth.
-  deps.add_dependent_nmethod(nm, /*expunge_stale_entries=*/safe_to_expunge());
+  deps.add_dependent_nmethod(nm);
 }
 
 void MethodHandles::remove_dependent_nmethod(oop call_site, nmethod* nm) {
@@ -1090,7 +1082,15 @@
 
   oop context = java_lang_invoke_CallSite::context_no_keepalive(call_site);
   DependencyContext deps = java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(context);
-  deps.remove_dependent_nmethod(nm, /*expunge_stale_entries=*/safe_to_expunge());
+  deps.remove_dependent_nmethod(nm);
+}
+
+void MethodHandles::clean_dependency_context(oop call_site) {
+  assert_locked_or_safepoint(CodeCache_lock);
+
+  oop context = java_lang_invoke_CallSite::context_no_keepalive(call_site);
+  DependencyContext deps = java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(context);
+  deps.clean_unloading_dependents();
 }
 
 void MethodHandles::flush_dependent_nmethods(Handle call_site, Handle target) {
@@ -1500,7 +1500,6 @@
     {
       NoSafepointVerifier nsv;
       MutexLockerEx mu2(CodeCache_lock, Mutex::_no_safepoint_check_flag);
-      assert(safe_to_expunge(), "removal is not safe");
       DependencyContext deps = java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(context());
       marked = deps.remove_all_dependents();
     }
--- a/src/hotspot/share/prims/methodHandles.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/prims/methodHandles.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -79,6 +79,7 @@
   // CallSite support
   static void add_dependent_nmethod(oop call_site, nmethod* nm);
   static void remove_dependent_nmethod(oop call_site, nmethod* nm);
+  static void clean_dependency_context(oop call_site);
 
   static void flush_dependent_nmethods(Handle call_site, Handle target);
 
--- a/src/hotspot/share/runtime/globals.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/runtime/globals.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -2585,7 +2585,7 @@
   develop(bool, VerifyMetaspace, false,                                     \
           "Verify metaspace on chunk movements.")                           \
                                                                             \
-  diagnostic(bool, ShowRegistersOnAssert, false,                            \
+  diagnostic(bool, ShowRegistersOnAssert, true,                             \
           "On internal errors, include registers in error report.")         \
                                                                             \
   experimental(bool, UseSwitchProfiling, true,                              \
--- a/src/hotspot/share/runtime/safepoint.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/runtime/safepoint.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -616,7 +616,7 @@
     Threads::possibly_parallel_threads_do(true, &_cleanup_threads_cl);
 
     if (_subtasks.try_claim_task(SafepointSynchronize::SAFEPOINT_CLEANUP_DEFLATE_MONITORS)) {
-      const char* name = "deflating idle monitors";
+      const char* name = "deflating global idle monitors";
       EventSafepointCleanupTask event;
       TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
       ObjectSynchronizer::deflate_idle_monitors(_counters);
--- a/src/hotspot/share/runtime/synchronizer.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/runtime/synchronizer.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -45,6 +45,7 @@
 #include "runtime/stubRoutines.hpp"
 #include "runtime/synchronizer.hpp"
 #include "runtime/thread.inline.hpp"
+#include "runtime/timer.hpp"
 #include "runtime/vframe.hpp"
 #include "runtime/vmThread.hpp"
 #include "utilities/align.hpp"
@@ -1618,9 +1619,10 @@
 }
 
 void ObjectSynchronizer::prepare_deflate_idle_monitors(DeflateMonitorCounters* counters) {
-  counters->nInuse = 0;          // currently associated with objects
-  counters->nInCirculation = 0;  // extant
-  counters->nScavenged = 0;      // reclaimed
+  counters->nInuse = 0;            // currently associated with objects
+  counters->nInCirculation = 0;    // extant
+  counters->nScavenged = 0;        // reclaimed
+  counters->perThreadTimes = 0.0;  // per-thread scavenge times
 }
 
 void ObjectSynchronizer::deflate_idle_monitors(DeflateMonitorCounters* counters) {
@@ -1660,6 +1662,14 @@
 }
 
 void ObjectSynchronizer::finish_deflate_idle_monitors(DeflateMonitorCounters* counters) {
+  if (log_is_enabled(Info, safepoint, cleanup)) {
+    // Report the cumulative time for deflating each thread's idle
+    // monitors. Note: if the work is split among more than one
+    // worker thread, then the reported time will likely be more
+    // than a beginning to end measurement of the phase.
+    log_info(safepoint, cleanup)("deflating per-thread idle monitors, %3.7f secs", counters->perThreadTimes);
+  }
+
   gMonitorFreeCount += counters->nScavenged;
 
   // Consider: audit gFreeList to ensure that gMonitorFreeCount and list agree.
@@ -1680,9 +1690,16 @@
 
   ObjectMonitor * freeHeadp = NULL;  // Local SLL of scavenged monitors
   ObjectMonitor * freeTailp = NULL;
+  elapsedTimer timer;
+
+  if (log_is_enabled(Info, safepoint, cleanup)) {
+    timer.start();
+  }
 
   int deflated_count = deflate_monitor_list(thread->omInUseList_addr(), &freeHeadp, &freeTailp);
 
+  timer.stop();
+
   Thread::muxAcquire(&gListLock, "scavenge - return");
 
   // Adjust counters
@@ -1690,6 +1707,8 @@
   thread->omInUseCount -= deflated_count;
   counters->nScavenged += deflated_count;
   counters->nInuse += thread->omInUseCount;
+  // For now, we only care about cumulative per-thread deflation time.
+  counters->perThreadTimes += timer.seconds();
 
   // Move the scavenged monitors back to the global free list.
   if (freeHeadp != NULL) {
--- a/src/hotspot/share/runtime/synchronizer.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/runtime/synchronizer.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -35,9 +35,10 @@
 class ThreadsList;
 
 struct DeflateMonitorCounters {
-  int nInuse;          // currently associated with objects
-  int nInCirculation;  // extant
-  int nScavenged;      // reclaimed
+  int nInuse;             // currently associated with objects
+  int nInCirculation;     // extant
+  int nScavenged;         // reclaimed
+  double perThreadTimes;  // per-thread scavenge times
 };
 
 class ObjectSynchronizer : AllStatic {
--- a/src/hotspot/share/runtime/thread.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/runtime/thread.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -2943,7 +2943,6 @@
     st->print_cr("   java.lang.Thread.State: %s", java_lang_Thread::thread_status_name(thread_oop));
   }
 #ifndef PRODUCT
-  print_thread_state_on(st);
   _safepoint_state->print_on(st);
 #endif // PRODUCT
   if (is_Compiler_thread()) {
--- a/src/hotspot/share/runtime/vframe.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/runtime/vframe.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -171,13 +171,15 @@
       // we are still waiting for notification or timeout. Otherwise if
       // we earlier reported java.lang.Thread.State == "BLOCKED (on object
       // monitor)", then we are actually waiting to re-lock the monitor.
-      // At this level we can't distinguish the two cases to report
-      // "waited on" rather than "waiting on" for the second case.
       StackValueCollection* locs = locals();
       if (!locs->is_empty()) {
         StackValue* sv = locs->at(0);
         if (sv->type() == T_OBJECT) {
           Handle o = locs->at(0)->get_obj();
+          if (java_lang_Thread::get_thread_status(thread()->threadObj()) ==
+                                java_lang_Thread::BLOCKED_ON_MONITOR_ENTER) {
+            wait_state = "waiting to re-lock in wait()";
+          }
           print_locked_object_class_name(st, o, wait_state);
         }
       } else {
@@ -234,25 +236,6 @@
             // disable the extra printing below.
             mark = NULL;
           }
-        } else if (frame_count != 0) {
-          // This is not the first frame so we either own this monitor
-          // or we owned the monitor before and called wait(). Because
-          // wait() could have been called on any monitor in a lower
-          // numbered frame on the stack, we have to check all the
-          // monitors on the list for this frame.
-          mark = monitor->owner()->mark();
-          if (mark->has_monitor() &&
-              ( // we have marked ourself as pending on this monitor
-                mark->monitor() == thread()->current_pending_monitor() ||
-                // we are not the owner of this monitor
-                !mark->monitor()->is_entered(thread())
-              )) {
-            lock_state = "waiting to re-lock in wait()";
-          } else {
-            // We own the monitor which is not as interesting so
-            // disable the extra printing below.
-            mark = NULL;
-          }
         }
         print_locked_object_class_name(st, Handle(THREAD, monitor->owner()), lock_state);
 
--- a/src/hotspot/share/runtime/vmStructs.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/runtime/vmStructs.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -259,12 +259,12 @@
   nonstatic_field(Klass,                       _java_mirror,                                  OopHandle)                             \
   nonstatic_field(Klass,                       _modifier_flags,                               jint)                                  \
   nonstatic_field(Klass,                       _super,                                        Klass*)                                \
-  nonstatic_field(Klass,                       _subklass,                                     Klass*)                                \
+  volatile_nonstatic_field(Klass,              _subklass,                                     Klass*)                                 \
   nonstatic_field(Klass,                       _layout_helper,                                jint)                                  \
   nonstatic_field(Klass,                       _name,                                         Symbol*)                               \
   nonstatic_field(Klass,                       _access_flags,                                 AccessFlags)                           \
   nonstatic_field(Klass,                       _prototype_header,                             markOop)                               \
-  nonstatic_field(Klass,                       _next_sibling,                                 Klass*)                                \
+  volatile_nonstatic_field(Klass,              _next_sibling,                                 Klass*)                                \
   nonstatic_field(Klass,                       _next_link,                                    Klass*)                                \
   nonstatic_field(Klass,                       _vtable_len,                                   int)                                   \
   nonstatic_field(Klass,                       _class_loader_data,                            ClassLoaderData*)                      \
--- a/src/hotspot/share/services/management.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/services/management.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -1645,6 +1645,12 @@
     return;
   }
 
+  // NonJavaThread instances may not be fully initialized yet, so we need to
+  // skip any that aren't - check for zero stack_size()
+  if (!thread->is_Java_thread() && thread->stack_size() == 0) {
+    return;
+  }
+
   if (_count >= _names_len || _count >= _times_len) {
     // skip if the result array is not big enough
     return;
--- a/src/hotspot/share/services/memoryManager.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/services/memoryManager.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -168,9 +168,8 @@
   _index = 0;
   _start_time = 0L;
   _end_time = 0L;
-  size_t len = _usage_array_size * sizeof(MemoryUsage);
-  memset(_before_gc_usage_array, 0, len);
-  memset(_after_gc_usage_array, 0, len);
+  for (int i = 0; i < _usage_array_size; i++) ::new (&_before_gc_usage_array[i]) MemoryUsage();
+  for (int i = 0; i < _usage_array_size; i++) ::new (&_after_gc_usage_array[i]) MemoryUsage();
 }
 
 
--- a/src/hotspot/share/utilities/concurrentHashTable.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/utilities/concurrentHashTable.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -313,8 +313,13 @@
 
   // Insert which handles a number of cases.
   template <typename LOOKUP_FUNC, typename VALUE_FUNC, typename CALLBACK_FUNC>
-  bool internal_insert(Thread* thread, LOOKUP_FUNC& lookup_f, VALUE_FUNC& value_f,
-                       CALLBACK_FUNC& callback, bool* grow_hint = NULL, bool* clean_hint = NULL);
+  bool internal_get_insert(Thread* thread, LOOKUP_FUNC& lookup_f, VALUE_FUNC& value_f,
+                           CALLBACK_FUNC& callback_f, bool* grow_hint = NULL, bool* clean_hint = NULL);
+
+  // Plain insert.
+  template <typename LOOKUP_FUNC>
+  bool internal_insert(Thread* thread, LOOKUP_FUNC& lookup_f, const VALUE& value,
+                       bool* grow_hint, bool* clean_hint);
 
   // Returns true if an item matching LOOKUP_FUNC is removed.
   // Calls DELETE_FUNC before destroying the node.
@@ -402,7 +407,7 @@
   template <typename LOOKUP_FUNC, typename VALUE_FUNC, typename CALLBACK_FUNC>
   bool get_insert_lazy(Thread* thread, LOOKUP_FUNC& lookup_f, VALUE_FUNC& val_f,
                        CALLBACK_FUNC& callback_f, bool* grow_hint = NULL, bool* clean_hint = NULL) {
-    return !internal_insert(thread, lookup_f, val_f, callback_f, grow_hint, clean_hint);
+    return !internal_get_insert(thread, lookup_f, val_f, callback_f, grow_hint, clean_hint);
   }
 
   // Same without CALLBACK_FUNC.
@@ -442,8 +447,7 @@
   template <typename LOOKUP_FUNC>
   bool insert(Thread* thread, LOOKUP_FUNC& lookup_f, const VALUE& value,
               bool* grow_hint = NULL, bool* clean_hint = NULL) {
-    LazyValueRetrieve vp(value);
-    return internal_insert(thread, lookup_f, vp, noOp, grow_hint, clean_hint);
+    return internal_insert(thread, lookup_f, value, grow_hint, clean_hint);
   }
 
   // This does a fast unsafe insert and can thus only be used when there is no
--- a/src/hotspot/share/utilities/concurrentHashTable.inline.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/utilities/concurrentHashTable.inline.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -876,8 +876,8 @@
 template <typename VALUE, typename CONFIG, MEMFLAGS F>
 template <typename LOOKUP_FUNC, typename VALUE_FUNC, typename CALLBACK_FUNC>
 inline bool ConcurrentHashTable<VALUE, CONFIG, F>::
-  internal_insert(Thread* thread, LOOKUP_FUNC& lookup_f, VALUE_FUNC& value_f,
-                  CALLBACK_FUNC& callback, bool* grow_hint, bool* clean_hint)
+  internal_get_insert(Thread* thread, LOOKUP_FUNC& lookup_f, VALUE_FUNC& value_f,
+                      CALLBACK_FUNC& callback_f, bool* grow_hint, bool* clean_hint)
 {
   bool ret = false;
   bool clean = false;
@@ -901,7 +901,7 @@
           new_node->set_next(first_at_start);
         }
         if (bucket->cas_first(new_node, first_at_start)) {
-          callback(true, new_node->value());
+          callback_f(true, new_node->value());
           new_node = NULL;
           ret = true;
           break; /* leave critical section */
@@ -910,7 +910,7 @@
         locked = bucket->is_locked();
       } else {
         // There is a duplicate.
-        callback(false, old->value());
+        callback_f(false, old->value());
         break; /* leave critical section */
       }
     } /* leave critical section */
@@ -946,6 +946,70 @@
 }
 
 template <typename VALUE, typename CONFIG, MEMFLAGS F>
+template <typename LOOKUP_FUNC>
+inline bool ConcurrentHashTable<VALUE, CONFIG, F>::
+  internal_insert(Thread* thread, LOOKUP_FUNC& lookup_f, const VALUE& value,
+                  bool* grow_hint, bool* clean_hint)
+{
+  bool ret = false;
+  bool clean = false;
+  bool locked;
+  size_t loops = 0;
+  size_t i = 0;
+  uintx hash = lookup_f.get_hash();
+  Node* new_node = Node::create_node(value, NULL);
+
+  while (true) {
+    {
+      ScopedCS cs(thread, this); /* protected the table/bucket */
+      Bucket* bucket = get_bucket(hash);
+      Node* first_at_start = bucket->first();
+      Node* old = get_node(bucket, lookup_f, &clean, &loops);
+      if (old == NULL) {
+        new_node->set_next(first_at_start);
+        if (bucket->cas_first(new_node, first_at_start)) {
+          new_node = NULL;
+          ret = true;
+          break; /* leave critical section */
+        }
+        // CAS failed we must leave critical section and retry.
+        locked = bucket->is_locked();
+      } else {
+        // There is a duplicate.
+        break; /* leave critical section */
+      }
+    } /* leave critical section */
+    i++;
+    if (locked) {
+      os::naked_yield();
+    } else {
+      SpinPause();
+    }
+  }
+
+  if (new_node != NULL) {
+    // CAS failed and a duplicate was inserted, we must free this node.
+    Node::destroy_node(new_node);
+  } else if (i == 0 && clean) {
+    // We only do cleaning on fast inserts.
+    Bucket* bucket = get_bucket_locked(thread, lookup_f.get_hash());
+    delete_in_bucket(thread, bucket, lookup_f);
+    bucket->unlock();
+    clean = false;
+  }
+
+  if (grow_hint != NULL) {
+    *grow_hint = loops > _grow_hint;
+  }
+
+  if (clean_hint != NULL) {
+    *clean_hint = clean;
+  }
+
+  return ret;
+}
+
+template <typename VALUE, typename CONFIG, MEMFLAGS F>
 template <typename FUNC>
 inline bool ConcurrentHashTable<VALUE, CONFIG, F>::
   visit_nodes(Bucket* bucket, FUNC& visitor_f)
--- a/src/hotspot/share/utilities/globalDefinitions.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/utilities/globalDefinitions.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -1110,16 +1110,16 @@
   if (value < 0) result = 0-result;
   return result;
 }
-static inline unsigned long uabs(unsigned long n) {
+static inline julong uabs(julong n) {
   union {
-    unsigned long result;
-    long value;
+    julong result;
+    jlong value;
   };
   result = n;
   if (value < 0) result = 0-result;
   return result;
 }
-static inline unsigned long uabs(jlong n) { return uabs((unsigned long)n); }
+static inline julong uabs(jlong n) { return uabs((julong)n); }
 static inline unsigned int uabs(int n) { return uabs((unsigned int)n); }
 
 // "to" should be greater than "from."
--- a/src/hotspot/share/utilities/hashtable.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/utilities/hashtable.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -107,36 +107,6 @@
   }
 }
 
-template <MEMFLAGS F> void BasicHashtable<F>::BucketUnlinkContext::free_entry(BasicHashtableEntry<F>* entry) {
-  entry->set_next(_removed_head);
-  _removed_head = entry;
-  if (_removed_tail == NULL) {
-    _removed_tail = entry;
-  }
-  _num_removed++;
-}
-
-template <MEMFLAGS F> void BasicHashtable<F>::bulk_free_entries(BucketUnlinkContext* context) {
-  if (context->_num_removed == 0) {
-    assert(context->_removed_head == NULL && context->_removed_tail == NULL,
-           "Zero entries in the unlink context, but elements linked from " PTR_FORMAT " to " PTR_FORMAT,
-           p2i(context->_removed_head), p2i(context->_removed_tail));
-    return;
-  }
-
-  // MT-safe add of the list of BasicHashTableEntrys from the context to the free list.
-  BasicHashtableEntry<F>* current = _free_list;
-  while (true) {
-    context->_removed_tail->set_next(current);
-    BasicHashtableEntry<F>* old = Atomic::cmpxchg(context->_removed_head, &_free_list, current);
-    if (old == current) {
-      break;
-    }
-    current = old;
-  }
-  Atomic::add(-context->_num_removed, &_number_of_entries);
-}
-
 // For oops and Strings the size of the literal is interesting. For other types, nobody cares.
 static int literal_size(ConstantPool*) { return 0; }
 static int literal_size(Klass*)        { return 0; }
--- a/src/hotspot/share/utilities/hashtable.hpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/hotspot/share/utilities/hashtable.hpp	Mon Dec 03 10:08:18 2018 +0100
@@ -204,25 +204,6 @@
 
   // Free the buckets in this hashtable
   void free_buckets();
-
-  // Helper data structure containing context for the bucket entry unlink process,
-  // storing the unlinked buckets in a linked list.
-  // Also avoids the need to pass around these four members as parameters everywhere.
-  struct BucketUnlinkContext {
-    int _num_processed;
-    int _num_removed;
-    // Head and tail pointers for the linked list of removed entries.
-    BasicHashtableEntry<F>* _removed_head;
-    BasicHashtableEntry<F>* _removed_tail;
-
-    BucketUnlinkContext() : _num_processed(0), _num_removed(0), _removed_head(NULL), _removed_tail(NULL) {
-    }
-
-    void free_entry(BasicHashtableEntry<F>* entry);
-  };
-  // Add of bucket entries linked together in the given context to the global free list. This method
-  // is mt-safe wrt. to other calls of this method.
-  void bulk_free_entries(BucketUnlinkContext* context);
 public:
   int table_size() const { return _table_size; }
   void set_entry(int index, BasicHashtableEntry<F>* entry);
--- a/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  * AIX implementation of FileSystemProvider
  */
 
-public class AixFileSystemProvider extends UnixFileSystemProvider {
+class AixFileSystemProvider extends UnixFileSystemProvider {
     public AixFileSystemProvider() {
         super();
     }
--- a/src/java.base/aix/classes/sun/nio/fs/DefaultFileSystemProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/aix/classes/sun/nio/fs/DefaultFileSystemProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, 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,19 +25,29 @@
 
 package sun.nio.fs;
 
-import java.nio.file.spi.FileSystemProvider;
+import java.nio.file.FileSystem;
 
 /**
  * Creates this platform's default FileSystemProvider.
  */
 
 public class DefaultFileSystemProvider {
+    private static final AixFileSystemProvider INSTANCE
+        = new AixFileSystemProvider();
+
     private DefaultFileSystemProvider() { }
 
     /**
-     * Returns the default FileSystemProvider.
+     * Returns the platform's default file system provider.
      */
-    public static FileSystemProvider create() {
-        return new AixFileSystemProvider();
+    public static AixFileSystemProvider instance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Returns the platform's default file system.
+     */
+    public static FileSystem theFileSystem() {
+        return INSTANCE.theFileSystem();
     }
 }
--- a/src/java.base/linux/classes/sun/nio/fs/DefaultFileSystemProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/linux/classes/sun/nio/fs/DefaultFileSystemProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, 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,19 +25,29 @@
 
 package sun.nio.fs;
 
-import java.nio.file.spi.FileSystemProvider;
+import java.nio.file.FileSystem;
 
 /**
  * Creates this platform's default FileSystemProvider.
  */
 
 public class DefaultFileSystemProvider {
+    private static final LinuxFileSystemProvider INSTANCE
+        = new LinuxFileSystemProvider();
+
     private DefaultFileSystemProvider() { }
 
     /**
-     * Returns the default FileSystemProvider.
+     * Returns the platform's default file system provider.
      */
-    public static FileSystemProvider create() {
-        return new LinuxFileSystemProvider();
+    public static LinuxFileSystemProvider instance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Returns the platform's default file system.
+     */
+    public static FileSystem theFileSystem() {
+        return INSTANCE.theFileSystem();
     }
 }
--- a/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystemProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystemProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -36,7 +36,7 @@
  * Linux implementation of FileSystemProvider
  */
 
-public class LinuxFileSystemProvider extends UnixFileSystemProvider {
+class LinuxFileSystemProvider extends UnixFileSystemProvider {
     public LinuxFileSystemProvider() {
         super();
     }
--- a/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystemProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystemProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  * Bsd implementation of FileSystemProvider
  */
 
-public class BsdFileSystemProvider extends UnixFileSystemProvider {
+class BsdFileSystemProvider extends UnixFileSystemProvider {
     public BsdFileSystemProvider() {
         super();
     }
--- a/src/java.base/macosx/classes/sun/nio/fs/DefaultFileSystemProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/macosx/classes/sun/nio/fs/DefaultFileSystemProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, 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,19 +25,29 @@
 
 package sun.nio.fs;
 
-import java.nio.file.spi.FileSystemProvider;
+import java.nio.file.FileSystem;
 
 /**
  * Creates this platform's default FileSystemProvider.
  */
 
 public class DefaultFileSystemProvider {
+    private static final MacOSXFileSystemProvider INSTANCE
+        = new MacOSXFileSystemProvider();
+
     private DefaultFileSystemProvider() { }
 
     /**
-     * Returns the default FileSystemProvider.
+     * Returns the platform's default file system provider.
      */
-    public static FileSystemProvider create() {
-        return new MacOSXFileSystemProvider();
+    public static MacOSXFileSystemProvider instance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Returns the platform's default file system.
+     */
+    public static FileSystem theFileSystem() {
+        return INSTANCE.theFileSystem();
     }
 }
--- a/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystemProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystemProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,7 +34,7 @@
  * MacOSX implementation of FileSystemProvider
  */
 
-public class MacOSXFileSystemProvider extends BsdFileSystemProvider {
+class MacOSXFileSystemProvider extends BsdFileSystemProvider {
     public MacOSXFileSystemProvider() {
         super();
     }
--- a/src/java.base/macosx/native/libjava/java_props_macosx.c	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/macosx/native/libjava/java_props_macosx.c	Mon Dec 03 10:08:18 2018 +0100
@@ -416,14 +416,12 @@
     cf_httpHost = NULL,
     cf_httpsHost = NULL,
     cf_ftpHost = NULL,
-    cf_socksHost = NULL,
-    cf_gopherHost = NULL;
+    cf_socksHost = NULL;
     int
     httpPort = 80, // Default proxy port values
     httpsPort = 443,
     ftpPort = 21,
-    socksPort = 1080,
-    gopherPort = 70;
+    socksPort = 1080;
 
     CFDictionaryRef dict = SCDynamicStoreCopyProxies(NULL);
     if (dict == NULL) return;
@@ -479,7 +477,6 @@
     CHECK_PROXY(https, HTTPS);
     CHECK_PROXY(ftp, FTP);
     CHECK_PROXY(socks, SOCKS);
-    CHECK_PROXY(gopher, Gopher);
 
 #undef CHECK_PROXY
 
--- a/src/java.base/macosx/native/libjli/java_md_macosx.m	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/macosx/native/libjli/java_md_macosx.m	Mon Dec 03 10:08:18 2018 +0100
@@ -508,7 +508,7 @@
         return JNI_FALSE;
     }
 
-    const char lastPathComponent[] = "/lib/jli/libjli.dylib";
+    const char lastPathComponent[] = "/lib/libjli.dylib";
     size_t sizeOfLastPathComponent = sizeof(lastPathComponent) - 1;
     if (pathLen < sizeOfLastPathComponent) {
         return JNI_FALSE;
--- a/src/java.base/share/classes/java/io/FilePermission.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/io/FilePermission.java	Mon Dec 03 10:08:18 2018 +0100
@@ -25,7 +25,6 @@
 
 package java.io;
 
-import java.net.URI;
 import java.nio.file.*;
 import java.security.*;
 import java.util.Enumeration;
@@ -199,12 +198,11 @@
     private static final long serialVersionUID = 7930732926638008763L;
 
     /**
-     * Always use the internal default file system, in case it was modified
-     * with java.nio.file.spi.DefaultFileSystemProvider.
+     * Use the platform's default file system to avoid recursive initialization
+     * issues when the VM is configured to use a custom file system provider.
      */
     private static final java.nio.file.FileSystem builtInFS =
-            DefaultFileSystemProvider.create()
-                    .getFileSystem(URI.create("file:///"));
+        DefaultFileSystemProvider.theFileSystem();
 
     private static final Path here = builtInFS.getPath(
             GetPropertyAction.privilegedGetProperty("user.dir"));
@@ -326,7 +324,7 @@
 
             if (name.equals("<<ALL FILES>>")) {
                 allFiles = true;
-                npath = builtInFS.getPath("");
+                npath = EMPTY_PATH;
                 // other fields remain default
                 return;
             }
@@ -351,7 +349,7 @@
                     npath = npath.getParent();
                 }
                 if (npath == null) {
-                    npath = builtInFS.getPath("");
+                    npath = EMPTY_PATH;
                 }
                 invalid = false;
             } catch (InvalidPathException ipe) {
--- a/src/java.base/share/classes/java/lang/System.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/lang/System.java	Mon Dec 03 10:08:18 2018 +0100
@@ -72,6 +72,7 @@
 import jdk.internal.logger.LoggerFinderLoader;
 import jdk.internal.logger.LazyLoggers;
 import jdk.internal.logger.LocalizedLoggerWrapper;
+import jdk.internal.util.SystemProps;
 import jdk.internal.vm.annotation.Stable;
 import sun.reflect.annotation.AnnotationType;
 import sun.nio.ch.Interruptible;
@@ -605,7 +606,6 @@
      */
 
     private static Properties props;
-    private static native Properties initProperties(Properties props);
 
     /**
      * Determines the current system properties.
@@ -799,9 +799,9 @@
         if (sm != null) {
             sm.checkPropertiesAccess();
         }
+
         if (props == null) {
-            props = new Properties();
-            initProperties(props);
+            props = SystemProps.initProperties();
             VersionProps.init(props);
         }
         System.props = props;
@@ -1966,15 +1966,11 @@
 
         // VM might invoke JNU_NewStringPlatform() to set those encoding
         // sensitive properties (user.home, user.name, boot.class.path, etc.)
-        // during "props" initialization, in which it may need access, via
-        // System.getProperty(), to the related system encoding property that
-        // have been initialized (put into "props") at early stage of the
-        // initialization. So make sure the "props" is available at the
-        // very beginning of the initialization and all system properties to
-        // be put into it directly.
-        props = new Properties(84);
-        initProperties(props);  // initialized by the VM
+        // during "props" initialization.
+        // The charset is initialized in System.c and does not depend on the Properties.
+        props = SystemProps.initProperties();
         VersionProps.init(props);
+        StaticProperty.javaHome();          // Load StaticProperty to cache the property values
 
         // There are certain system configurations that may be controlled by
         // VM options such as the maximum amount of direct memory and
@@ -1993,7 +1989,6 @@
         VM.saveAndRemoveProperties(props);
 
         lineSeparator = props.getProperty("line.separator");
-        StaticProperty.javaHome();          // Load StaticProperty to cache the property values
 
         FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
         FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
--- a/src/java.base/share/classes/java/lang/VersionProps.java.template	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/lang/VersionProps.java.template	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, 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
@@ -63,6 +63,9 @@
     private static final boolean isLTS =
         "@@VERSION_OPT@@".startsWith("LTS");
 
+    private static final String CLASSFILE_MAJOR_MINOR =
+        "@@VERSION_CLASSFILE_MAJOR@@.@@VERSION_CLASSFILE_MINOR@@";
+
     private static final String VENDOR_VERSION_STRING =
         "@@VENDOR_VERSION_STRING@@";
 
@@ -70,6 +73,20 @@
         (VENDOR_VERSION_STRING.length() > 0
          ? " " + VENDOR_VERSION_STRING : "");
 
+    private static final String VENDOR =
+        "@@VENDOR@@";
+
+    private static final String VENDOR_URL =
+        "@@VENDOR_URL@@";
+
+    private static final String VENDOR_URL_BUG =
+        "@@VENDOR_URL_BUG@@";
+
+    /**
+     * Initialize system properties using build provided values.
+     *
+     * @param props Properties instance in which to insert the properties
+     */
     public static void init(Properties props) {
         props.setProperty("java.version", java_version);
         props.setProperty("java.version.date", java_version_date);
@@ -77,6 +94,16 @@
         props.setProperty("java.runtime.name", java_runtime_name);
         if (VENDOR_VERSION_STRING.length() > 0)
             props.setProperty("java.vendor.version", VENDOR_VERSION_STRING);
+
+        props.setProperty("java.class.version", CLASSFILE_MAJOR_MINOR);
+
+        props.setProperty("java.specification.version", VERSION_NUMBER);
+        props.setProperty("java.specification.name", "Java Platform API Specification");
+        props.setProperty("java.specification.vendor", "Oracle Corporation");
+
+        props.setProperty("java.vendor", VENDOR);
+        props.setProperty("java.vendor.url", VENDOR_URL);
+        props.setProperty("java.vendor.url.bug", VENDOR_URL_BUG);
     }
 
     private static int parseVersionNumber(String version, int prevIndex, int index) {
--- a/src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java	Mon Dec 03 10:08:18 2018 +0100
@@ -75,6 +75,7 @@
     /** Represents a context to track nmethod dependencies on CallSite instance target. */
     static class CallSiteContext implements Runnable {
         //@Injected JVM_nmethodBucket* vmdependencies;
+        //@Injected jlong last_cleanup;
 
         static CallSiteContext make(CallSite cs) {
             final CallSiteContext newContext = new CallSiteContext();
--- a/src/java.base/share/classes/java/net/HostPortrange.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/net/HostPortrange.java	Mon Dec 03 10:08:18 2018 +0100
@@ -60,7 +60,7 @@
     HostPortrange(String scheme, String str) {
         // Parse the host name.  A name has up to three components, the
         // hostname, a port number, or two numbers representing a port
-        // range.   "www.sun.com:8080-9090" is a valid host name.
+        // range.   "www.example.com:8080-9090" is a valid host name.
 
         // With IPv6 an address can be 2010:836B:4179::836B:4179
         // An IPv6 address needs to be enclose in []
--- a/src/java.base/share/classes/java/net/InetAddress.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/net/InetAddress.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1168,7 +1168,7 @@
      * No name service is checked for the validity of the address.
      *
      * <p> The host name can either be a machine name, such as
-     * "{@code java.sun.com}", or a textual representation of its IP
+     * "{@code www.example.com}", or a textual representation of its IP
      * address.
      * <p> No validity checking is done on the host name either.
      *
@@ -1213,7 +1213,7 @@
      * Determines the IP address of a host, given the host's name.
      *
      * <p> The host name can either be a machine name, such as
-     * "{@code java.sun.com}", or a textual representation of its
+     * "{@code www.example.com}", or a textual representation of its
      * IP address. If a literal IP address is supplied, only the
      * validity of the address format is checked.
      *
@@ -1259,7 +1259,7 @@
      * based on the configured name service on the system.
      *
      * <p> The host name can either be a machine name, such as
-     * "{@code java.sun.com}", or a textual representation of its IP
+     * "{@code www.example.com}", or a textual representation of its IP
      * address. If a literal IP address is supplied, only the
      * validity of the address format is checked.
      *
--- a/src/java.base/share/classes/java/net/SocketPermission.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/net/SocketPermission.java	Mon Dec 03 10:08:18 2018 +0100
@@ -63,7 +63,7 @@
  * or as "localhost" (for the local machine).
  * The wildcard "*" may be included once in a DNS name host
  * specification. If it is included, it must be in the leftmost
- * position, as in "*.sun.com".
+ * position, as in "*.example.com".
  * <p>
  * The format of the IPv6reference should follow that specified in <a
  * href="http://www.ietf.org/rfc/rfc2732.txt"><i>RFC&nbsp;2732: Format
@@ -115,11 +115,11 @@
  * note that if the following permission:
  *
  * <pre>
- *   p1 = new SocketPermission("puffin.eng.sun.com:7777", "connect,accept");
+ *   p1 = new SocketPermission("foo.example.com:7777", "connect,accept");
  * </pre>
  *
  * is granted to some code, it allows that code to connect to port 7777 on
- * {@code puffin.eng.sun.com}, and to accept connections on that port.
+ * {@code foo.example.com}, and to accept connections on that port.
  *
  * <p>Similarly, if the following permission:
  *
@@ -211,7 +211,7 @@
     // all the IP addresses of the host
     private transient InetAddress[] addresses;
 
-    // true if the hostname is a wildcard (e.g. "*.sun.com")
+    // true if the hostname is a wildcard (e.g. "*.example.com")
     private transient boolean wildcard;
 
     // true if we were initialized with a single numeric IP address
@@ -274,9 +274,9 @@
      * <p>
      * Examples of SocketPermission instantiation are the following:
      * <pre>
-     *    nr = new SocketPermission("www.catalog.com", "connect");
-     *    nr = new SocketPermission("www.sun.com:80", "connect");
-     *    nr = new SocketPermission("*.sun.com", "connect");
+     *    nr = new SocketPermission("www.example.com", "connect");
+     *    nr = new SocketPermission("www.example.com:80", "connect");
+     *    nr = new SocketPermission("*.example.com", "connect");
      *    nr = new SocketPermission("*.edu", "resolve");
      *    nr = new SocketPermission("204.160.241.0", "connect");
      *    nr = new SocketPermission("localhost:1024-65535", "listen");
@@ -400,7 +400,7 @@
 
         // Parse the host name.  A name has up to three components, the
         // hostname, a port number, or two numbers representing a port
-        // range.   "www.sun.com:8080-9090" is a valid host name.
+        // range.   "www.example.com:8080-9090" is a valid host name.
 
         // With IPv6 an address can be 2010:836B:4179::836B:4179
         // An IPv6 address needs to be enclose in []
@@ -835,10 +835,10 @@
      * <ul>
      * <li> If this object was initialized with a single IP address and one of <i>p</i>'s
      * IP addresses is equal to this object's IP address.
-     * <li>If this object is a wildcard domain (such as *.sun.com), and
+     * <li>If this object is a wildcard domain (such as *.example.com), and
      * <i>p</i>'s canonical name (the name without any preceding *)
-     * ends with this object's canonical host name. For example, *.sun.com
-     * implies *.eng.sun.com.
+     * ends with this object's canonical host name. For example, *.example.com
+     * implies *.foo.example.com.
      * <li>If this object was not initialized with a single IP address, and one of this
      * object's IP addresses equals one of <i>p</i>'s IP addresses.
      * <li>If this canonical name equals <i>p</i>'s canonical name.
@@ -878,7 +878,7 @@
      * <li> Checks that "p"'s port range is included in this port range
      * <li> If this object was initialized with an IP address, checks that
      *      one of "p"'s IP addresses is equal to this object's IP address.
-     * <li> If either object is a wildcard domain (i.e., "*.sun.com"),
+     * <li> If either object is a wildcard domain (i.e., "*.example.com"),
      *      attempt to match based on the wildcard.
      * <li> If this object was not initialized with an IP address, attempt
      *      to find a match based on the IP addresses in both objects.
@@ -944,8 +944,8 @@
             // check and see if we have any wildcards...
             if (this.wildcard || that.wildcard) {
                 // if they are both wildcards, return true iff
-                // that's cname ends with this cname (i.e., *.sun.com
-                // implies *.eng.sun.com)
+                // that's cname ends with this cname (i.e., *.example.com
+                // implies *.foo.example.com)
                 if (this.wildcard && that.wildcard)
                     return (that.cname.endsWith(this.cname));
 
@@ -1057,7 +1057,7 @@
         // "1.2.3.4" equal to "1.2.3.4.", or
         //  "*.edu" equal to "*.edu", but it
         //  does not catch "crypto" equal to
-        // "crypto.eng.sun.com".
+        // "crypto.foo.example.com".
 
         if (this.getName().equalsIgnoreCase(that.getName())) {
             return true;
@@ -1313,7 +1313,7 @@
         SocketPermissionCollection nps = new SocketPermissionCollection();
         nps.add(this_);
         nps.add(new SocketPermission("www-leland.stanford.edu","connect"));
-        nps.add(new SocketPermission("www-sun.com","connect"));
+        nps.add(new SocketPermission("www-example.com","connect"));
         System.out.println("nps.implies(that) = " + nps.implies(that_));
         System.out.println("-----\n");
     }
--- a/src/java.base/share/classes/java/net/URI.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/net/URI.java	Mon Dec 03 10:08:18 2018 +0100
@@ -83,7 +83,7 @@
  * subject to further parsing.  Some examples of opaque URIs are:
  *
  * <blockquote><ul style="list-style-type:none">
- * <li>{@code mailto:java-net@java.sun.com}</li>
+ * <li>{@code mailto:java-net@www.example.com}</li>
  * <li>{@code news:comp.lang.java}</li>
  * <li>{@code urn:isbn:096139210x}</li>
  * </ul></blockquote>
@@ -399,7 +399,7 @@
  * For any URI <i>u</i> that does not contain redundant syntax such as two
  * slashes before an empty authority (as in {@code file:///tmp/}&nbsp;) or a
  * colon following a host name but no port (as in
- * {@code http://java.sun.com:}&nbsp;), and that does not encode characters
+ * {@code http://www.example.com:}&nbsp;), and that does not encode characters
  * except those that must be quoted, the following identities also hold:
  * <pre>
  *     new URI(<i>u</i>.getScheme(),
--- a/src/java.base/share/classes/java/net/URL.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/net/URL.java	Mon Dec 03 10:08:18 2018 +0100
@@ -95,7 +95,7 @@
  * as a "ref" or a "reference". The fragment is indicated by the sharp
  * sign character "#" followed by more characters. For example,
  * <blockquote><pre>
- *     http://java.sun.com/index.html#chapter1
+ *     http://www.example.com/index.html#chapter1
  * </pre></blockquote>
  * <p>
  * This fragment is not technically part of the URL. Rather, it
@@ -109,7 +109,7 @@
  * relative to another URL. Relative URLs are frequently used within
  * HTML pages. For example, if the contents of the URL:
  * <blockquote><pre>
- *     http://java.sun.com/index.html
+ *     http://www.example.com/index.html
  * </pre></blockquote>
  * contained within it the relative URL:
  * <blockquote><pre>
@@ -117,7 +117,7 @@
  * </pre></blockquote>
  * it would be a shorthand for:
  * <blockquote><pre>
- *     http://java.sun.com/FAQ.html
+ *     http://www.example.com/FAQ.html
  * </pre></blockquote>
  * <p>
  * The relative URL need not specify all the components of a URL. If
@@ -1421,13 +1421,12 @@
                 // this thread created.
                 handler = handler2;
             }
+
+            // Insert this handler into the hashtable
+            if (handler != null) {
+                handlers.put(protocol, handler);
+            }
         }
-
-        // Insert this handler into the hashtable
-        if (handler != null) {
-            handlers.put(protocol, handler);
-        }
-
         return handler;
     }
 
--- a/src/java.base/share/classes/java/net/URLPermission.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/net/URLPermission.java	Mon Dec 03 10:08:18 2018 +0100
@@ -57,7 +57,7 @@
  * RFC 2732</a>. Literal IPv6 addresses must however, be enclosed in '[]' characters.
  * The <i>dnsname</i> specification can be preceded by "*." which means
  * the name will match any hostname whose right-most domain labels are the same as
- * this name. For example, "*.oracle.com" matches "foo.bar.oracle.com"
+ * this name. For example, "*.example.com" matches "foo.bar.example.com"
  * <p>
  * <i>portrange</i> is used to specify a port number, or a bounded or unbounded range of ports
  * that this permission applies to. If portrange is absent or invalid, then a default
@@ -78,18 +78,18 @@
  * <tr><th scope="col">Example url</th><th scope="col">Description</th></tr>
  * </thead>
  * <tbody style="text-align:left">
- * <tr><th scope="row" style="white-space:nowrap;">http://www.oracle.com/a/b/c.html</th>
+ * <tr><th scope="row" style="white-space:nowrap;">http://www.example.com/a/b/c.html</th>
  *   <td>A url which identifies a specific (single) resource</td>
  * </tr>
- * <tr><th scope="row">http://www.oracle.com/a/b/*</th>
+ * <tr><th scope="row">http://www.example.com/a/b/*</th>
  *   <td>The '*' character refers to all resources in the same "directory" - in
  *       other words all resources with the same number of path components, and
  *       which only differ in the final path component, represented by the '*'.
  *   </td>
  * </tr>
- * <tr><th scope="row">http://www.oracle.com/a/b/-</th>
+ * <tr><th scope="row">http://www.example.com/a/b/-</th>
  *   <td>The '-' character refers to all resources recursively below the
- *       preceding path (e.g. http://www.oracle.com/a/b/c/d/e.html matches this
+ *       preceding path (e.g. http://www.example.com/a/b/c/d/e.html matches this
  *       example).
  *   </td>
  * </tr>
@@ -267,9 +267,9 @@
      * <li>if this's url scheme is not equal to p's url scheme return false</li>
      * <li>if the scheme specific part of this's url is '*' return true</li>
      * <li>if the set of hosts defined by p's url hostrange is not a subset of
-     *     this's url hostrange then return false. For example, "*.foo.oracle.com"
-     *     is a subset of "*.oracle.com". "foo.bar.oracle.com" is not
-     *     a subset of "*.foo.oracle.com"</li>
+     *     this's url hostrange then return false. For example, "*.foo.example.com"
+     *     is a subset of "*.example.com". "foo.bar.example.com" is not
+     *     a subset of "*.foo.example.com"</li>
      * <li>if the portrange defined by p's url is not a subset of the
      *     portrange defined by this's url then return false.
      * <li>if the path or paths specified by p's url are contained in the
--- a/src/java.base/share/classes/java/net/doc-files/net-properties.html	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/net/doc-files/net-properties.html	Mon Dec 03 10:08:18 2018 +0100
@@ -42,7 +42,7 @@
 <a id="Ipv4IPv6"></a>
 <H2>IPv4 / IPv6</H2>
 <UL>
-	<LI><P><B>java.net.preferIPv4Stack</B> (default: false)<BR>
+	<LI><P><B>{@systemProperty java.net.preferIPv4Stack}</B> (default: false)<BR>
 	If IPv6 is available on the operating system the
 	underlying native socket will be, by default, an IPv6 socket which
 	lets applications connect to, and accept connections from, both
@@ -50,7 +50,7 @@
 	rather use IPv4 only sockets, then this property can be set to <B>true</B>.
 	The implication is that it will not be possible for the application
 	to communicate with IPv6 only hosts.</P>
-	<LI><P><B>java.net.preferIPv6Addresses</B> (default: false)<BR>
+	<LI><P><B>{@systemProperty java.net.preferIPv6Addresses}</B> (default: false)<BR>
 	When dealing with a host which has both IPv4
 	and IPv6 addresses, and if IPv6 is available on the operating
 	system, the default behavior is to prefer using IPv4 addresses over
@@ -73,12 +73,12 @@
 	<LI><P>HTTP</P>
 	<P>The following proxy settings are used by the HTTP protocol handler.</P>
 	<UL>
-		<LI><P><B>http.proxyHost</B> (default: &lt;none&gt;)<BR>
+		<LI><P><B>{@systemProperty http.proxyHost}</B> (default: &lt;none&gt;)<BR>
 	        The hostname, or address, of the proxy server
 		</P>
-		<LI><P><B>http.proxyPort</B> (default: 80)<BR>
+		<LI><P><B>{@systemProperty http.proxyPort}</B> (default: 80)<BR>
 	        The port number of the proxy server.</P>
-		<LI><P><B>http.nonProxyHosts</B> (default:  localhost|127.*|[::1])<BR>
+		<LI><P><B>{@systemProperty http.nonProxyHosts}</B> (default:  localhost|127.*|[::1])<BR>
 	        Indicates the hosts that should be accessed without going
 	        through the proxy. Typically this defines internal hosts.
 	        The value of this property is a list of hosts,
@@ -94,10 +94,10 @@
 	mainly used when confidentiality (like on payment sites) is needed.</P>
 	<P>The following proxy settings are used by the HTTPS protocol handler.</P>
 	<UL>
-		<LI><P><B>https.proxyHost</B>(default: &lt;none&gt;)<BR>
+		<LI><P><B>{@systemProperty https.proxyHost}</B>(default: &lt;none&gt;)<BR>
 	        The hostname, or address, of the proxy server
 		</P>
-		<LI><P><B>https.proxyPort</B> (default: 443)<BR>
+		<LI><P><B>{@systemProperty https.proxyPort}</B> (default: 443)<BR>
 	        The port number of the proxy server.</P>
 		<P>The HTTPS protocol handler will use the same nonProxyHosts
 		property as the HTTP protocol.</P>
@@ -105,12 +105,12 @@
 	<LI><P>FTP</P>
 	<P>The following proxy settings are used by the FTP protocol handler.</P>
 	<UL>
-		<LI><P><B>ftp.proxyHost</B>(default: &lt;none&gt;)<BR>
+		<LI><P><B>{@systemProperty ftp.proxyHost}</B>(default: &lt;none&gt;)<BR>
 	        The hostname, or address, of the proxy server
 		</P>
-		<LI><P><B>ftp.proxyPort</B> (default: 80)<BR>
+		<LI><P><B>{@systemProperty ftp.proxyPort}</B> (default: 80)<BR>
 	        The port number of the proxy server.</P>
-		<LI><P><B>ftp.nonProxyHosts</B> (default: localhost|127.*|[::1])<BR>
+		<LI><P><B>{@systemProperty ftp.nonProxyHosts}</B> (default: localhost|127.*|[::1])<BR>
 	        Indicates the hosts that should be accessed without going
 	        through the proxy. Typically this defines internal hosts.
 	        The value of this property is a list of hosts, separated by
@@ -129,26 +129,26 @@
 	are specified. If SOCKS is supported by a Java SE implementation, the
 	following properties will be used:</P>
 	<UL>
-		<LI><P><B>socksProxyHost</B> (default: &lt;none&gt;)<BR>
+		<LI><P><B>{@systemProperty socksProxyHost}</B> (default: &lt;none&gt;)<BR>
 	        The hostname, or address, of the proxy server.</P>
-		<LI><P><B>socksProxyPort</B> (default: 1080)<BR>
+		<LI><P><B>{@systemProperty socksProxyPort}</B> (default: 1080)<BR>
 	        The port number of the proxy server.</P>
-                <LI><P><B>socksProxyVersion</B> (default: 5)<BR>
+                <LI><P><B>{@systemProperty socksProxyVersion}</B> (default: 5)<BR>
                 The version of the SOCKS protocol supported by the server. The
                 default is <code>5</code> indicating SOCKS V5, alternatively
                 <code>4</code> can be specified for SOCKS V4. Setting the property
                 to values other than these leads to unspecified behavior.</P>
-		<LI><P><B>java.net.socks.username</B> (default: &lt;none&gt;)<BR>
+		<LI><P><B>{@systemProperty java.net.socks.username}</B> (default: &lt;none&gt;)<BR>
 	        Username to use if the SOCKSv5 server asks for authentication
 	        and no java.net.Authenticator instance was found.</P>
-		<LI><P><B>java.net.socks.password</B> (default: &lt;none&gt;)<BR>
+		<LI><P><B>{@systemProperty java.net.socks.password}</B> (default: &lt;none&gt;)<BR>
 	        Password to use if the SOCKSv5 server asks for authentication
 	        and no java.net.Authenticator instance was found.</P>
 		<P>Note that if no authentication is provided with either the above
 		properties or an Authenticator, and the proxy requires one, then
 		the <B>user.name</B> property will be used with no password.</P>
 	</UL>
-	<LI><P><B>java.net.useSystemProxies</B> (default: false)<BR>
+	<LI><P><B>{@systemProperty java.net.useSystemProxies}</B> (default: false)<BR>
 	On Windows systems, macOS systems and on Gnome systems it is possible to
 	tell the java.net stack, setting this property to <B>true</B>, to use
 	the system proxy settings (both	these systems let you set proxies
@@ -158,29 +158,29 @@
 <a id="MiscHTTP"></a>
 <H2>Misc HTTP URL stream protocol handler properties</H2>
 <UL>
-	<LI><P><B>http.agent</B> (default: &ldquo;Java/&lt;version&gt;&rdquo;)<BR>
+	<LI><P><B>{@systemProperty http.agent}</B> (default: &ldquo;Java/&lt;version&gt;&rdquo;)<BR>
 	Defines the string sent in the User-Agent request header in http
 	requests. Note that the string &ldquo;Java/&lt;version&gt;&rdquo; will
 	be appended to the one provided in the property (e.g. if
 	-Dhttp.agent=&rdquo;foobar&rdquo; is used, the User-Agent header will
 	contain &ldquo;foobar Java/1.5.0&rdquo; if the version of the VM is
 	1.5.0). This property is checked only once at startup.</P>
-	<LI><P><B>http.keepalive</B> (default: true)<BR>
+	<LI><P><B>{@systemProperty http.keepalive}</B> (default: true)<BR>
 	Indicates if persistent connections should be supported. They improve
 	performance by allowing the underlying socket connection to be reused
 	for multiple http requests. If this is set to true then persistent
 	connections will be requested with HTTP 1.1 servers.</P>
-	<LI><P><B>http.maxConnections</B> (default: 5)<BR>
+	<LI><P><B>{@systemProperty http.maxConnections}</B> (default: 5)<BR>
 	If HTTP keepalive is enabled (see above) this value determines the
 	maximum number of idle connections that will be simultaneously kept
 	alive, per destination.</P>
-	<LI><P><B>http.maxRedirects</B> (default: 20)<BR>
+	<LI><P><B>{@systemProperty http.maxRedirects}</B> (default: 20)<BR>
 	This integer value determines the maximum number, for a given request,
 	of HTTP redirects that will be automatically followed by the
 	protocol handler.</P>
-	<LI><P><B>http.auth.digest.validateServer</B> (default: false)</P>
-	<LI><P><B>http.auth.digest.validateProxy</B> (default: false)</P>
-	<LI><P><B>http.auth.digest.cnonceRepeat</B> (default: 5)</P>
+	<LI><P><B>{@systemProperty http.auth.digest.validateServer}</B> (default: false)</P>
+	<LI><P><B>{@systemProperty http.auth.digest.validateProxy}</B> (default: false)</P>
+	<LI><P><B>{@systemProperty http.auth.digest.cnonceRepeat}</B> (default: 5)</P>
 	<P>These 3 properties modify the behavior of the HTTP digest
 	authentication mechanism. Digest authentication provides a limited
 	ability for the server  to authenticate itself to the client (i.e.
@@ -194,7 +194,7 @@
 	value reduces the computational overhead on both client and server
 	by reducing the amount of material that has to be hashed for each
 	HTTP request.</P>
-	<LI><P><B>http.auth.ntlm.domain</B> (default: &lt;none&gt;)<BR>
+	<LI><P><B>{@systemProperty http.auth.ntlm.domain}</B> (default: &lt;none&gt;)<BR>
 	NTLM is another authentication scheme. It uses the
 	java.net.Authenticator class to acquire usernames and passwords when
 	they are needed. However NTLM also needs the NT domain name. There are
@@ -224,14 +224,14 @@
 have to access the naming service. These properties allow for some
 tuning on how the cache is operating.</P>
 <UL>
-	<LI><P><B>networkaddress.cache.ttl</B> (default: see below)<BR>
+	<LI><P><B>{@systemProperty networkaddress.cache.ttl}</B> (default: see below)<BR>
 	Value is an integer corresponding to the number of seconds successful
 	name lookups will be kept in the cache. A value of -1, or any  other
 	negative value for that matter,	indicates a &ldquo;cache forever&rdquo;
 	policy, while a value of 0 (zero) means no caching. The default value
 	is -1 (forever) if a security manager is installed, and implementation
 	specific when no security manager is installed.</P>
-	<LI><P><B>networkaddress.cache.negative.ttl</B>	(default: 10)<BR>
+	<LI><P><B>{@systemProperty networkaddress.cache.negative.ttl}</B>	(default: 10)<BR>
 	Value is an integer corresponding to the number of seconds an
 	unsuccessful name lookup will be kept in the cache. A value of -1,
 	or any negative value, means &ldquo;cache forever&rdquo;, while a
--- a/src/java.base/share/classes/java/net/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/net/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -131,7 +131,7 @@
  *    InputStream.
  * <p>Here is an example:</p>
  * <pre>
- * URI uri = new URI("http://java.sun.com/");
+ * URI uri = new URI("http://www.example.com/");
  * URL url = uri.toURL();
  * InputStream in = url.openStream();
  * </pre>
--- a/src/java.base/share/classes/java/nio/file/FileSystems.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/nio/file/FileSystems.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,7 @@
 import java.util.ServiceLoader;
 
 import jdk.internal.misc.VM;
+import sun.nio.fs.DefaultFileSystemProvider;
 
 /**
  * Factory methods for file systems. This class defines the {@link #getDefault
@@ -88,16 +89,6 @@
 public final class FileSystems {
     private FileSystems() { }
 
-    // Built-in file system provider
-    private static final FileSystemProvider builtinFileSystemProvider =
-        sun.nio.fs.DefaultFileSystemProvider.create();
-
-    // built-in file system
-    private static class BuiltinFileSystemHolder {
-        static final FileSystem builtinFileSystem =
-            builtinFileSystemProvider.getFileSystem(URI.create("file:///"));
-    }
-
     // lazy initialization of default file system
     private static class DefaultFileSystemHolder {
         static final FileSystem defaultFileSystem = defaultFileSystem();
@@ -118,7 +109,8 @@
 
         // returns default provider
         private static FileSystemProvider getDefaultProvider() {
-            FileSystemProvider provider = builtinFileSystemProvider;
+            // start with the platform's default file system provider
+            FileSystemProvider provider = DefaultFileSystemProvider.instance();
 
             // if the property java.nio.file.spi.DefaultFileSystemProvider is
             // set then its value is the name of the default provider (or a list)
@@ -189,7 +181,8 @@
         if (VM.isModuleSystemInited()) {
             return DefaultFileSystemHolder.defaultFileSystem;
         } else {
-            return BuiltinFileSystemHolder.builtinFileSystem;
+            // always use the platform's default file system during startup
+            return DefaultFileSystemProvider.theFileSystem();
         }
     }
 
--- a/src/java.base/share/classes/java/nio/file/Files.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/nio/file/Files.java	Mon Dec 03 10:08:18 2018 +0100
@@ -3067,7 +3067,7 @@
      * it to a file:
      * <pre>
      *     Path path = ...
-     *     URI u = URI.create("http://java.sun.com/");
+     *     URI u = URI.create("http://www.example.com/");
      *     try (InputStream in = u.toURL().openStream()) {
      *         Files.copy(in, path);
      *     }
--- a/src/java.base/share/classes/java/security/CodeSource.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/security/CodeSource.java	Mon Dec 03 10:08:18 2018 +0100
@@ -309,13 +309,13 @@
      * <p>
      * For example, the codesource objects with the following locations
      * and null certificates all imply
-     * the codesource with the location "http://java.sun.com/classes/foo.jar"
+     * the codesource with the location "http://www.example.com/classes/foo.jar"
      * and null certificates:
      * <pre>
      *     http:
-     *     http://*.sun.com/classes/*
-     *     http://java.sun.com/classes/-
-     *     http://java.sun.com/classes/foo.jar
+     *     http://*.example.com/classes/*
+     *     http://www.example.com/classes/-
+     *     http://www.example.com/classes/foo.jar
      * </pre>
      *
      * Note that if this CodeSource has a null location and a null
--- a/src/java.base/share/classes/java/security/KeyStore.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/security/KeyStore.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1813,8 +1813,8 @@
             }
         }
 
-        throw new KeyStoreException("Unrecognized keystore format: " +
-            keystore);
+        throw new KeyStoreException("This keystore does not support probing "
+                + "and must be loaded with a specified type");
     }
 
     /**
--- a/src/java.base/share/classes/java/util/ArrayDeque.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/ArrayDeque.java	Mon Dec 03 10:08:18 2018 +0100
@@ -37,7 +37,6 @@
 import java.io.Serializable;
 import java.util.function.Consumer;
 import java.util.function.Predicate;
-
 import jdk.internal.access.SharedSecrets;
 
 /**
--- a/src/java.base/share/classes/java/util/Date.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/Date.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1994, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2018, 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
@@ -84,12 +84,12 @@
  * <i>not</i> adjusted for leap seconds. An interesting source of
  * further information is the United States Naval Observatory (USNO):
  * <blockquote><pre>
- *     <a href="http://www.usno.navy.mil/USNO">http://www.usno.navy.mil/USNO</a>
+ *     <a href="https://www.usno.navy.mil/USNO">https://www.usno.navy.mil/USNO</a>
  * </pre></blockquote>
  * <p>
  * and the material regarding "Systems of Time" at:
  * <blockquote><pre>
- *     <a href="http://www.usno.navy.mil/USNO/time/master-clock/systems-of-time">http://www.usno.navy.mil/USNO/time/master-clock/systems-of-time</a>
+ *     <a href="https://www.usno.navy.mil/USNO/time/master-clock/systems-of-time">https://www.usno.navy.mil/USNO/time/master-clock/systems-of-time</a>
  * </pre></blockquote>
  * <p>
  * which has descriptions of various different time systems including
--- a/src/java.base/share/classes/java/util/ResourceBundle.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/ResourceBundle.java	Mon Dec 03 10:08:18 2018 +0100
@@ -3184,10 +3184,16 @@
                                 bundleClass.getName() + " in " + m.toString());
                         }
                         try {
-                            // bundle in a unnamed module
-                            Constructor<ResourceBundle> ctor = bundleClass.getConstructor();
+                            Constructor<ResourceBundle> ctor = AccessController.doPrivileged(
+                                new PrivilegedExceptionAction<>() {
+                                    @Override
+                                    public Constructor<ResourceBundle> run() throws NoSuchMethodException {
+                                        return bundleClass.getDeclaredConstructor();
+                                    }
+                                });
                             if (!Modifier.isPublic(ctor.getModifiers())) {
-                                return null;
+                                throw new IllegalAccessException("no-arg constructor in " +
+                                    bundleClass.getName() + " is not publicly accessible.");
                             }
 
                             // java.base may not be able to read the bundleClass's module.
@@ -3196,12 +3202,16 @@
                             bundle = ctor.newInstance((Object[]) null);
                         } catch (InvocationTargetException e) {
                             uncheckedThrow(e);
+                        } catch (PrivilegedActionException e) {
+                            assert e.getException() instanceof NoSuchMethodException;
+                            throw new InstantiationException("public no-arg constructor " +
+                                "does not exist in " + bundleClass.getName());
                         }
                     } else {
                         throw new ClassCastException(c.getName()
                                 + " cannot be cast to ResourceBundle");
                     }
-                } catch (ClassNotFoundException|NoSuchMethodException e) {
+                } catch (ClassNotFoundException e) {
                 }
             } else if (format.equals("java.properties")) {
                 final String resourceName = toResourceName0(bundleName, "properties");
--- a/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java	Mon Dec 03 10:08:18 2018 +0100
@@ -2542,6 +2542,8 @@
                             setTabAt(tab, i, fwd);
                             advance = true;
                         }
+                        else if (f instanceof ReservationNode)
+                            throw new IllegalStateException("Recursive update");
                     }
                 }
             }
--- a/src/java.base/share/classes/java/util/concurrent/Exchanger.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/Exchanger.java	Mon Dec 03 10:08:18 2018 +0100
@@ -564,8 +564,8 @@
         Object item = (x == null) ? NULL_ITEM : x; // translate null args
         if (((a = arena) != null ||
              (v = slotExchange(item, false, 0L)) == null) &&
-            ((Thread.interrupted() || // disambiguates null return
-              (v = arenaExchange(item, false, 0L)) == null)))
+            (Thread.interrupted() || // disambiguates null return
+             (v = arenaExchange(item, false, 0L)) == null))
             throw new InterruptedException();
         return (v == NULL_ITEM) ? null : (V)v;
     }
@@ -620,8 +620,8 @@
         long ns = unit.toNanos(timeout);
         if ((arena != null ||
              (v = slotExchange(item, true, ns)) == null) &&
-            ((Thread.interrupted() ||
-              (v = arenaExchange(item, true, ns)) == null)))
+            (Thread.interrupted() ||
+             (v = arenaExchange(item, true, ns)) == null))
             throw new InterruptedException();
         if (v == TIMED_OUT)
             throw new TimeoutException();
--- a/src/java.base/share/classes/java/util/concurrent/ForkJoinTask.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/ForkJoinTask.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1230,14 +1230,13 @@
     /**
      * Immediately performs the base action of this task and returns
      * true if, upon return from this method, this task is guaranteed
-     * to have completed normally. This method may return false
-     * otherwise, to indicate that this task is not necessarily
-     * complete (or is not known to be complete), for example in
-     * asynchronous actions that require explicit invocations of
-     * completion methods. This method may also throw an (unchecked)
-     * exception to indicate abnormal exit. This method is designed to
-     * support extensions, and should not in general be called
-     * otherwise.
+     * to have completed. This method may return false otherwise, to
+     * indicate that this task is not necessarily complete (or is not
+     * known to be complete), for example in asynchronous actions that
+     * require explicit invocations of completion methods. This method
+     * may also throw an (unchecked) exception to indicate abnormal
+     * exit. This method is designed to support extensions, and should
+     * not in general be called otherwise.
      *
      * @return {@code true} if this task is known to have completed normally
      */
--- a/src/java.base/share/classes/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java	Mon Dec 03 10:08:18 2018 +0100
@@ -121,9 +121,9 @@
      * other calls to {@code compareAndSet} and {@code set}, but not
      * necessarily with respect to other changes in the field.
      *
-     * <p><a href="package-summary.html#weakCompareAndSet">May fail
-     * spuriously and does not provide ordering guarantees</a>, so is
-     * only rarely an appropriate alternative to {@code compareAndSet}.
+     * <p>This operation may fail spuriously and does not provide
+     * ordering guarantees, so is only rarely an appropriate
+     * alternative to {@code compareAndSet}.
      *
      * @param obj An object whose field to conditionally set
      * @param expect the expected value
--- a/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLongFieldUpdater.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLongFieldUpdater.java	Mon Dec 03 10:08:18 2018 +0100
@@ -124,9 +124,9 @@
      * other calls to {@code compareAndSet} and {@code set}, but not
      * necessarily with respect to other changes in the field.
      *
-     * <p><a href="package-summary.html#weakCompareAndSet">May fail
-     * spuriously and does not provide ordering guarantees</a>, so is
-     * only rarely an appropriate alternative to {@code compareAndSet}.
+     * <p>This operation may fail spuriously and does not provide
+     * ordering guarantees, so is only rarely an appropriate
+     * alternative to {@code compareAndSet}.
      *
      * @param obj An object whose field to conditionally set
      * @param expect the expected value
--- a/src/java.base/share/classes/java/util/concurrent/atomic/AtomicMarkableReference.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/atomic/AtomicMarkableReference.java	Mon Dec 03 10:08:18 2018 +0100
@@ -110,14 +110,12 @@
     }
 
     /**
-     * Atomically sets the value of both the reference and mark
-     * to the given update values if the
-     * current reference is {@code ==} to the expected reference
-     * and the current mark is equal to the expected mark.
-     *
-     * <p><a href="package-summary.html#weakCompareAndSet">May fail
-     * spuriously and does not provide ordering guarantees</a>, so is
-     * only rarely an appropriate alternative to {@code compareAndSet}.
+     * Atomically sets the value of both the reference and mark to the
+     * given update values if the current reference is {@code ==} to
+     * the expected reference and the current mark is equal to the
+     * expected mark. This operation may fail spuriously and does not
+     * provide ordering guarantees, so is only rarely an
+     * appropriate alternative to {@code compareAndSet}.
      *
      * @param expectedReference the expected value of the reference
      * @param newReference the new value for the reference
--- a/src/java.base/share/classes/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java	Mon Dec 03 10:08:18 2018 +0100
@@ -143,9 +143,9 @@
      * other calls to {@code compareAndSet} and {@code set}, but not
      * necessarily with respect to other changes in the field.
      *
-     * <p><a href="package-summary.html#weakCompareAndSet">May fail
-     * spuriously and does not provide ordering guarantees</a>, so is
-     * only rarely an appropriate alternative to {@code compareAndSet}.
+     * <p>This operation may fail spuriously and does not provide
+     * ordering guarantees, so is only rarely an appropriate
+     * alternative to {@code compareAndSet}.
      *
      * @param obj An object whose field to conditionally set
      * @param expect the expected value
--- a/src/java.base/share/classes/java/util/concurrent/atomic/AtomicStampedReference.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/atomic/AtomicStampedReference.java	Mon Dec 03 10:08:18 2018 +0100
@@ -110,14 +110,12 @@
     }
 
     /**
-     * Atomically sets the value of both the reference and stamp
-     * to the given update values if the
-     * current reference is {@code ==} to the expected reference
-     * and the current stamp is equal to the expected stamp.
-     *
-     * <p><a href="package-summary.html#weakCompareAndSet">May fail
-     * spuriously and does not provide ordering guarantees</a>, so is
-     * only rarely an appropriate alternative to {@code compareAndSet}.
+     * Atomically sets the value of both the reference and stamp to
+     * the given update values if the current reference is {@code ==}
+     * to the expected reference and the current stamp is equal to the
+     * expected stamp. This operation may fail spuriously and does not
+     * provide ordering guarantees, so is only rarely an
+     * appropriate alternative to {@code compareAndSet}.
      *
      * @param expectedReference the expected value of the reference
      * @param newReference the new value for the reference
--- a/src/java.base/share/classes/java/util/concurrent/atomic/DoubleAccumulator.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/atomic/DoubleAccumulator.java	Mon Dec 03 10:08:18 2018 +0100
@@ -280,7 +280,7 @@
 
     /**
      * Returns a
-     * <a href="../../../../serialized-form.html#java.util.concurrent.atomic.DoubleAccumulator.SerializationProxy">
+     * <a href="{@docRoot}/serialized-form.html#java.util.concurrent.atomic.DoubleAccumulator.SerializationProxy">
      * SerializationProxy</a>
      * representing the state of this instance.
      *
--- a/src/java.base/share/classes/java/util/concurrent/atomic/DoubleAdder.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/atomic/DoubleAdder.java	Mon Dec 03 10:08:18 2018 +0100
@@ -239,7 +239,7 @@
 
     /**
      * Returns a
-     * <a href="../../../../serialized-form.html#java.util.concurrent.atomic.DoubleAdder.SerializationProxy">
+     * <a href="{@docRoot}/serialized-form.html#java.util.concurrent.atomic.DoubleAdder.SerializationProxy">
      * SerializationProxy</a>
      * representing the state of this instance.
      *
--- a/src/java.base/share/classes/java/util/concurrent/atomic/LongAccumulator.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/atomic/LongAccumulator.java	Mon Dec 03 10:08:18 2018 +0100
@@ -271,7 +271,7 @@
 
     /**
      * Returns a
-     * <a href="../../../../serialized-form.html#java.util.concurrent.atomic.LongAccumulator.SerializationProxy">
+     * <a href="{@docRoot}/serialized-form.html#java.util.concurrent.atomic.LongAccumulator.SerializationProxy">
      * SerializationProxy</a>
      * representing the state of this instance.
      *
--- a/src/java.base/share/classes/java/util/concurrent/atomic/LongAdder.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/atomic/LongAdder.java	Mon Dec 03 10:08:18 2018 +0100
@@ -241,7 +241,7 @@
 
     /**
      * Returns a
-     * <a href="../../../../serialized-form.html#java.util.concurrent.atomic.LongAdder.SerializationProxy">
+     * <a href="{@docRoot}/serialized-form.html#java.util.concurrent.atomic.LongAdder.SerializationProxy">
      * SerializationProxy</a>
      * representing the state of this instance.
      *
--- a/src/java.base/share/classes/java/util/concurrent/locks/LockSupport.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/locks/LockSupport.java	Mon Dec 03 10:08:18 2018 +0100
@@ -199,10 +199,11 @@
      * Disables the current thread for thread scheduling purposes, for up to
      * the specified waiting time, unless the permit is available.
      *
-     * <p>If the permit is available then it is consumed and the call
-     * returns immediately; otherwise the current thread becomes disabled
-     * for thread scheduling purposes and lies dormant until one of four
-     * things happens:
+     * <p>If the specified waiting time is zero or negative, the
+     * method does nothing. Otherwise, if the permit is available then
+     * it is consumed and the call returns immediately; otherwise the
+     * current thread becomes disabled for thread scheduling purposes
+     * and lies dormant until one of four things happens:
      *
      * <ul>
      * <li>Some other thread invokes {@link #unpark unpark} with the
@@ -327,10 +328,11 @@
      * Disables the current thread for thread scheduling purposes, for up to
      * the specified waiting time, unless the permit is available.
      *
-     * <p>If the permit is available then it is consumed and the call
-     * returns immediately; otherwise the current thread becomes disabled
-     * for thread scheduling purposes and lies dormant until one of four
-     * things happens:
+     * <p>If the specified waiting time is zero or negative, the
+     * method does nothing. Otherwise, if the permit is available then
+     * it is consumed and the call returns immediately; otherwise the
+     * current thread becomes disabled for thread scheduling purposes
+     * and lies dormant until one of four things happens:
      *
      * <ul>
      * <li>Some other thread invokes {@link #unpark unpark} with the
--- a/src/java.base/share/classes/java/util/concurrent/locks/StampedLock.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/locks/StampedLock.java	Mon Dec 03 10:08:18 2018 +0100
@@ -65,22 +65,23 @@
  *   and timed versions of {@code tryReadLock} are also provided.
  *
  *  <li><b>Optimistic Reading.</b> Method {@link #tryOptimisticRead}
- *   returns a non-zero stamp only if the lock is not currently held
- *   in write mode. Method {@link #validate} returns true if the lock
- *   has not been acquired in write mode since obtaining a given
- *   stamp.  This mode can be thought of as an extremely weak version
- *   of a read-lock, that can be broken by a writer at any time.  The
- *   use of optimistic mode for short read-only code segments often
- *   reduces contention and improves throughput.  However, its use is
- *   inherently fragile.  Optimistic read sections should only read
- *   fields and hold them in local variables for later use after
- *   validation. Fields read while in optimistic mode may be wildly
- *   inconsistent, so usage applies only when you are familiar enough
- *   with data representations to check consistency and/or repeatedly
- *   invoke method {@code validate()}.  For example, such steps are
- *   typically required when first reading an object or array
- *   reference, and then accessing one of its fields, elements or
- *   methods.
+ *   returns a non-zero stamp only if the lock is not currently held in
+ *   write mode.  Method {@link #validate} returns true if the lock has not
+ *   been acquired in write mode since obtaining a given stamp, in which
+ *   case all actions prior to the most recent write lock release
+ *   happen-before actions following the call to {@code tryOptimisticRead}.
+ *   This mode can be thought of as an extremely weak version of a
+ *   read-lock, that can be broken by a writer at any time.  The use of
+ *   optimistic read mode for short read-only code segments often reduces
+ *   contention and improves throughput.  However, its use is inherently
+ *   fragile.  Optimistic read sections should only read fields and hold
+ *   them in local variables for later use after validation. Fields read
+ *   while in optimistic read mode may be wildly inconsistent, so usage
+ *   applies only when you are familiar enough with data representations to
+ *   check consistency and/or repeatedly invoke method {@code validate()}.
+ *   For example, such steps are typically required when first reading an
+ *   object or array reference, and then accessing one of its fields,
+ *   elements or methods.
  *
  * </ul>
  *
@@ -88,8 +89,8 @@
  * conversions across the three modes. For example, method {@link
  * #tryConvertToWriteLock} attempts to "upgrade" a mode, returning
  * a valid write stamp if (1) already in writing mode (2) in reading
- * mode and there are no other readers or (3) in optimistic mode and
- * the lock is available. The forms of these methods are designed to
+ * mode and there are no other readers or (3) in optimistic read mode
+ * and the lock is available. The forms of these methods are designed to
  * help reduce some of the code bloat that otherwise occurs in
  * retry-based designs.
  *
@@ -129,6 +130,19 @@
  * #asReadWriteLock()} in applications requiring only the associated
  * set of functionality.
  *
+ * <p><b>Memory Synchronization.</b> Methods with the effect of
+ * successfully locking in any mode have the same memory
+ * synchronization effects as a <em>Lock</em> action described in
+ * <a href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html#jls-17.4">
+ * Chapter 17 of <cite>The Java&trade; Language Specification</cite></a>.
+ * Methods successfully unlocking in write mode have the same memory
+ * synchronization effects as an <em>Unlock</em> action.  In optimistic
+ * read usages, actions prior to the most recent write mode unlock action
+ * are guaranteed to happen-before those following a tryOptimisticRead
+ * only if a later validate returns true; otherwise there is no guarantee
+ * that the reads between tryOptimisticRead and validate obtain a
+ * consistent snapshot.
+ *
  * <p><b>Sample Usage.</b> The following illustrates some usage idioms
  * in a class that maintains simple two-dimensional points. The sample
  * code illustrates some try/catch conventions even though they are
--- a/src/java.base/share/classes/java/util/spi/TimeZoneNameProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/java/util/spi/TimeZoneNameProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, 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
@@ -52,7 +52,7 @@
      * presentation to the user in the specified locale. The given time
      * zone ID is "GMT" or one of the names defined using "Zone" entries
      * in the "tz database", a public domain time zone database at
-     * <a href="ftp://elsie.nci.nih.gov/pub/">ftp://elsie.nci.nih.gov/pub/</a>.
+     * <a href="https://www.iana.org/time-zones">https://www.iana.org/time-zones</a>.
      * The data of this database is contained in a file whose name starts with
      * "tzdata", and the specification of the data format is part of the zic.8
      * man page, which is contained in a file whose name starts with "tzcode".
--- a/src/java.base/share/classes/javax/net/ssl/SSLContext.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/javax/net/ssl/SSLContext.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, 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,18 +38,16 @@
  * secure random bytes.
  *
  * <p> Every implementation of the Java platform is required to support the
- * following standard {@code SSLContext} protocols:
+ * following standard {@code SSLContext} protocol:
  * <ul>
- * <li>{@code TLSv1}</li>
- * <li>{@code TLSv1.1}</li>
  * <li>{@code TLSv1.2}</li>
  * </ul>
- * These protocols are described in the <a href=
+ * This protocol is described in the <a href=
  * "{@docRoot}/../specs/security/standard-names.html#sslcontext-algorithms">
  * SSLContext section</a> of the
  * Java Security Standard Algorithm Names Specification.
  * Consult the release documentation for your implementation to see if any
- * other algorithms are supported.
+ * other protocols are supported.
  *
  * @since 1.4
  */
--- a/src/java.base/share/classes/javax/net/ssl/SSLSessionContext.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/javax/net/ssl/SSLSessionContext.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, 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
@@ -87,10 +87,17 @@
      * A check for sessions exceeding the timeout is made immediately whenever
      * the timeout limit is changed for this <code>SSLSessionContext</code>.
      *
+     * @apiNote Note that the JDK Implementation uses default values for both
+     *          the session cache size and timeout.  See
+     *          {@code getSessionCacheSize} and {@code getSessionTimeout} for
+     *          more information.  Applications should consider their
+     *          performance requirements and override the defaults if necessary.
+     *
      * @param seconds the new session timeout limit in seconds; zero means
-     *          there is no limit.
+     *        there is no limit.
      *
-     * @exception IllegalArgumentException if the timeout specified is {@code < 0}.
+     * @throws IllegalArgumentException if the timeout specified is {@code < 0}.
+     *
      * @see #getSessionTimeout
      */
     public void setSessionTimeout(int seconds)
@@ -109,33 +116,50 @@
      * whenever the timeout limit is changed for this
      * <code>SSLSessionContext</code>.
      *
+     * @implNote The JDK implementation returns the session timeout as set by
+     *           the {@code setSessionTimeout} method, or if not set, a default
+     *           value of 86400 seconds (24 hours).
+     *
      * @return the session timeout limit in seconds; zero means there is no
-     * limit.
+     *         limit.
+     *
      * @see #setSessionTimeout
      */
     public int getSessionTimeout();
 
     /**
-     * Sets the size of the cache used for storing
-     * <code>SSLSession</code> objects grouped under this
-     * <code>SSLSessionContext</code>.
+     * Sets the size of the cache used for storing <code>SSLSession</code>
+     * objects grouped under this <code>SSLSessionContext</code>.
+     *
+     * @apiNote Note that the JDK Implementation uses default values for both
+     *          the session cache size and timeout.  See
+     *          {@code getSessionCacheSize} and {@code getSessionTimeout} for
+     *          more information.  Applications should consider their
+     *          performance requirements and override the defaults if necessary.
      *
      * @param size the new session cache size limit; zero means there is no
-     * limit.
-     * @exception IllegalArgumentException if the specified size is {@code < 0}.
+     *        limit.
+     *
+     * @throws IllegalArgumentException if the specified size is {@code < 0}.
+     *
      * @see #getSessionCacheSize
      */
     public void setSessionCacheSize(int size)
                  throws IllegalArgumentException;
 
     /**
-     * Returns the size of the cache used for storing
-     * <code>SSLSession</code> objects grouped under this
-     * <code>SSLSessionContext</code>.
+     * Returns the size of the cache used for storing <code>SSLSession</code>
+     * objects grouped under this <code>SSLSessionContext</code>.
+     *
+     * @implNote The JDK implementation returns the cache size as set by
+     *           the {@code setSessionCacheSize} method, or if not set, the
+     *           value of the {@systemProperty javax.net.ssl.sessionCacheSize}
+     *           system property.  If neither is set, it returns a default
+     *           value of 20480.
      *
      * @return size of the session cache; zero means there is no size limit.
+     *
      * @see #setSessionCacheSize
      */
     public int getSessionCacheSize();
-
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/classes/jdk/internal/util/SystemProps.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,296 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package jdk.internal.util;
+
+
+import java.lang.annotation.Native;
+import java.util.Properties;
+
+/**
+ * System Property initialization for internal use only
+ * Retrieves the platform, JVM, and command line properties,
+ * applies initial defaults and returns the Properties instance
+ * that becomes the System.getProperties instance.
+ */
+public final class SystemProps {
+
+    // no instances
+    private SystemProps() {}
+
+    /**
+     * Create and initialize the system properties from the native properties
+     * and command line properties.
+     * Note:  Build-defined properties such as versions and vendor information
+     * are initialized by VersionProps.java-template.
+     *
+     * @return a Properties instance initialized with all of the properties
+     */
+    public static Properties initProperties() {
+        // Initially, cmdProperties only includes -D and props from the VM
+        Raw raw = new Raw();
+        Properties props = raw.cmdProperties();
+
+        String javaHome = props.getProperty("java.home");
+        assert javaHome != null : "java.home not set";
+
+        putIfAbsent(props, "user.home", raw.propDefault(Raw._user_home_NDX));
+        putIfAbsent(props, "user.dir", raw.propDefault(Raw._user_dir_NDX));
+        putIfAbsent(props, "user.name", raw.propDefault(Raw._user_name_NDX));
+
+        // Platform defined encoding cannot be overridden on the command line
+        put(props, "sun.jnu.encoding", raw.propDefault(Raw._sun_jnu_encoding_NDX));
+
+        // Add properties that have not been overridden on the cmdline
+        putIfAbsent(props, "file.encoding",
+                ((raw.propDefault(Raw._file_encoding_NDX) == null)
+                        ? raw.propDefault(Raw._sun_jnu_encoding_NDX)
+                        : raw.propDefault(Raw._file_encoding_NDX)));
+
+        // Use platform values if not overridden by a commandline -Dkey=value
+        // In no particular order
+        putIfAbsent(props, "os.name", raw.propDefault(Raw._os_name_NDX));
+        putIfAbsent(props, "os.arch", raw.propDefault(Raw._os_arch_NDX));
+        putIfAbsent(props, "os.version", raw.propDefault(Raw._os_version_NDX));
+        putIfAbsent(props, "line.separator", raw.propDefault(Raw._line_separator_NDX));
+        putIfAbsent(props, "file.separator", raw.propDefault(Raw._file_separator_NDX));
+        putIfAbsent(props, "path.separator", raw.propDefault(Raw._path_separator_NDX));
+        putIfAbsent(props, "java.io.tmpdir", raw.propDefault(Raw._java_io_tmpdir_NDX));
+        putIfAbsent(props, "http.proxyHost", raw.propDefault(Raw._http_proxyHost_NDX));
+        putIfAbsent(props, "http.proxyPort", raw.propDefault(Raw._http_proxyPort_NDX));
+        putIfAbsent(props, "https.proxyHost", raw.propDefault(Raw._https_proxyHost_NDX));
+        putIfAbsent(props, "https.proxyPort", raw.propDefault(Raw._https_proxyPort_NDX));
+        putIfAbsent(props, "ftp.proxyHost", raw.propDefault(Raw._ftp_proxyHost_NDX));
+        putIfAbsent(props, "ftp.proxyPort", raw.propDefault(Raw._ftp_proxyPort_NDX));
+        putIfAbsent(props, "socksProxyHost", raw.propDefault(Raw._socksProxyHost_NDX));
+        putIfAbsent(props, "socksProxyPort", raw.propDefault(Raw._socksProxyPort_NDX));
+        putIfAbsent(props, "http.nonProxyHosts", raw.propDefault(Raw._http_nonProxyHosts_NDX));
+        putIfAbsent(props, "ftp.nonProxyHosts", raw.propDefault(Raw._ftp_nonProxyHosts_NDX));
+        putIfAbsent(props, "socksNonProxyHosts", raw.propDefault(Raw._socksNonProxyHosts_NDX));
+        putIfAbsent(props, "awt.toolkit", raw.propDefault(Raw._awt_toolkit_NDX));
+        putIfAbsent(props, "java.awt.headless", raw.propDefault(Raw._java_awt_headless_NDX));
+        putIfAbsent(props, "java.awt.printerjob", raw.propDefault(Raw._java_awt_printerjob_NDX));
+        putIfAbsent(props, "java.awt.graphicsenv", raw.propDefault(Raw._java_awt_graphicsenv_NDX));
+        putIfAbsent(props, "sun.desktop", raw.propDefault(Raw._sun_desktop_NDX));
+        putIfAbsent(props, "sun.java2d.fontpath", raw.propDefault(Raw._sun_java2d_fontpath_NDX));
+        putIfAbsent(props, "sun.arch.abi", raw.propDefault(Raw._sun_arch_abi_NDX));
+        putIfAbsent(props, "sun.arch.data.model", raw.propDefault(Raw._sun_arch_data_model_NDX));
+        putIfAbsent(props, "sun.os.patch.level", raw.propDefault(Raw._sun_os_patch_level_NDX));
+        putIfAbsent(props, "sun.stdout.encoding", raw.propDefault(Raw._sun_stdout_encoding_NDX));
+        putIfAbsent(props, "sun.stderr.encoding", raw.propDefault(Raw._sun_stderr_encoding_NDX));
+        putIfAbsent(props, "sun.io.unicode.encoding", raw.propDefault(Raw._sun_io_unicode_encoding_NDX));
+        putIfAbsent(props, "sun.cpu.isalist", raw.propDefault(Raw._sun_cpu_isalist_NDX));
+        putIfAbsent(props, "sun.cpu.endian", raw.propDefault(Raw._sun_cpu_endian_NDX));
+
+        /* Construct i18n related options */
+        fillI18nProps(props,"user.language", raw.propDefault(Raw._display_language_NDX),
+                raw.propDefault(Raw._format_language_NDX));
+        fillI18nProps(props,"user.script",   raw.propDefault(Raw._display_script_NDX),
+                raw.propDefault(Raw._format_script_NDX));
+        fillI18nProps(props,"user.country",  raw.propDefault(Raw._display_country_NDX),
+                raw.propDefault(Raw._format_country_NDX));
+        fillI18nProps(props,"user.variant",  raw.propDefault(Raw._display_variant_NDX),
+                raw.propDefault(Raw._format_variant_NDX));
+
+        return props;
+    }
+
+    /**
+     * Puts the property if it is non-null
+     * @param props the Properties
+     * @param key the key
+     * @param value the value
+     */
+    private static void put(Properties props, String key, String value) {
+        if (value != null) {
+            props.put(key, value);
+        }
+    }
+
+    /**
+     * Puts the property if it is non-null and is not already in the Properties.
+     * @param props the Properties
+     * @param key the key
+     * @param value the value
+     */
+    private static void putIfAbsent(Properties props, String key, String value) {
+        if (value != null) {
+            props.putIfAbsent(key, value);
+        }
+    }
+
+    /**
+     * For internationalization options, compute the values for
+     * display and format properties
+     * MUST NOT override command line defined values.
+     *
+     * @param base the base property name
+     * @param display the display value for the base
+     * @param format the format value for the base
+     */
+    private static void fillI18nProps(Properties cmdProps, String base, String display,
+                                      String format) {
+        // Do not override command line setting
+        String baseValue = cmdProps.getProperty(base);
+        if (baseValue == null) {
+            // Not overridden on the command line; define the properties if there are platform defined values
+            baseValue = display;
+        }
+        if (baseValue != null) {
+            cmdProps.put(base, baseValue);
+        }
+
+        /* user.xxx.display property */
+        String disp = base + ".display";
+        String dispValue = cmdProps.getProperty(disp);
+        if (dispValue == null && display != null && !display.equals(baseValue)) {
+            // Create the property only if different from the base property
+            cmdProps.put(disp, display);
+        }
+
+        /* user.xxx.format property */
+        String fmt = base + ".format";
+        String fmtValue = cmdProps.getProperty(fmt);
+        if (fmtValue == null && format != null && !format.equals(baseValue)) {
+            // Create the property only if different than the base property
+            cmdProps.put(fmt, format);
+        }
+    }
+
+    /**
+     * Read the raw properties from native System.c.
+     */
+    public static class Raw {
+        // Array indices written by native vmProperties()
+        // The order is arbitrary (but alphabetic for convenience)
+        @Native private static final int _awt_toolkit_NDX = 0;
+        @Native private static final int _display_country_NDX = 1 + _awt_toolkit_NDX;
+        @Native private static final int _display_language_NDX = 1 + _display_country_NDX;
+        @Native private static final int _display_script_NDX = 1 + _display_language_NDX;
+        @Native private static final int _display_variant_NDX = 1 + _display_script_NDX;
+        @Native private static final int _file_encoding_NDX = 1 + _display_variant_NDX;
+        @Native private static final int _file_separator_NDX = 1 + _file_encoding_NDX;
+        @Native private static final int _format_country_NDX = 1 + _file_separator_NDX;
+        @Native private static final int _format_language_NDX = 1 + _format_country_NDX;
+        @Native private static final int _format_script_NDX = 1 + _format_language_NDX;
+        @Native private static final int _format_variant_NDX = 1 + _format_script_NDX;
+        @Native private static final int _ftp_nonProxyHosts_NDX = 1 + _format_variant_NDX;
+        @Native private static final int _ftp_proxyHost_NDX = 1 + _ftp_nonProxyHosts_NDX;
+        @Native private static final int _ftp_proxyPort_NDX = 1 + _ftp_proxyHost_NDX;
+        @Native private static final int _http_nonProxyHosts_NDX = 1 + _ftp_proxyPort_NDX;
+        @Native private static final int _http_proxyHost_NDX = 1 + _http_nonProxyHosts_NDX;
+        @Native private static final int _http_proxyPort_NDX = 1 + _http_proxyHost_NDX;
+        @Native private static final int _https_proxyHost_NDX = 1 + _http_proxyPort_NDX;
+        @Native private static final int _https_proxyPort_NDX = 1 + _https_proxyHost_NDX;
+        @Native private static final int _java_awt_graphicsenv_NDX = 1 + _https_proxyPort_NDX;
+        @Native private static final int _java_awt_printerjob_NDX = 1 + _java_awt_graphicsenv_NDX;
+        @Native private static final int _java_awt_headless_NDX = 1 + _java_awt_printerjob_NDX;
+        @Native private static final int _java_io_tmpdir_NDX = 1 + _java_awt_headless_NDX;
+        @Native private static final int _line_separator_NDX = 1 + _java_io_tmpdir_NDX;
+        @Native private static final int _os_arch_NDX = 1 + _line_separator_NDX;
+        @Native private static final int _os_name_NDX = 1 + _os_arch_NDX;
+        @Native private static final int _os_version_NDX = 1 + _os_name_NDX;
+        @Native private static final int _path_separator_NDX = 1 + _os_version_NDX;
+        @Native private static final int _socksNonProxyHosts_NDX = 1 + _path_separator_NDX;
+        @Native private static final int _socksProxyHost_NDX = 1 + _socksNonProxyHosts_NDX;
+        @Native private static final int _socksProxyPort_NDX = 1 + _socksProxyHost_NDX;
+        @Native private static final int _sun_arch_abi_NDX = 1 + _socksProxyPort_NDX;
+        @Native private static final int _sun_arch_data_model_NDX = 1 + _sun_arch_abi_NDX;
+        @Native private static final int _sun_cpu_endian_NDX = 1 + _sun_arch_data_model_NDX;
+        @Native private static final int _sun_cpu_isalist_NDX = 1 + _sun_cpu_endian_NDX;
+        @Native private static final int _sun_desktop_NDX = 1 + _sun_cpu_isalist_NDX;
+        @Native private static final int _sun_io_unicode_encoding_NDX = 1 + _sun_desktop_NDX;
+        @Native private static final int _sun_java2d_fontpath_NDX = 1 + _sun_io_unicode_encoding_NDX;
+        @Native private static final int _sun_jnu_encoding_NDX = 1 + _sun_java2d_fontpath_NDX;
+        @Native private static final int _sun_os_patch_level_NDX = 1 + _sun_jnu_encoding_NDX;
+        @Native private static final int _sun_stderr_encoding_NDX = 1 + _sun_os_patch_level_NDX;
+        @Native private static final int _sun_stdout_encoding_NDX = 1 + _sun_stderr_encoding_NDX;
+        @Native private static final int _user_dir_NDX = 1 + _sun_stdout_encoding_NDX;
+        @Native private static final int _user_home_NDX = 1 + _user_dir_NDX;
+        @Native private static final int _user_name_NDX = 1 + _user_home_NDX;
+        @Native private static final int FIXED_LENGTH = 1 + _user_name_NDX;
+
+        // Array of Strings returned from the VM and Command line properties
+        // The array is not used after initialization is complete.
+        private final String[] platformProps;
+
+        private Raw() {
+            platformProps = platformProperties();
+        }
+
+        /**
+         * Return the value for a well known default from native.
+         * @param index the index of the known property
+         * @return the value
+         */
+        String propDefault(int index) {
+            return platformProps[index];
+        }
+
+        /**
+         * Return a Properties instance of the command line and VM options
+         * defined by name and value.
+         * The Properties instance is sized to include the fixed properties.
+         *
+         * @return return a Properties instance of the command line and VM options
+         */
+        private Properties cmdProperties() {
+            String[] vmProps = vmProperties();
+            int nProps = vmProps.length / 2;
+            var cmdProps = new Properties(nProps + Raw.FIXED_LENGTH);
+            for (int i = 0; i < nProps; i++) {
+                String k = vmProps[i * 2];
+                if (k != null) {
+                    String v = vmProps[i * 2 + 1];
+                    cmdProps.setProperty(k, v != null ? v : "");
+                } else {
+                    // no more key/value pairs
+                    break;
+                }
+            }
+            return cmdProps;
+        }
+
+        /**
+         * Returns the available VM and Command Line Properties.
+         * The VM supplies some key/value pairs and processes the command line
+         * to extract key/value pairs from the {@code "-Dkey=value"} arguments.
+         *
+         * @return an array of strings, with alternating key and value strings.
+         *      Either keys or values may be null, the array may not be full.
+         *      The first null key indicates there are no more key, value pairs.
+         */
+        private static native String[] vmProperties();
+
+        /**
+         * Returns the platform specific property values identified
+         * by {@code "_xxx_NDX"} indexes.
+         * The indexes are strictly private, to be shared only with the native code.
+         *
+         * @return a array of strings, the properties are indexed by the {@code _xxx_NDX}
+         * indexes.  The values are Strings and may be null.
+         */
+        private static native String[] platformProperties();
+    }
+}
--- a/src/java.base/share/classes/sun/net/spi/DefaultProxySelector.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/sun/net/spi/DefaultProxySelector.java	Mon Dec 03 10:08:18 2018 +0100
@@ -53,7 +53,6 @@
  *
  * Supports http/https/ftp.proxyHost, http/https/ftp.proxyPort,
  * proxyHost, proxyPort, and http/https/ftp.nonProxyHost, and socks.
- * NOTE: need to do gopher as well
  */
 public class DefaultProxySelector extends ProxySelector {
 
@@ -82,7 +81,6 @@
         {"http", "http.proxy", "proxy", "socksProxy"},
         {"https", "https.proxy", "proxy", "socksProxy"},
         {"ftp", "ftp.proxy", "ftpProxy", "proxy", "socksProxy"},
-        {"gopher", "gopherProxy", "socksProxy"},
         {"socket", "socksProxy"}
     };
 
@@ -350,8 +348,6 @@
             return 80;
         } else if ("socket".equalsIgnoreCase(protocol)) {
             return 1080;
-        } else if ("gopher".equalsIgnoreCase(protocol)) {
-            return 80;
         } else {
             return -1;
         }
--- a/src/java.base/share/classes/sun/security/ssl/SSLCipher.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/sun/security/ssl/SSLCipher.java	Mon Dec 03 10:08:18 2018 +0100
@@ -530,22 +530,22 @@
             ProtocolVersion protocolVersion,
             SecretKey key, IvParameterSpec iv,
             SecureRandom random) throws GeneralSecurityException {
-        if (readCipherGenerators.length == 0) {
+        if (writeCipherGenerators.length == 0) {
             return null;
         }
 
-        WriteCipherGenerator rcg = null;
+        WriteCipherGenerator wcg = null;
         for (Map.Entry<WriteCipherGenerator,
                 ProtocolVersion[]> me : writeCipherGenerators) {
             for (ProtocolVersion pv : me.getValue()) {
                 if (protocolVersion == pv) {
-                    rcg = me.getKey();
+                    wcg = me.getKey();
                 }
             }
         }
 
-        if (rcg != null) {
-            return rcg.createCipher(this, authenticator,
+        if (wcg != null) {
+            return wcg.createCipher(this, authenticator,
                     protocolVersion, transformation, key, iv, random);
         }
         return null;
--- a/src/java.base/share/classes/sun/security/ssl/SSLSessionContextImpl.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/sun/security/ssl/SSLSessionContextImpl.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,11 +32,13 @@
 import javax.net.ssl.SSLSession;
 import javax.net.ssl.SSLSessionContext;
 
-import sun.security.action.GetPropertyAction;
+import sun.security.action.GetIntegerAction;
 import sun.security.util.Cache;
 
 
 final class SSLSessionContextImpl implements SSLSessionContext {
+    private final static int DEFAULT_MAX_CACHE_SIZE = 20480;
+
     private final Cache<SessionId, SSLSessionImpl> sessionCache;
                                         // session cache, session id as key
     private final Cache<String, SSLSessionImpl> sessionHostPortCache;
@@ -196,16 +198,29 @@
     }
 
     private static int getDefaultCacheLimit() {
-        int defaultCacheLimit = 0;
         try {
-            String s = GetPropertyAction
-                    .privilegedGetProperty("javax.net.ssl.sessionCacheSize");
-            defaultCacheLimit = (s != null) ? Integer.parseInt(s) : 0;
+            int defaultCacheLimit = GetIntegerAction.privilegedGetProperty(
+                    "javax.net.ssl.sessionCacheSize", DEFAULT_MAX_CACHE_SIZE);
+
+            if (defaultCacheLimit >= 0) {
+                return defaultCacheLimit;
+            } else if (SSLLogger.isOn && SSLLogger.isOn("ssl")) {
+                SSLLogger.warning(
+                    "invalid System Property javax.net.ssl.sessionCacheSize, " +
+                    "use the default session cache size (" +
+                    DEFAULT_MAX_CACHE_SIZE + ") instead");
+            }
         } catch (Exception e) {
-            // swallow the exception
+            // unlikely, log it for safe
+            if (SSLLogger.isOn && SSLLogger.isOn("ssl")) {
+                SSLLogger.warning(
+                    "the System Property javax.net.ssl.sessionCacheSize is " +
+                    "not available, use the default value (" +
+                    DEFAULT_MAX_CACHE_SIZE + ") instead");
+            }
         }
 
-        return (defaultCacheLimit > 0) ? defaultCacheLimit : 0;
+        return DEFAULT_MAX_CACHE_SIZE;
     }
 
     private boolean isTimedout(SSLSession sess) {
--- a/src/java.base/share/classes/sun/security/tools/keytool/Main.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/classes/sun/security/tools/keytool/Main.java	Mon Dec 03 10:08:18 2018 +0100
@@ -51,6 +51,8 @@
 import java.security.cert.URICertStoreParameters;
 
 
+import java.security.interfaces.ECKey;
+import java.security.spec.ECParameterSpec;
 import java.text.Collator;
 import java.text.MessageFormat;
 import java.util.*;
@@ -70,6 +72,7 @@
 
 import sun.security.util.ECKeySizeParameterSpec;
 import sun.security.util.KeyUtil;
+import sun.security.util.NamedCurve;
 import sun.security.util.ObjectIdentifier;
 import sun.security.pkcs10.PKCS10;
 import sun.security.pkcs10.PKCS10Attribute;
@@ -1328,28 +1331,39 @@
             if (f.exists()) {
                 // Probe for real type. A JKS can be loaded as PKCS12 because
                 // DualFormat support, vice versa.
-                keyStore = KeyStore.getInstance(f, pass);
-                String realType = keyStore.getType();
-                if (realType.equalsIgnoreCase("JKS")
-                        || realType.equalsIgnoreCase("JCEKS")) {
-                    boolean allCerts = true;
-                    for (String a : Collections.list(keyStore.aliases())) {
-                        if (!keyStore.entryInstanceOf(
-                                a, TrustedCertificateEntry.class)) {
-                            allCerts = false;
-                            break;
+                String realType = storetype;
+                try {
+                    keyStore = KeyStore.getInstance(f, pass);
+                    realType = keyStore.getType();
+                    if (realType.equalsIgnoreCase("JKS")
+                            || realType.equalsIgnoreCase("JCEKS")) {
+                        boolean allCerts = true;
+                        for (String a : Collections.list(keyStore.aliases())) {
+                            if (!keyStore.entryInstanceOf(
+                                    a, TrustedCertificateEntry.class)) {
+                                allCerts = false;
+                                break;
+                            }
+                        }
+                        // Don't warn for "cacerts" style keystore.
+                        if (!allCerts) {
+                            weakWarnings.add(String.format(
+                                    rb.getString("jks.storetype.warning"),
+                                    realType, ksfname));
                         }
                     }
-                    // Don't warn for "cacerts" style keystore.
-                    if (!allCerts) {
-                        weakWarnings.add(String.format(
-                                rb.getString("jks.storetype.warning"),
-                                realType, ksfname));
-                    }
+                } catch (KeyStoreException e) {
+                    // Probing not supported, therefore cannot be JKS or JCEKS.
+                    // Skip the legacy type warning at all.
                 }
                 if (inplaceImport) {
-                    String realSourceStoreType = KeyStore.getInstance(
-                            new File(inplaceBackupName), srcstorePass).getType();
+                    String realSourceStoreType = srcstoretype;
+                    try {
+                        realSourceStoreType = KeyStore.getInstance(
+                                new File(inplaceBackupName), srcstorePass).getType();
+                    } catch (KeyStoreException e) {
+                        // Probing not supported. Assuming srcstoretype.
+                    }
                     String format =
                             realType.equalsIgnoreCase(realSourceStoreType) ?
                             rb.getString("backup.keystore.warning") :
@@ -1871,11 +1885,12 @@
 
         MessageFormat form = new MessageFormat(rb.getString
             ("Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for"));
-        Object[] source = {keysize,
-                            privKey.getAlgorithm(),
-                            chain[0].getSigAlgName(),
-                            validity,
-                            x500Name};
+        Object[] source = {
+                groupName == null ? keysize : KeyUtil.getKeySize(privKey),
+                fullDisplayAlgName(privKey),
+                chain[0].getSigAlgName(),
+                validity,
+                x500Name};
         System.err.println(form.format(source));
 
         if (keyPass == null) {
@@ -3255,19 +3270,28 @@
         }
     }
 
-    private String withWeak(PublicKey key) {
+    private String fullDisplayAlgName(Key key) {
+        String result = key.getAlgorithm();
+        if (key instanceof ECKey) {
+            ECParameterSpec paramSpec = ((ECKey) key).getParams();
+            if (paramSpec instanceof NamedCurve) {
+                result += " (" + paramSpec.toString().split(" ")[0] + ")";
+            }
+        }
+        return result;
+    }
+
+    private String withWeak(Key key) {
+        int kLen = KeyUtil.getKeySize(key);
+        String displayAlg = fullDisplayAlgName(key);
         if (DISABLED_CHECK.permits(SIG_PRIMITIVE_SET, key)) {
-            int kLen = KeyUtil.getKeySize(key);
             if (kLen >= 0) {
-                return String.format(rb.getString("key.bit"),
-                        kLen, key.getAlgorithm());
+                return String.format(rb.getString("key.bit"), kLen, displayAlg);
             } else {
-                return String.format(
-                        rb.getString("unknown.size.1"), key.getAlgorithm());
+                return String.format(rb.getString("unknown.size.1"), displayAlg);
             }
         } else {
-            return String.format(rb.getString("key.bit.weak"),
-                    KeyUtil.getKeySize(key), key.getAlgorithm());
+            return String.format(rb.getString("key.bit.weak"), kLen, displayAlg);
         }
     }
 
--- a/src/java.base/share/conf/net.properties	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/conf/net.properties	Mon Dec 03 10:08:18 2018 +0100
@@ -14,7 +14,7 @@
 # Note that the system properties that do explicitly set proxies
 # (like http.proxyHost) do take precedence over the system settings
 # even if java.net.useSystemProxies is set to true.
- 
+
 java.net.useSystemProxies=false
 
 #------------------------------------------------------------------------
@@ -51,13 +51,6 @@
 # ftp.proxyPort=80
 ftp.nonProxyHosts=localhost|127.*|[::1]
 #
-# Gopher Proxy settings. proxyHost is the name of the proxy server
-# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default
-# value is 80)
-#
-# gopher.proxyHost=
-# gopher.proxyPort=80
-#
 # Socks proxy settings. socksProxyHost is the name of the proxy server
 # (e.g. socks.domain.com), socksProxyPort is the port number to use
 # (default value is 1080)
@@ -66,8 +59,8 @@
 # socksProxyPort=1080
 #
 # HTTP Keep Alive settings. remainingData is the maximum amount of data
-# in kilobytes that will be cleaned off the underlying socket so that it 
-# can be reused (default value is 512K), queuedConnections is the maximum 
+# in kilobytes that will be cleaned off the underlying socket so that it
+# can be reused (default value is 512K), queuedConnections is the maximum
 # number of Keep Alive connections to be on the queue for clean up (default
 # value is 10).
 # http.KeepAlive.remainingData=512
@@ -105,10 +98,10 @@
 # By default, the following request headers are not allowed to be set by user code
 # in HttpRequests: "connection", "content-length", "expect", "host" and "upgrade".
 # The 'jdk.httpclient.allowRestrictedHeaders' property allows one or more of these
-# headers to be specified as a comma separated list to override the default restriction. 
-# The names are case-insensitive and white-space is ignored (removed before processing 
-# the list). Note, this capability is mostly intended for testing and isn't expected 
-# to be used in real deployments. Protocol errors or other undefined behavior is likely 
+# headers to be specified as a comma separated list to override the default restriction.
+# The names are case-insensitive and white-space is ignored (removed before processing
+# the list). Note, this capability is mostly intended for testing and isn't expected
+# to be used in real deployments. Protocol errors or other undefined behavior is likely
 # to occur when using them. The property is not set by default.
 # Note also, that there may be other headers that are restricted from being set
 # depending on the context. This includes the "Authorization" header when the
--- a/src/java.base/share/native/libjava/System.c	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/native/libjava/System.c	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1994, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2018, 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,6 +31,7 @@
 #include "java_props.h"
 
 #include "java_lang_System.h"
+#include "jdk_internal_util_SystemProps_Raw.h"
 
 #define OBJ "Ljava/lang/Object;"
 
@@ -56,255 +57,154 @@
     return JVM_IHashCode(env, x);
 }
 
-#define PUTPROP(props, key, val)                                     \
-    if (1) {                                                         \
-        jstring jkey, jval;                                          \
-        jobject r;                                                   \
-        jkey = (*env)->NewStringUTF(env, key);                       \
-        if (jkey == NULL) return NULL;                               \
-        jval = (*env)->NewStringUTF(env, val);                       \
-        if (jval == NULL) return NULL;                               \
-        r = (*env)->CallObjectMethod(env, props, putID, jkey, jval); \
-        if ((*env)->ExceptionOccurred(env)) return NULL;             \
-        (*env)->DeleteLocalRef(env, jkey);                           \
-        (*env)->DeleteLocalRef(env, jval);                           \
-        (*env)->DeleteLocalRef(env, r);                              \
-    } else ((void) 0)
-
-/*  "key" is a char type string with only ASCII character in it.
-    "val" is a nchar (typedefed in java_props.h) type string  */
-
-#define PUTPROP_ForPlatformNString(props, key, val)                  \
-    if (1) {                                                         \
-        jstring jkey, jval;                                          \
-        jobject r;                                                   \
-        jkey = (*env)->NewStringUTF(env, key);                       \
-        if (jkey == NULL) return NULL;                               \
-        jval = GetStringPlatform(env, val);                          \
-        if (jval == NULL) return NULL;                               \
-        r = (*env)->CallObjectMethod(env, props, putID, jkey, jval); \
-        if ((*env)->ExceptionOccurred(env)) return NULL;             \
-        (*env)->DeleteLocalRef(env, jkey);                           \
-        (*env)->DeleteLocalRef(env, jval);                           \
-        (*env)->DeleteLocalRef(env, r);                              \
-    } else ((void) 0)
-#define REMOVEPROP(props, key)                                    \
-    if (1) {                                                      \
-        jstring jkey;                                             \
-        jobject r;                                                \
-        jkey = JNU_NewStringPlatform(env, key);                   \
-        if (jkey == NULL) return NULL;                            \
-        r = (*env)->CallObjectMethod(env, props, removeID, jkey); \
-        if ((*env)->ExceptionOccurred(env)) return NULL;          \
-        (*env)->DeleteLocalRef(env, jkey);                        \
-        (*env)->DeleteLocalRef(env, r);                           \
-    } else ((void) 0)
-#define GETPROP(props, key, jret)                                     \
-    if (1) {                                                          \
-        jstring jkey = JNU_NewStringPlatform(env, key);               \
-        if (jkey == NULL) return NULL;                                \
-        jret = (*env)->CallObjectMethod(env, props, getPropID, jkey); \
-        if ((*env)->ExceptionOccurred(env)) return NULL;              \
-        (*env)->DeleteLocalRef(env, jkey);                            \
-    } else ((void) 0)
+/* VENDOR, VENDOR_URL, VENDOR_URL_BUG are set in VersionProps.java.template. */
 
-/* Third party may overwrite these values. */
-#ifndef VENDOR
-#define VENDOR "Oracle Corporation"
-#endif
-#ifndef VENDOR_URL
-#define VENDOR_URL "http://java.oracle.com/"
-#endif
-#ifndef VENDOR_URL_BUG
-#define VENDOR_URL_BUG "http://bugreport.java.com/bugreport/"
-#endif
-
-#ifdef JAVA_SPECIFICATION_VENDOR /* Third party may NOT overwrite this. */
-  #error "ERROR: No override of JAVA_SPECIFICATION_VENDOR is allowed"
-#else
-  #define JAVA_SPECIFICATION_VENDOR "Oracle Corporation"
-#endif
-
-jobject fillI18nProps(JNIEnv *env, jobject props, char *baseKey,
-                      char *platformDispVal, char *platformFmtVal,
-                      jmethodID putID, jmethodID getPropID) {
-    jstring jVMBaseVal = NULL;
-
-    GETPROP(props, baseKey, jVMBaseVal);
-    if (jVMBaseVal) {
-        // user specified the base property.  there's nothing to do here.
-        (*env)->DeleteLocalRef(env, jVMBaseVal);
-    } else {
-        char buf[64];
-        jstring jVMVal = NULL;
-        const char *baseVal = "";
-
-        /* user.xxx base property */
-        if (platformDispVal) {
-            PUTPROP(props, baseKey, platformDispVal);
-            baseVal = platformDispVal;
-        }
-
-        /* user.xxx.display property */
-        jio_snprintf(buf, sizeof(buf), "%s.display", baseKey);
-        GETPROP(props, buf, jVMVal);
-        if (jVMVal == NULL) {
-            if (platformDispVal && (strcmp(baseVal, platformDispVal) != 0)) {
-                PUTPROP(props, buf, platformDispVal);
-            }
-        } else {
-            (*env)->DeleteLocalRef(env, jVMVal);
-        }
-
-        /* user.xxx.format property */
-        jio_snprintf(buf, sizeof(buf), "%s.format", baseKey);
-        GETPROP(props, buf, jVMVal);
-        if (jVMVal == NULL) {
-            if (platformFmtVal && (strcmp(baseVal, platformFmtVal) != 0)) {
-                PUTPROP(props, buf, platformFmtVal);
-            }
-        } else {
-            (*env)->DeleteLocalRef(env, jVMVal);
-        }
+/*
+ * Store the UTF-8 string encoding of the value in the array
+ * at the index if the value is non-null.  Store nothing if the value is null.
+ * On any error, return from Java_jdk_internal_util_SystemProps_00024Raw_platformProperties.
+ */
+#define PUTPROP(array, prop_index, val)                    \
+    if (val != NULL) {                                     \
+        jstring jval = (*env)->NewStringUTF(env, val);     \
+        if (jval == NULL)                                  \
+            return NULL;                                   \
+        (*env)->SetObjectArrayElement(env, array, jdk_internal_util_SystemProps_Raw_##prop_index, jval); \
+        if ((*env)->ExceptionOccurred(env))                \
+            return NULL;                                   \
+        (*env)->DeleteLocalRef(env, jval);                 \
     }
 
-    return NULL;
-}
+/*
+ * Store the Platform string encoding of the value in the array
+ * at the index if the value is non-null.  Store nothing if the value is null.
+ * On any error, return from Java_jdk_internal_util_SystemProps_00024Raw_platformProperties.
+ */
+#define PUTPROP_PlatformString(array, prop_index, val)     \
+    if (val != NULL) {                                     \
+        jstring jval = GetStringPlatform(env, val);        \
+        if (jval == NULL)                                  \
+            return NULL;                                   \
+        (*env)->SetObjectArrayElement(env, array, jdk_internal_util_SystemProps_Raw_##prop_index, jval); \
+        if ((*env)->ExceptionOccurred(env))                \
+            return NULL;                                   \
+        (*env)->DeleteLocalRef(env, jval);                 \
+    }
 
-JNIEXPORT jobject JNICALL
-Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props)
+/*
+ * Gather the system properties and return as a String[].
+ * The first FIXED_LENGTH entries are the platform defined property values, no names.
+ * The remaining array indices are alternating key/value pairs
+ * supplied by the VM including those defined on the command line
+ * using -Dkey=value that may override the platform defined value.
+ * The caller is responsible for replacing platform provided values as needed.
+ *
+ * Class:     jdk_internal_util_SystemProps_Raw
+ * Method:    platformProperties
+ * Signature: ()[Ljava/lang/String;
+ */
+JNIEXPORT jobjectArray JNICALL
+Java_jdk_internal_util_SystemProps_00024Raw_platformProperties(JNIEnv *env, jclass cla)
 {
-    char buf[128];
     java_props_t *sprops;
-    jmethodID putID, removeID, getPropID;
-    jobject ret = NULL;
-    jstring jVMVal = NULL;
+    jobject propArray = NULL;
+    jclass classString;
+    int nstrings = jdk_internal_util_SystemProps_Raw_FIXED_LENGTH;
 
-    if ((*env)->EnsureLocalCapacity(env, 50) < 0) {
-        return NULL;
-    }
+    // Get the platform specific values
     sprops = GetJavaProperties(env);
     CHECK_NULL_RETURN(sprops, NULL);
 
-    putID = (*env)->GetMethodID(env,
-                                (*env)->GetObjectClass(env, props),
-                                "put",
-            "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
-    CHECK_NULL_RETURN(putID, NULL);
-
-    removeID = (*env)->GetMethodID(env,
-                                   (*env)->GetObjectClass(env, props),
-                                   "remove",
-            "(Ljava/lang/Object;)Ljava/lang/Object;");
-    CHECK_NULL_RETURN(removeID, NULL);
-
-    getPropID = (*env)->GetMethodID(env,
-                                    (*env)->GetObjectClass(env, props),
-                                    "getProperty",
-            "(Ljava/lang/String;)Ljava/lang/String;");
-    CHECK_NULL_RETURN(getPropID, NULL);
+    /*
+     * !!! DO NOT call PUTPROP_PlatformString (NewStringPlatform) before this line !!!
+     */
+    InitializeEncoding(env, sprops->sun_jnu_encoding);
 
-    PUTPROP(props, "java.specification.version",
-            VERSION_SPECIFICATION);
-    PUTPROP(props, "java.specification.name",
-            "Java Platform API Specification");
-    PUTPROP(props, "java.specification.vendor",
-            JAVA_SPECIFICATION_VENDOR);
-
-    PUTPROP(props, "java.vendor", VENDOR);
-    PUTPROP(props, "java.vendor.url", VENDOR_URL);
-    PUTPROP(props, "java.vendor.url.bug", VENDOR_URL_BUG);
+    // Ensure capacity for the array and for a string for each fixed length element
+    if ((*env)->EnsureLocalCapacity(env, nstrings + 2) < 0) {
+        return NULL;
+    }
 
-    jio_snprintf(buf, sizeof(buf), "%d.%d", JVM_CLASSFILE_MAJOR_VERSION,
-                                            JVM_CLASSFILE_MINOR_VERSION);
-    PUTPROP(props, "java.class.version", buf);
+    // Allocate an array of String for all the well known props
+    classString = JNU_ClassString(env);
+    CHECK_NULL_RETURN(classString, NULL);
 
-    if (sprops->awt_toolkit) {
-        PUTPROP(props, "awt.toolkit", sprops->awt_toolkit);
-    }
-#ifdef MACOSX
-    if (sprops->awt_headless) {
-        PUTPROP(props, "java.awt.headless", sprops->awt_headless);
-    }
-#endif
+    propArray = (*env)->NewObjectArray(env, nstrings, classString, NULL);
+    CHECK_NULL_RETURN(propArray, NULL);
 
     /* os properties */
-    PUTPROP(props, "os.name", sprops->os_name);
-    PUTPROP(props, "os.version", sprops->os_version);
-    PUTPROP(props, "os.arch", sprops->os_arch);
+    PUTPROP(propArray, _os_name_NDX, sprops->os_name);
+    PUTPROP(propArray, _os_version_NDX, sprops->os_version);
+    PUTPROP(propArray, _os_arch_NDX, sprops->os_arch);
 
 #ifdef JDK_ARCH_ABI_PROP_NAME
-    PUTPROP(props, "sun.arch.abi", sprops->sun_arch_abi);
+    PUTPROP(propArray, _sun_arch_abi_NDX, sprops->sun_arch_abi);
 #endif
 
     /* file system properties */
-    PUTPROP(props, "file.separator", sprops->file_separator);
-    PUTPROP(props, "path.separator", sprops->path_separator);
-    PUTPROP(props, "line.separator", sprops->line_separator);
+    PUTPROP(propArray, _file_separator_NDX, sprops->file_separator);
+    PUTPROP(propArray, _path_separator_NDX, sprops->path_separator);
+    PUTPROP(propArray, _line_separator_NDX, sprops->line_separator);
+
+    PUTPROP(propArray, _file_encoding_NDX, sprops->encoding);
+    PUTPROP(propArray, _sun_jnu_encoding_NDX, sprops->sun_jnu_encoding);
 
     /*
      * file encoding for stdout and stderr
      */
-    if (sprops->sun_stdout_encoding != NULL) {
-        PUTPROP(props, "sun.stdout.encoding", sprops->sun_stdout_encoding);
-    }
-    if (sprops->sun_stderr_encoding != NULL) {
-        PUTPROP(props, "sun.stderr.encoding", sprops->sun_stderr_encoding);
-    }
+    PUTPROP(propArray, _sun_stdout_encoding_NDX, sprops->sun_stdout_encoding);
+    PUTPROP(propArray, _sun_stderr_encoding_NDX, sprops->sun_stderr_encoding);
 
     /* unicode_encoding specifies the default endianness */
-    PUTPROP(props, "sun.io.unicode.encoding", sprops->unicode_encoding);
-    if (sprops->cpu_isalist  != NULL) {
-        // leave undefined if none
-        PUTPROP(props, "sun.cpu.isalist", sprops->cpu_isalist);
-    }
-    PUTPROP(props, "sun.cpu.endian",  sprops->cpu_endian);
-
+    PUTPROP(propArray, _sun_io_unicode_encoding_NDX, sprops->unicode_encoding);
+    PUTPROP(propArray, _sun_cpu_endian_NDX, sprops->cpu_endian);
+    PUTPROP(propArray, _sun_cpu_isalist_NDX, sprops->cpu_isalist);
 
 #ifdef MACOSX
+    PUTPROP(propArray, _java_awt_headless_NDX, sprops->awt_headless);
+
     /* Proxy setting properties */
     if (sprops->httpProxyEnabled) {
-        PUTPROP(props, "http.proxyHost", sprops->httpHost);
-        PUTPROP(props, "http.proxyPort", sprops->httpPort);
+        PUTPROP(propArray, _http_proxyHost_NDX, sprops->httpHost);
+        PUTPROP(propArray, _http_proxyPort_NDX, sprops->httpPort);
     }
 
     if (sprops->httpsProxyEnabled) {
-        PUTPROP(props, "https.proxyHost", sprops->httpsHost);
-        PUTPROP(props, "https.proxyPort", sprops->httpsPort);
+        PUTPROP(propArray, _https_proxyHost_NDX, sprops->httpsHost);
+        PUTPROP(propArray, _https_proxyPort_NDX, sprops->httpsPort);
     }
 
     if (sprops->ftpProxyEnabled) {
-        PUTPROP(props, "ftp.proxyHost", sprops->ftpHost);
-        PUTPROP(props, "ftp.proxyPort", sprops->ftpPort);
+        PUTPROP(propArray, _ftp_proxyHost_NDX, sprops->ftpHost);
+        PUTPROP(propArray, _ftp_proxyPort_NDX, sprops->ftpPort);
     }
 
     if (sprops->socksProxyEnabled) {
-        PUTPROP(props, "socksProxyHost", sprops->socksHost);
-        PUTPROP(props, "socksProxyPort", sprops->socksPort);
-    }
-
-    if (sprops->gopherProxyEnabled) {
-        // The gopher client is different in that it expects an 'is this set?' flag that the others don't.
-        PUTPROP(props, "gopherProxySet", "true");
-        PUTPROP(props, "gopherProxyHost", sprops->gopherHost);
-        PUTPROP(props, "gopherProxyPort", sprops->gopherPort);
-    } else {
-        PUTPROP(props, "gopherProxySet", "false");
+        PUTPROP(propArray, _socksProxyHost_NDX, sprops->socksHost);
+        PUTPROP(propArray, _socksProxyPort_NDX, sprops->socksPort);
     }
 
     // Mac OS X only has a single proxy exception list which applies
     // to all protocols
     if (sprops->exceptionList) {
-        PUTPROP(props, "http.nonProxyHosts", sprops->exceptionList);
-        PUTPROP(props, "ftp.nonProxyHosts", sprops->exceptionList);
-        PUTPROP(props, "socksNonProxyHosts", sprops->exceptionList);
+        PUTPROP(propArray, _http_nonProxyHosts_NDX, sprops->exceptionList);
+        PUTPROP(propArray, _ftp_nonProxyHosts_NDX, sprops->exceptionList);
+        PUTPROP(propArray, _socksNonProxyHosts_NDX, sprops->exceptionList);
     }
 #endif
 
-    /* !!! DO NOT call PUTPROP_ForPlatformNString before this line !!!
-     * !!! The platform native encoding for strings has not been set up yet !!!
-     */
-    InitializeEncoding(env, sprops->sun_jnu_encoding);
+    /* data model */
+    if (sizeof(sprops) == 4) {
+        sprops->data_model = "32";
+    } else if (sizeof(sprops) == 8) {
+        sprops->data_model = "64";
+    } else {
+        sprops->data_model = "unknown";
+    }
+    PUTPROP(propArray, _sun_arch_data_model_NDX, sprops->data_model);
+
+    /* patch level */
+    PUTPROP(propArray, _sun_os_patch_level_NDX, sprops->patch_level);
 
     /* Printing properties */
     /* Note: java.awt.printerjob is an implementation private property which
@@ -317,24 +217,9 @@
      * find and load classes that are part of the JRE.
      * This property may be removed if that mechanism is redesigned
      */
-    PUTPROP(props, "java.awt.printerjob", sprops->printerJob);
+    PUTPROP(propArray, _java_awt_printerjob_NDX, sprops->printerJob);
 
-    /* data model */
-    if (sizeof(sprops) == 4) {
-        sprops->data_model = "32";
-    } else if (sizeof(sprops) == 8) {
-        sprops->data_model = "64";
-    } else {
-        sprops->data_model = "unknown";
-    }
-    PUTPROP(props, "sun.arch.data.model",  \
-                    sprops->data_model);
-
-    /* patch level */
-    if (sprops->patch_level != NULL) {
-        PUTPROP(props, "sun.os.patch.level",  \
-                    sprops->patch_level);
-    }
+    PUTPROP(propArray, _awt_toolkit_NDX, sprops->awt_toolkit);
 
     /* Java2D properties */
     /* Note: java.awt.graphicsenv is an implementation private property which
@@ -347,55 +232,53 @@
      * find and load classes that are part of the JRE.
      * This property may be removed if that mechanism is redesigned
      */
-    PUTPROP(props, "java.awt.graphicsenv", sprops->graphics_env);
-    if (sprops->font_dir != NULL) {
-        PUTPROP_ForPlatformNString(props,
-                                   "sun.java2d.fontpath", sprops->font_dir);
-    }
+    PUTPROP(propArray, _java_awt_graphicsenv_NDX, sprops->graphics_env);
+    PUTPROP_PlatformString(propArray, _sun_java2d_fontpath_NDX, sprops->font_dir);
 
-    PUTPROP_ForPlatformNString(props, "java.io.tmpdir", sprops->tmp_dir);
+    /*
+     * The sun.desktop property is currently only set for Gnome and Windows desktops.
+     */
+    PUTPROP(propArray, _sun_desktop_NDX, sprops->desktop);
+
+    PUTPROP_PlatformString(propArray, _java_io_tmpdir_NDX, sprops->tmp_dir);
 
-    PUTPROP_ForPlatformNString(props, "user.name", sprops->user_name);
-    PUTPROP_ForPlatformNString(props, "user.home", sprops->user_home);
-    PUTPROP_ForPlatformNString(props, "user.dir", sprops->user_dir);
+    PUTPROP_PlatformString(propArray, _user_name_NDX, sprops->user_name);
+    PUTPROP_PlatformString(propArray, _user_home_NDX, sprops->user_home);
+    PUTPROP_PlatformString(propArray, _user_dir_NDX, sprops->user_dir);
 
-    /* This is a sun. property as it is currently only set for Gnome and
-     * Windows desktops.
-     */
-    if (sprops->desktop != NULL) {
-        PUTPROP(props, "sun.desktop", sprops->desktop);
-    }
-
-    ret = JVM_InitProperties(env, props);
+   /*
+    * Set i18n related property fields from platform.
+    */
+   PUTPROP(propArray, _display_language_NDX, sprops->display_language);
+   PUTPROP(propArray, _display_script_NDX, sprops->display_script);
+   PUTPROP(propArray, _display_country_NDX, sprops->display_country);
+   PUTPROP(propArray, _display_variant_NDX, sprops->display_variant);
 
-    /* reconstruct i18n related properties */
-    fillI18nProps(env, props, "user.language", sprops->display_language,
-        sprops->format_language, putID, getPropID);
-    fillI18nProps(env, props, "user.script",
-        sprops->display_script, sprops->format_script, putID, getPropID);
-    fillI18nProps(env, props, "user.country",
-        sprops->display_country, sprops->format_country, putID, getPropID);
-    fillI18nProps(env, props, "user.variant",
-        sprops->display_variant, sprops->format_variant, putID, getPropID);
-    GETPROP(props, "file.encoding", jVMVal);
-    if (jVMVal == NULL) {
-#ifdef MACOSX
-        /*
-         * Since sun_jnu_encoding is now hard-coded to UTF-8 on Mac, we don't
-         * want to use it to overwrite file.encoding
-         */
-        PUTPROP(props, "file.encoding", sprops->encoding);
-#else
-        PUTPROP(props, "file.encoding", sprops->sun_jnu_encoding);
-#endif
-    } else {
-        (*env)->DeleteLocalRef(env, jVMVal);
-    }
+   PUTPROP(propArray, _format_language_NDX, sprops->format_language);
+   PUTPROP(propArray, _format_script_NDX, sprops->format_script);
+   PUTPROP(propArray, _format_country_NDX, sprops->format_country);
+   PUTPROP(propArray, _format_variant_NDX, sprops->format_variant);
+
+   return propArray;
+}
 
-    // Platform defined encoding properties override any on the command line
-    PUTPROP(props, "sun.jnu.encoding", sprops->sun_jnu_encoding);
-
-    return ret;
+/*
+ * Gather the VM and command line properties and return as a String[].
+ * The array indices are alternating key/value pairs
+ * supplied by the VM including those defined on the command line
+ * using -Dkey=value that may override the platform defined value.
+ *
+ * Note: The platform encoding must have been set.
+ *
+ * Class:     jdk_internal_util_SystemProps_Raw
+ * Method:    vmProperties
+ * Signature: ()[Ljava/lang/String;
+ */
+JNIEXPORT jobjectArray JNICALL
+Java_jdk_internal_util_SystemProps_00024Raw_vmProperties(JNIEnv *env, jclass cla)
+{
+    jobjectArray cmdProps = JVM_GetProperties(env);
+    return cmdProps;
 }
 
 /*
--- a/src/java.base/share/native/libjava/java_props.h	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/share/native/libjava/java_props.h	Mon Dec 03 10:08:18 2018 +0100
@@ -106,10 +106,6 @@
     char *socksHost;
     char *socksPort;
 
-    int gopherProxyEnabled;
-    char *gopherHost;
-    char *gopherPort;
-
     char *exceptionList;
 
     char *awt_headless;  /* java.awt.headless setting, if NULL (default) will not be set */
--- a/src/java.base/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, 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,19 +25,29 @@
 
 package sun.nio.fs;
 
-import java.nio.file.spi.FileSystemProvider;
+import java.nio.file.FileSystem;
 
 /**
  * Creates this platform's default FileSystemProvider.
  */
 
 public class DefaultFileSystemProvider {
+    private static final SolarisFileSystemProvider INSTANCE
+        = new SolarisFileSystemProvider();
+
     private DefaultFileSystemProvider() { }
 
     /**
-     * Returns the default FileSystemProvider.
+     * Returns the platform's default file system provider.
      */
-    public static FileSystemProvider create() {
-        return new SolarisFileSystemProvider();
+    public static SolarisFileSystemProvider instance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Returns the platform's default file system.
+     */
+    public static FileSystem theFileSystem() {
+        return INSTANCE.theFileSystem();
     }
 }
--- a/src/java.base/solaris/classes/sun/nio/fs/SolarisFileSystemProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/solaris/classes/sun/nio/fs/SolarisFileSystemProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -36,7 +36,7 @@
  * Solaris implementation of FileSystemProvider
  */
 
-public class SolarisFileSystemProvider extends UnixFileSystemProvider {
+class SolarisFileSystemProvider extends UnixFileSystemProvider {
     public SolarisFileSystemProvider() {
         super();
     }
--- a/src/java.base/unix/classes/sun/nio/fs/UnixFileSystemProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/unix/classes/sun/nio/fs/UnixFileSystemProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, 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
@@ -56,6 +56,10 @@
         theFileSystem = newFileSystem(userDir);
     }
 
+    UnixFileSystem theFileSystem() {
+        return theFileSystem;
+    }
+
     /**
      * Constructs a new file system using the given default directory.
      */
--- a/src/java.base/unix/native/libnet/DefaultProxySelector.c	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/unix/native/libnet/DefaultProxySelector.c	Mon Dec 03 10:08:18 2018 +0100
@@ -59,8 +59,6 @@
  * - /system/proxy/ftp_port                     int
  * - /system/proxy/secure_port                  int
  * - /system/proxy/no_proxy_for                 list
- * - /system/proxy/gopher_host                  string
- * - /system/proxy/gopher_port                  int
  *
  * The following keys are not used in the new gnome 3
  * - /system/http_proxy/use_http_proxy
@@ -224,18 +222,6 @@
             }
 
             /**
-             * GOPHER:
-             * /system/proxy/mode (string) [ "manual" means use proxy settings ]
-             * /system/proxy/gopher_host (string)
-             * /system/proxy/gopher_port (integer)
-             */
-            if (strcasecmp(cproto, "gopher") == 0) {
-                phost = (*my_get_string_func)(gconf_client, "/system/proxy/gopher_host", NULL);
-                pport = (*my_get_int_func)(gconf_client, "/system/proxy/gopher_port", NULL);
-                use_proxy = (phost != NULL && pport != 0);
-            }
-
-            /**
              * SOCKS:
              * /system/proxy/mode (string) [ "manual" means use proxy settings ]
              * /system/proxy/socks_host (string)
--- a/src/java.base/unix/native/libnet/net_util_md.c	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/unix/native/libnet/net_util_md.c	Mon Dec 03 10:08:18 2018 +0100
@@ -305,12 +305,12 @@
     }
 
     /*
-     * If fd 0 is a socket it means we've been launched from inetd or
+     * If fd 0 is a socket it means we may have been launched from inetd or
      * xinetd. If it's a socket then check the family - if it's an
      * IPv4 socket then we need to disable IPv6.
      */
     if (getsockname(0, &sa.sa, &sa_len) == 0) {
-        if (sa.sa.sa_family != AF_INET6) {
+        if (sa.sa.sa_family == AF_INET) {
             close(fd);
             return JNI_FALSE;
         }
--- a/src/java.base/windows/classes/sun/nio/fs/DefaultFileSystemProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/windows/classes/sun/nio/fs/DefaultFileSystemProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,14 +25,28 @@
 
 package sun.nio.fs;
 
-import java.nio.file.spi.FileSystemProvider;
+import java.nio.file.FileSystem;
 
 /**
- * Creates default provider on Windows
+ * Creates this platform's default FileSystemProvider.
  */
 public class DefaultFileSystemProvider {
+    private static final WindowsFileSystemProvider INSTANCE
+        = new WindowsFileSystemProvider();
+
     private DefaultFileSystemProvider() { }
-    public static FileSystemProvider create() {
-        return new WindowsFileSystemProvider();
+
+    /**
+     * Returns the platform's default file system provider.
+     */
+    public static WindowsFileSystemProvider instance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Returns the platform's default file system.
+     */
+    public static FileSystem theFileSystem() {
+        return INSTANCE.theFileSystem();
     }
 }
--- a/src/java.base/windows/classes/sun/nio/fs/WindowsFileSystemProvider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/windows/classes/sun/nio/fs/WindowsFileSystemProvider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, 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
@@ -42,7 +42,7 @@
 import static sun.nio.fs.WindowsSecurity.*;
 import static sun.nio.fs.WindowsConstants.*;
 
-public class WindowsFileSystemProvider
+class WindowsFileSystemProvider
     extends AbstractFileSystemProvider
 {
     private static final Unsafe unsafe = Unsafe.getUnsafe();
@@ -53,6 +53,10 @@
         theFileSystem = new WindowsFileSystem(this, StaticProperty.userDir());
     }
 
+    WindowsFileSystem theFileSystem() {
+        return theFileSystem;
+    }
+
     @Override
     public String getScheme() {
         return "file";
--- a/src/java.base/windows/native/libnet/DefaultProxySelector.c	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.base/windows/native/libnet/DefaultProxySelector.c	Mon Dec 03 10:08:18 2018 +0100
@@ -296,8 +296,7 @@
 
         /* Set the default port value & proxy type from protocol. */
         if ((wcscmp(lpProto, L"http") == 0) ||
-            (wcscmp(lpProto, L"ftp") == 0) ||
-            (wcscmp(lpProto, L"gopher") == 0))
+            (wcscmp(lpProto, L"ftp") == 0))
             defport = 80;
         if (wcscmp(lpProto, L"https") == 0)
             defport = 443;
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, 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
@@ -121,7 +121,8 @@
     public static final String WINDOW_FADE_IN = "apple.awt._windowFadeIn";
     public static final String WINDOW_FADE_OUT = "apple.awt._windowFadeOut";
     public static final String WINDOW_FULLSCREENABLE = "apple.awt.fullscreenable";
-
+    public static final String WINDOW_FULL_CONTENT = "apple.awt.fullWindowContent";
+    public static final String WINDOW_TRANSPARENT_TITLE_BAR = "apple.awt.transparentTitleBar";
 
     // Yeah, I know. But it's easier to deal with ints from JNI
     static final int MODELESS = 0;
@@ -149,7 +150,10 @@
     static final int IS_MODAL = 1 << 26;
     static final int IS_POPUP = 1 << 27;
 
-    static final int _STYLE_PROP_BITMASK = DECORATED | TEXTURED | UNIFIED | UTILITY | HUD | SHEET | CLOSEABLE | MINIMIZABLE | RESIZABLE;
+    static final int FULL_WINDOW_CONTENT = 1 << 14;
+
+    static final int _STYLE_PROP_BITMASK = DECORATED | TEXTURED | UNIFIED | UTILITY | HUD | SHEET | CLOSEABLE
+                                             | MINIMIZABLE | RESIZABLE | FULL_WINDOW_CONTENT;
 
     // corresponds to method-based properties
     static final int HAS_SHADOW = 1 << 10;
@@ -160,8 +164,11 @@
     static final int DRAGGABLE_BACKGROUND = 1 << 19;
     static final int DOCUMENT_MODIFIED = 1 << 21;
     static final int FULLSCREENABLE = 1 << 23;
+    static final int TRANSPARENT_TITLE_BAR = 1 << 18;
 
-    static final int _METHOD_PROP_BITMASK = RESIZABLE | HAS_SHADOW | ZOOMABLE | ALWAYS_ON_TOP | HIDES_ON_DEACTIVATE | DRAGGABLE_BACKGROUND | DOCUMENT_MODIFIED | FULLSCREENABLE;
+    static final int _METHOD_PROP_BITMASK = RESIZABLE | HAS_SHADOW | ZOOMABLE | ALWAYS_ON_TOP | HIDES_ON_DEACTIVATE
+                                              | DRAGGABLE_BACKGROUND | DOCUMENT_MODIFIED | FULLSCREENABLE
+                                              | TRANSPARENT_TITLE_BAR;
 
     // corresponds to callback-based properties
     static final int SHOULD_BECOME_KEY = 1 << 12;
@@ -230,7 +237,19 @@
 
             final String filename = ((java.io.File)value).getAbsolutePath();
             c.execute(ptr->nativeSetNSWindowRepresentedFilename(ptr, filename));
-        }}
+        }},
+        new Property<CPlatformWindow>(WINDOW_FULL_CONTENT) {
+            public void applyProperty(final CPlatformWindow c, final Object value) {
+                boolean isFullWindowContent = Boolean.parseBoolean(value.toString());
+                c.setStyleBits(FULL_WINDOW_CONTENT, isFullWindowContent);
+            }
+        },
+        new Property<CPlatformWindow>(WINDOW_TRANSPARENT_TITLE_BAR) {
+            public void applyProperty(final CPlatformWindow c, final Object value) {
+                boolean isTransparentTitleBar = Boolean.parseBoolean(value.toString());
+                c.setStyleBits(TRANSPARENT_TITLE_BAR, isTransparentTitleBar);
+            }
+        }
     }) {
         @SuppressWarnings("deprecation")
         public CPlatformWindow convertJComponentToTarget(final JRootPane p) {
@@ -276,6 +295,8 @@
     private Rectangle normalBounds = null; // not-null only for undecorated maximized windows
     private CPlatformResponder responder;
     private long lastBecomeMainTime; // this is necessary to preserve right siblings order
+    private boolean maximizedBothState = false;
+    private boolean frameResizibilityChanged = false;
 
     public CPlatformWindow() {
         super(0, true);
@@ -378,7 +399,7 @@
 
         // Either java.awt.Frame or java.awt.Dialog can be resizable, however java.awt.Window is never resizable
         {
-            final boolean resizable = isFrame ? ((Frame)target).isResizable() : (isDialog ? ((Dialog)target).isResizable() : false);
+            final boolean resizable = isTargetResizable();
             styleBits = SET(styleBits, RESIZABLE, resizable);
             if (!resizable) {
                 styleBits = SET(styleBits, ZOOMABLE, false);
@@ -468,6 +489,16 @@
             if (prop != null) {
                 styleBits = SET(styleBits, DRAGGABLE_BACKGROUND, Boolean.parseBoolean(prop.toString()));
             }
+
+            prop = rootpane.getClientProperty(WINDOW_FULL_CONTENT);
+            if (prop != null) {
+                styleBits = SET(styleBits, FULL_WINDOW_CONTENT, Boolean.parseBoolean(prop.toString()));
+            }
+
+            prop = rootpane.getClientProperty(WINDOW_TRANSPARENT_TITLE_BAR);
+            if (prop != null) {
+                styleBits = SET(styleBits, TRANSPARENT_TITLE_BAR, Boolean.parseBoolean(prop.toString()));
+            }
         }
 
         if (isDialog) {
@@ -580,6 +611,8 @@
             setBounds(maximizedBounds.x, maximizedBounds.y,
                     maximizedBounds.width, maximizedBounds.height);
         }
+        setFrameResizibilityChanged(true);
+        updateResizableAndMaximizeState(true);
     }
 
     private void unmaximize() {
@@ -676,11 +709,9 @@
         // Manage the extended state when showing
         if (visible) {
             /* Frame or Dialog should be set property WINDOW_FULLSCREENABLE to true if the
-            Frame or Dialog is resizable.
+            Frame resizable and Frame state is not MAXIMIZED_BOTH or Dialog is resizable.
             **/
-            final boolean resizable = (target instanceof Frame) ? ((Frame)target).isResizable() :
-            ((target instanceof Dialog) ? ((Dialog)target).isResizable() : false);
-            if (resizable) {
+            if (isTargetResizable()) {
                 setCanFullscreen(true);
             }
 
@@ -695,6 +726,12 @@
                         // Treat all state bit masks with ICONIFIED bit as ICONIFIED state.
                         frameState = Frame.ICONIFIED;
                     }
+
+                    if (isFrameResizibilityChanged()) {
+                        updateResizableAndMaximizeState(false);
+                        setFrameResizibilityChanged(false);
+                    }
+
                     switch (frameState) {
                         case Frame.ICONIFIED:
                             execute(CWrapper.NSWindow::miniaturize);
@@ -814,9 +851,10 @@
 
     @Override
     public void setResizable(final boolean resizable) {
-        setCanFullscreen(resizable);
-        setStyleBits(RESIZABLE, resizable);
-        setStyleBits(ZOOMABLE, resizable);
+        boolean windowResizable = resizable && !isMaximizedBoth();
+        setCanFullscreen(windowResizable);
+        setStyleBits(RESIZABLE, windowResizable);
+        setStyleBits(ZOOMABLE, windowResizable);
     }
 
     @Override
@@ -924,6 +962,12 @@
             // Treat all state bit masks with ICONIFIED bit as ICONIFIED state.
             windowState = Frame.ICONIFIED;
         }
+
+        if (isFrameResizibilityChanged()) {
+            updateResizableAndMaximizeState(false);
+            setFrameResizibilityChanged(false);
+        }
+
         switch (windowState) {
             case Frame.ICONIFIED:
                 if (prevWindowState == Frame.MAXIMIZED_BOTH) {
@@ -1127,6 +1171,21 @@
     }
 
     /*
+     * Resizibility of frame with state MAXIMIZED_BOTH is set to true to zoom
+     * the frame on double click on title bar and set to false later. This is
+     * required as frame won't zoom if resizibility of frame is false.
+     */
+    private void deliverDoubleClickOnTitlebar() {
+        if ((peer != null) && (target instanceof Frame)) {
+            if (isMaximizedBoth()) {
+                updateResizableAndMaximizeState(false);
+                execute(CWrapper.NSWindow::zoom);
+                updateResizableAndMaximizeState(true);
+            }
+        }
+    }
+
+    /*
      * Our focus model is synthetic and only non-simple window
      * may become natively focusable window.
      */
@@ -1301,6 +1360,32 @@
         return false;
     }
 
+    private boolean isTargetResizable() {
+        if (target instanceof Frame) {
+            return ((Frame)target).isResizable() && !isMaximizedBoth();
+        } else if (target instanceof Dialog) {
+            return ((Dialog)target).isResizable();
+        }
+        return false;
+    }
+
+    private void updateResizableAndMaximizeState(boolean maximizeState) {
+        maximizedBothState = maximizeState;
+        setResizable(!maximizeState);
+    }
+
+    private boolean isMaximizedBoth() {
+        return maximizedBothState;
+    }
+
+    private void setFrameResizibilityChanged(boolean resize) {
+        frameResizibilityChanged = resize;
+    }
+
+    private boolean isFrameResizibilityChanged() {
+        return frameResizibilityChanged;
+    }
+
     // ----------------------------------------------------------------------
     //                          NATIVE CALLBACKS
     // ----------------------------------------------------------------------
--- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m	Mon Dec 03 10:08:18 2018 +0100
@@ -34,6 +34,7 @@
 #import "OSVersion.h"
 #import "ThreadUtilities.h"
 
+#import <Carbon/Carbon.h>
 #import <JavaNativeFoundation/JavaNativeFoundation.h>
 
 @interface AWTView()
@@ -281,11 +282,31 @@
     // Allow TSM to look at the event and potentially send back NSTextInputClient messages.
     [self interpretKeyEvents:[NSArray arrayWithObject:event]];
 
-    if (fEnablePressAndHold && [event willBeHandledByComplexInputMethod] && fInputMethodLOCKABLE) {
+    if (fEnablePressAndHold && [event willBeHandledByComplexInputMethod] && 
+        fInputMethodLOCKABLE)
+    {
         fProcessingKeystroke = NO;
         if (!fInPressAndHold) {
             fInPressAndHold = YES;
             fPAHNeedsToSelect = YES;
+        } else {
+            // Abandon input to reset IM and unblock input after canceling 
+            // input accented symbols
+
+            switch([event keyCode]) {
+                case kVK_Escape:
+                case kVK_Delete:
+                case kVK_Return:
+                case kVK_ForwardDelete:
+                case kVK_PageUp:
+                case kVK_PageDown:
+                case kVK_DownArrow:
+                case kVK_UpArrow:
+                case kVK_Home:
+                case kVK_End:
+                   [self abandonInput];
+                   break;
+            }
         }
         return;
     }
@@ -978,6 +999,11 @@
         }
     }
     fPAHNeedsToSelect = NO;
+
+    // Abandon input to reset IM and unblock input after entering accented
+    // symbols
+
+    [self abandonInput];
 }
 
 - (void) doCommandBySelector:(SEL)aSelector
--- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m	Mon Dec 03 10:08:18 2018 +0100
@@ -203,9 +203,10 @@
     NSUInteger type = 0;
     if (IS(styleBits, DECORATED)) {
         type |= NSTitledWindowMask;
-        if (IS(styleBits, CLOSEABLE))   type |= NSClosableWindowMask;
-        if (IS(styleBits, MINIMIZABLE)) type |= NSMiniaturizableWindowMask;
-        if (IS(styleBits, RESIZABLE))   type |= NSResizableWindowMask;
+        if (IS(styleBits, CLOSEABLE))            type |= NSClosableWindowMask;
+        if (IS(styleBits, MINIMIZABLE))          type |= NSMiniaturizableWindowMask;
+        if (IS(styleBits, RESIZABLE))            type |= NSResizableWindowMask;
+        if (IS(styleBits, FULL_WINDOW_CONTENT))  type |= NSFullSizeContentViewWindowMask;
     } else {
         type |= NSBorderlessWindowMask;
     }
@@ -263,6 +264,10 @@
             [self.nsWindow setCollectionBehavior:NSWindowCollectionBehaviorDefault];
         }
     }
+
+    if (IS(mask, TRANSPARENT_TITLE_BAR) && [self.nsWindow respondsToSelector:@selector(setTitlebarAppearsTransparent:)]) {
+        [self.nsWindow setTitlebarAppearsTransparent:IS(bits, TRANSPARENT_TITLE_BAR)];
+    }
 }
 
 - (id) initWithPlatformWindow:(JNFWeakJObjectWrapper *)platformWindow
@@ -960,6 +965,11 @@
                     // Currently, no need to deliver the whole NSEvent.
                     static JNF_MEMBER_CACHE(jm_deliverNCMouseDown, jc_CPlatformWindow, "deliverNCMouseDown", "()V");
                     JNFCallVoidMethod(env, platformWindow, jm_deliverNCMouseDown);
+                    // Deliver double click on title bar
+                    if ([event clickCount] > 1) {
+                        static JNF_MEMBER_CACHE(jm_deliverDoubleClickOnTitlebar, jc_CPlatformWindow, "deliverDoubleClickOnTitlebar", "()V");
+                        JNFCallVoidMethod(env, platformWindow, jm_deliverDoubleClickOnTitlebar);
+                    }
                     (*env)->DeleteLocalRef(env, platformWindow);
                 }
             }
@@ -1068,14 +1078,34 @@
 JNF_COCOA_ENTER(env);
 
     NSWindow *nsWindow = OBJC(windowPtr);
+
     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 
         AWTWindow *window = (AWTWindow*)[nsWindow delegate];
 
         // scans the bit field, and only updates the values requested by the mask
-        // (this implicity handles the _CALLBACK_PROP_BITMASK case, since those are passive reads)
+        // (this implicitly handles the _CALLBACK_PROP_BITMASK case, since those are passive reads)
         jint newBits = window.styleBits & ~mask | bits & mask;
 
+        BOOL resized = NO;
+
+        // Check for a change to the full window content view option.
+        // The content view must be resized first, otherwise the window will be resized to fit the existing
+        // content view.
+        if (IS(mask, FULL_WINDOW_CONTENT)) {
+            if (IS(newBits, FULL_WINDOW_CONTENT) != IS(window.styleBits, FULL_WINDOW_CONTENT)) {
+                NSRect frame = [nsWindow frame];
+                NSUInteger styleMask = [AWTWindow styleMaskForStyleBits:newBits];
+                NSRect screenContentRect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask];
+                NSRect contentFrame = NSMakeRect(screenContentRect.origin.x - frame.origin.x,
+                    screenContentRect.origin.y - frame.origin.y,
+                    screenContentRect.size.width,
+                    screenContentRect.size.height);
+                nsWindow.contentView.frame = contentFrame;
+                resized = YES;
+            }
+        }
+
         // resets the NSWindow's style mask if the mask intersects any of those bits
         if (mask & MASK(_STYLE_PROP_BITMASK)) {
             [nsWindow setStyleMask:[AWTWindow styleMaskForStyleBits:newBits]];
@@ -1087,6 +1117,10 @@
         }
 
         window.styleBits = newBits;
+
+        if (resized) {
+            [window _deliverMoveResizeEvent];
+        }
     }];
 
 JNF_COCOA_EXIT(env);
--- a/src/java.desktop/share/classes/com/sun/imageio/plugins/png/PNGImageReader.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/com/sun/imageio/plugins/png/PNGImageReader.java	Mon Dec 03 10:08:18 2018 +0100
@@ -468,7 +468,7 @@
         String text;
         pos = stream.getStreamPosition();
         int textLength = (int)(chunkStart + chunkLength - pos);
-        if (textLength <= 0) {
+        if (textLength < 0) {
             throw new IIOException("iTXt chunk length is not proper");
         }
         byte[] b = new byte[textLength];
@@ -571,7 +571,7 @@
     private void parse_tEXt_chunk(int chunkLength) throws IOException {
         String keyword = readNullTerminatedString("ISO-8859-1", 80);
         int textLength = chunkLength - keyword.length() - 1;
-        if (textLength <= 0) {
+        if (textLength < 0) {
             throw new IIOException("tEXt chunk length is not proper");
         }
         metadata.tEXt_keyword.add(keyword);
@@ -669,7 +669,7 @@
     private void parse_zTXt_chunk(int chunkLength) throws IOException {
         String keyword = readNullTerminatedString("ISO-8859-1", 80);
         int textLength = chunkLength - keyword.length() - 2;
-        if (textLength <= 0) {
+        if (textLength < 0) {
             throw new IIOException("zTXt chunk length is not proper");
         }
         metadata.zTXt_keyword.add(keyword);
@@ -749,7 +749,8 @@
             loop: while (true) {
                 int chunkLength = stream.readInt();
                 int chunkType = stream.readInt();
-                int chunkCRC;
+                // Initialize chunkCRC, value assigned has no significance
+                int chunkCRC = -1;
 
                 // verify the chunk length
                 if (chunkLength < 0) {
@@ -757,10 +758,20 @@
                 };
 
                 try {
-                    stream.mark();
-                    stream.seek(stream.getStreamPosition() + chunkLength);
-                    chunkCRC = stream.readInt();
-                    stream.reset();
+                    /*
+                     * As per PNG specification all chunks should have
+                     * 4 byte CRC. But there are some images where
+                     * CRC is not present/corrupt for IEND chunk.
+                     * And these type of images are supported by other
+                     * decoders. So as soon as we hit chunk type
+                     * for IEND chunk stop reading metadata.
+                     */
+                    if (chunkType != IEND_TYPE) {
+                        stream.mark();
+                        stream.seek(stream.getStreamPosition() + chunkLength);
+                        chunkCRC = stream.readInt();
+                        stream.reset();
+                    }
                 } catch (IOException e) {
                     throw new IIOException("Invalid chunk length " + chunkLength);
                 }
@@ -1163,8 +1174,7 @@
         // same bit depth as the source data
         boolean adjustBitDepths = false;
         int[] outputSampleSize = imRas.getSampleModel().getSampleSize();
-        int numBands = outputSampleSize.length;
-        for (int b = 0; b < numBands; b++) {
+        for (int b = 0; b < inputBands; b++) {
             if (outputSampleSize[b] != bitDepth) {
                 adjustBitDepths = true;
                 break;
@@ -1177,8 +1187,8 @@
         if (adjustBitDepths) {
             int maxInSample = (1 << bitDepth) - 1;
             int halfMaxInSample = maxInSample/2;
-            scale = new int[numBands][];
-            for (int b = 0; b < numBands; b++) {
+            scale = new int[inputBands][];
+            for (int b = 0; b < inputBands; b++) {
                 int maxOutSample = (1 << outputSampleSize[b]) - 1;
                 scale[b] = new int[maxInSample + 1];
                 for (int s = 0; s <= maxInSample; s++) {
@@ -1304,7 +1314,7 @@
 
                         passRow.getPixel(newSrcX, 0, ps);
                         if (adjustBitDepths) {
-                            for (int b = 0; b < numBands; b++) {
+                            for (int b = 0; b < inputBands; b++) {
                                 ps[b] = scale[b][ps[b]];
                             }
                         }
--- a/src/java.desktop/share/classes/java/applet/Applet.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/applet/Applet.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,6 +31,7 @@
 import java.awt.HeadlessException;
 import java.awt.Image;
 import java.awt.Panel;
+import java.awt.event.ComponentEvent;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.net.MalformedURLException;
@@ -45,18 +46,17 @@
 import com.sun.media.sound.JavaSoundAudioClip;
 
 /**
- * An applet is a small program that is intended not to be run on
- * its own, but rather to be embedded inside another application.
+ * An applet is a small program that is intended not to be run on its own, but
+ * rather to be embedded inside another application.
  * <p>
- * The {@code Applet} class must be the superclass of any
- * applet that is to be embedded in a Web page or viewed by the Java
- * Applet Viewer. The {@code Applet} class provides a standard
- * interface between applets and their environment.
+ * The {@code Applet} class must be the superclass of any applet that is to be
+ * embedded in a Web page or viewed by the Java Applet Viewer. The
+ * {@code Applet} class provides a standard interface between applets and their
+ * environment.
  *
- * @author      Arthur van Hoff
- * @author      Chris Warth
- * @since       1.0
- *
+ * @author Arthur van Hoff
+ * @author Chris Warth
+ * @since 1.0
  * @deprecated The Applet API is deprecated, no replacement.
  */
 @Deprecated(since = "9")
@@ -65,13 +65,12 @@
     /**
      * Constructs a new Applet.
      * <p>
-     * Note: Many methods in {@code java.applet.Applet}
-     * may be invoked by the applet only after the applet is
-     * fully constructed; applet should avoid calling methods
-     * in {@code java.applet.Applet} in the constructor.
+     * Note: Many methods in {@code java.applet.Applet} may be invoked by the
+     * applet only after the applet is fully constructed; applet should avoid
+     * calling methods in {@code java.applet.Applet} in the constructor.
      *
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true.
+     * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()}
+     *         returns {@code true}
      * @see java.awt.GraphicsEnvironment#isHeadless
      * @since 1.4
      */
@@ -83,26 +82,26 @@
 
     /**
      * Applets can be serialized but the following conventions MUST be followed:
-     *
-     * Before Serialization:
-     * An applet must be in STOPPED state.
-     *
-     * After Deserialization:
-     * The applet will be restored in STOPPED state (and most clients will
-     * likely move it into RUNNING state).
-     * The stub field will be restored by the reader.
+     * <p>
+     * Before Serialization: An applet must be in STOPPED state.
+     * <p>
+     * After Deserialization: The applet will be restored in STOPPED state (and
+     * most clients will likely move it into RUNNING state). The stub field will
+     * be restored by the reader.
      */
     private transient AppletStub stub;
 
-    /* version ID for serialized form. */
+    /**
+     * Use serialVersionUID from JDK 1.0 for interoperability.
+     */
     private static final long serialVersionUID = -5836846270535785031L;
 
     /**
      * Read an applet from an object input stream.
-     * @param  s  an object input stream.
-     * @exception HeadlessException if
-     * {@code GraphicsEnvironment.isHeadless()} returns
-     * {@code true}
+     *
+     * @param  s an object input stream
+     * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()}
+     *         returns {@code true}
      * @serial
      * @see java.awt.GraphicsEnvironment#isHeadless
      * @since 1.4
@@ -117,12 +116,13 @@
 
     /**
      * Sets this applet's stub. This is done automatically by the system.
-     * <p>If there is a security manager, its {@code checkPermission}
-     * method is called with the
-     * {@code AWTPermission("setAppletStub")}
-     * permission if a stub has already been set.
-     * @param   stub   the new stub.
-     * @exception SecurityException if the caller cannot set the stub
+     * <p>
+     * If there is a security manager, its {@code checkPermission} method is
+     * called with the {@code AWTPermission("setAppletStub")} permission if a
+     * stub has already been set.
+     *
+     * @param  stub the new stub
+     * @throws SecurityException if the caller cannot set the stub
      */
     public final void setStub(AppletStub stub) {
         if (this.stub != null) {
@@ -135,14 +135,13 @@
     }
 
     /**
-     * Determines if this applet is active. An applet is marked active
-     * just before its {@code start} method is called. It becomes
-     * inactive just before its {@code stop} method is called.
+     * Determines if this applet is active. An applet is marked active just
+     * before its {@code start} method is called. It becomes inactive just
+     * before its {@code stop} method is called.
      *
-     * @return  {@code true} if the applet is active;
-     *          {@code false} otherwise.
-     * @see     java.applet.Applet#start()
-     * @see     java.applet.Applet#stop()
+     * @return {@code true} if the applet is active; {@code false} otherwise
+     * @see java.applet.Applet#start()
+     * @see java.applet.Applet#stop()
      */
     public boolean isActive() {
         if (stub != null) {
@@ -153,9 +152,8 @@
     }
 
     /**
-     * Gets the URL of the document in which this applet is embedded.
-     * For example, suppose an applet is contained
-     * within the document:
+     * Gets the {@code URL} of the document in which this applet is embedded.
+     * For example, suppose an applet is contained within the document:
      * <blockquote><pre>
      *    http://www.oracle.com/technetwork/java/index.html
      * </pre></blockquote>
@@ -164,55 +162,55 @@
      *    http://www.oracle.com/technetwork/java/index.html
      * </pre></blockquote>
      *
-     * @return  the {@link java.net.URL} of the document that contains this
-     *          applet.
-     * @see     java.applet.Applet#getCodeBase()
+     * @return the {@link java.net.URL} of the document that contains this
+     *         applet
+     * @see java.applet.Applet#getCodeBase()
      */
     public URL getDocumentBase() {
         return stub.getDocumentBase();
     }
 
     /**
-     * Gets the base URL. This is the URL of the directory which contains this applet.
+     * Gets the base {@code URL}. This is the {@code URL} of the directory which
+     * contains this applet.
      *
-     * @return  the base {@link java.net.URL} of
-     *          the directory which contains this applet.
-     * @see     java.applet.Applet#getDocumentBase()
+     * @return the base {@link java.net.URL} of the directory which contains
+     *         this applet
+     * @see java.applet.Applet#getDocumentBase()
      */
     public URL getCodeBase() {
         return stub.getCodeBase();
     }
 
     /**
-     * Returns the value of the named parameter in the HTML tag. For
-     * example, if this applet is specified as
+     * Returns the value of the named parameter in the HTML tag. For example, if
+     * this applet is specified as
      * <blockquote><pre>
      * &lt;applet code="Clock" width=50 height=50&gt;
      * &lt;param name=Color value="blue"&gt;
      * &lt;/applet&gt;
      * </pre></blockquote>
      * <p>
-     * then a call to {@code getParameter("Color")} returns the
-     * value {@code "blue"}.
+     * then a call to {@code getParameter("Color")} returns the value
+     * {@code "blue"}.
      * <p>
      * The {@code name} argument is case insensitive.
      *
-     * @param   name   a parameter name.
-     * @return  the value of the named parameter,
-     *          or {@code null} if not set.
+     * @param  name a parameter name
+     * @return the value of the named parameter, or {@code null} if not set
      */
-     public String getParameter(String name) {
-         return stub.getParameter(name);
-     }
+    public String getParameter(String name) {
+        return stub.getParameter(name);
+    }
 
     /**
-     * Determines this applet's context, which allows the applet to
-     * query and affect the environment in which it runs.
+     * Determines this applet's context, which allows the applet to query and
+     * affect the environment in which it runs.
      * <p>
-     * This environment of an applet represents the document that
-     * contains the applet.
+     * This environment of an applet represents the document that contains the
+     * applet.
      *
-     * @return  the applet's context.
+     * @return the applet's context
      */
     public AppletContext getAppletContext() {
         return stub.getAppletContext();
@@ -221,8 +219,8 @@
     /**
      * Requests that this applet be resized.
      *
-     * @param   width    the new requested width for the applet.
-     * @param   height   the new requested height for the applet.
+     * @param  width the new requested width for the applet
+     * @param  height the new requested height for the applet
      */
     @SuppressWarnings("deprecation")
     public void resize(int width, int height) {
@@ -238,7 +236,7 @@
     /**
      * Requests that this applet be resized.
      *
-     * @param   d   an object giving the new width and height.
+     * @param  d an object giving the new width and height
      */
     @SuppressWarnings("deprecation")
     public void resize(Dimension d) {
@@ -252,8 +250,8 @@
      * override this method to return {@code true}.
      *
      * @return {@code true}
+     * @see java.awt.Container#isValidateRoot
      * @since 1.7
-     * @see java.awt.Container#isValidateRoot
      */
     @Override
     public boolean isValidateRoot() {
@@ -261,51 +259,50 @@
     }
 
     /**
-     * Requests that the argument string be displayed in the
-     * "status window". Many browsers and applet viewers
-     * provide such a window, where the application can inform users of
-     * its current state.
+     * Requests that the argument string be displayed in the "status window".
+     * Many browsers and applet viewers provide such a window, where the
+     * application can inform users of its current state.
      *
-     * @param   msg   a string to display in the status window.
+     * @param  msg a string to display in the status window
      */
     public void showStatus(String msg) {
         getAppletContext().showStatus(msg);
     }
 
     /**
-     * Returns an {@code Image} object that can then be painted on
-     * the screen. The {@code url} that is passed as an argument
-     * must specify an absolute URL.
+     * Returns an {@code Image} object that can then be painted on the screen.
+     * The {@code url} that is passed as an argument must specify an absolute
+     * {@code URL}.
      * <p>
-     * This method always returns immediately, whether or not the image
-     * exists. When this applet attempts to draw the image on the screen,
-     * the data will be loaded. The graphics primitives that draw the
-     * image will incrementally paint on the screen.
+     * This method always returns immediately, whether or not the image exists.
+     * When this applet attempts to draw the image on the screen, the data will
+     * be loaded. The graphics primitives that draw the image will incrementally
+     * paint on the screen.
      *
-     * @param   url   an absolute URL giving the location of the image.
-     * @return  the image at the specified URL.
-     * @see     java.awt.Image
+     * @param  url an absolute {@code URL} giving the location of the image
+     * @return the image at the specified {@code URL}
+     * @see java.awt.Image
      */
     public Image getImage(URL url) {
         return getAppletContext().getImage(url);
     }
 
     /**
-     * Returns an {@code Image} object that can then be painted on
-     * the screen. The {@code url} argument must specify an absolute
-     * URL. The {@code name} argument is a specifier that is
-     * relative to the {@code url} argument.
+     * Returns an {@code Image} object that can then be painted on the screen.
+     * The {@code url} argument must specify an absolute {@code URL}. The
+     * {@code name} argument is a specifier that is relative to the {@code url}
+     * argument.
      * <p>
-     * This method always returns immediately, whether or not the image
-     * exists. When this applet attempts to draw the image on the screen,
-     * the data will be loaded. The graphics primitives that draw the
-     * image will incrementally paint on the screen.
+     * This method always returns immediately, whether or not the image exists.
+     * When this applet attempts to draw the image on the screen, the data will
+     * be loaded. The graphics primitives that draw the image will incrementally
+     * paint on the screen.
      *
-     * @param   url    an absolute URL giving the base location of the image.
-     * @param   name   the location of the image, relative to the
-     *                 {@code url} argument.
-     * @return  the image at the specified URL.
-     * @see     java.awt.Image
+     * @param  url an absolute URL giving the base location of the image
+     * @param  name the location of the image, relative to the {@code url}
+     *         argument
+     * @return the image at the specified {@code URL}
+     * @see java.awt.Image
      */
     public Image getImage(URL url, String name) {
         try {
@@ -316,47 +313,46 @@
     }
 
     /**
-     * Get an audio clip from the given URL.
+     * Get an audio clip from the given {@code URL}.
      *
-     * @param url points to the audio clip
-     * @return the audio clip at the specified URL.
-     *
-     * @since       1.2
+     * @param  url points to the audio clip
+     * @return the audio clip at the specified {@code URL}
+     * @since 1.2
      */
     public static final AudioClip newAudioClip(URL url) {
         return JavaSoundAudioClip.create(url);
     }
 
     /**
-     * Returns the {@code AudioClip} object specified by the
-     * {@code URL} argument.
+     * Returns the {@code AudioClip} object specified by the {@code URL}
+     * argument.
      * <p>
-     * This method always returns immediately, whether or not the audio
-     * clip exists. When this applet attempts to play the audio clip, the
-     * data will be loaded.
+     * This method always returns immediately, whether or not the audio clip
+     * exists. When this applet attempts to play the audio clip, the data will
+     * be loaded.
      *
-     * @param   url  an absolute URL giving the location of the audio clip.
-     * @return  the audio clip at the specified URL.
-     * @see     java.applet.AudioClip
+     * @param  url an absolute {@code URL} giving the location of the audio clip
+     * @return the audio clip at the specified {@code URL}
+     * @see java.applet.AudioClip
      */
     public AudioClip getAudioClip(URL url) {
         return getAppletContext().getAudioClip(url);
     }
 
     /**
-     * Returns the {@code AudioClip} object specified by the
-     * {@code URL} and {@code name} arguments.
+     * Returns the {@code AudioClip} object specified by the {@code URL} and
+     * {@code name} arguments.
      * <p>
-     * This method always returns immediately, whether or not the audio
-     * clip exists. When this applet attempts to play the audio clip, the
-     * data will be loaded.
+     * This method always returns immediately, whether or not the audio clip
+     * exists. When this applet attempts to play the audio clip, the data will
+     * be loaded.
      *
-     * @param   url    an absolute URL giving the base location of the
-     *                 audio clip.
-     * @param   name   the location of the audio clip, relative to the
-     *                 {@code url} argument.
-     * @return  the audio clip at the specified URL.
-     * @see     java.applet.AudioClip
+     * @param  url an absolute {@code URL} giving the base location of the audio
+     *         clip
+     * @param  name the location of the audio clip, relative to the {@code url}
+     *         argument
+     * @return the audio clip at the specified {@code URL}
+     * @see java.applet.AudioClip
      */
     public AudioClip getAudioClip(URL url, String name) {
         try {
@@ -367,45 +363,43 @@
     }
 
     /**
-     * Returns information about this applet. An applet should override
-     * this method to return a {@code String} containing information
-     * about the author, version, and copyright of the applet.
+     * Returns information about this applet. An applet should override this
+     * method to return a {@code String} containing information about the
+     * author, version, and copyright of the applet.
      * <p>
-     * The implementation of this method provided by the
-     * {@code Applet} class returns {@code null}.
+     * The implementation of this method provided by the {@code Applet} class
+     * returns {@code null}.
      *
-     * @return  a string containing information about the author, version, and
-     *          copyright of the applet.
+     * @return a string containing information about the author, version, and
+     *         copyright of the applet
      */
     public String getAppletInfo() {
         return null;
     }
 
     /**
-     * Gets the locale of the applet. It allows the applet
-     * to maintain its own locale separated from the locale
-     * of the browser or appletviewer.
+     * Gets the locale of the applet. It allows the applet to maintain its own
+     * locale separated from the locale of the browser or appletviewer.
      *
-     * @return  the locale of the applet; if no locale has
-     *          been set, the default locale is returned.
-     * @since   1.1
+     * @return the locale of the applet; if no locale has been set, the default
+     *         locale is returned
+     * @since 1.1
      */
     public Locale getLocale() {
-      Locale locale = super.getLocale();
-      if (locale == null) {
-        return Locale.getDefault();
-      }
-      return locale;
+        Locale locale = super.getLocale();
+        if (locale == null) {
+            return Locale.getDefault();
+        }
+        return locale;
     }
 
     /**
-     * Returns information about the parameters that are understood by
-     * this applet. An applet should override this method to return an
-     * array of {@code Strings} describing these parameters.
+     * Returns information about the parameters that are understood by this
+     * applet. An applet should override this method to return an array of
+     * strings describing these parameters.
      * <p>
-     * Each element of the array should be a set of three
-     * {@code Strings} containing the name, the type, and a
-     * description. For example:
+     * Each element of the array should be a set of three strings containing the
+     * name, the type, and a description. For example:
      * <blockquote><pre>
      * String pinfo[][] = {
      *   {"fps",    "1-10",    "frames per second"},
@@ -414,20 +408,20 @@
      * };
      * </pre></blockquote>
      * <p>
-     * The implementation of this method provided by the
-     * {@code Applet} class returns {@code null}.
+     * The implementation of this method provided by the {@code Applet} class
+     * returns {@code null}.
      *
-     * @return  an array describing the parameters this applet looks for.
+     * @return an array describing the parameters this applet looks for
      */
     public String[][] getParameterInfo() {
         return null;
     }
 
     /**
-     * Plays the audio clip at the specified absolute URL. Nothing
+     * Plays the audio clip at the specified absolute {@code URL}. Nothing
      * happens if the audio clip cannot be found.
      *
-     * @param   url   an absolute URL giving the location of the audio clip.
+     * @param  url an absolute {@code URL} giving the location of the audio clip
      */
     public void play(URL url) {
         AudioClip clip = getAudioClip(url);
@@ -437,13 +431,13 @@
     }
 
     /**
-     * Plays the audio clip given the URL and a specifier that is
+     * Plays the audio clip given the {@code URL} and a specifier that is
      * relative to it. Nothing happens if the audio clip cannot be found.
      *
-     * @param   url    an absolute URL giving the base location of the
-     *                 audio clip.
-     * @param   name   the location of the audio clip, relative to the
-     *                 {@code url} argument.
+     * @param  url an absolute {@code URL} giving the base location of the audio
+     *         clip
+     * @param  name the location of the audio clip, relative to the {@code url}
+     *         argument
      */
     public void play(URL url, String name) {
         AudioClip clip = getAudioClip(url, name);
@@ -453,98 +447,92 @@
     }
 
     /**
-     * Called by the browser or applet viewer to inform
-     * this applet that it has been loaded into the system. It is always
-     * called before the first time that the {@code start} method is
-     * called.
+     * Called by the browser or applet viewer to inform this applet that it has
+     * been loaded into the system. It is always called before the first time
+     * that the {@code start} method is called.
      * <p>
-     * A subclass of {@code Applet} should override this method if
-     * it has initialization to perform. For example, an applet with
-     * threads would use the {@code init} method to create the
-     * threads and the {@code destroy} method to kill them.
+     * A subclass of {@code Applet} should override this method if it has
+     * initialization to perform. For example, an applet with threads would use
+     * the {@code init} method to create the threads and the {@code destroy}
+     * method to kill them.
      * <p>
-     * The implementation of this method provided by the
-     * {@code Applet} class does nothing.
+     * The implementation of this method provided by the {@code Applet} class
+     * does nothing.
      *
-     * @see     java.applet.Applet#destroy()
-     * @see     java.applet.Applet#start()
-     * @see     java.applet.Applet#stop()
+     * @see java.applet.Applet#destroy()
+     * @see java.applet.Applet#start()
+     * @see java.applet.Applet#stop()
      */
     public void init() {
     }
 
     /**
-     * Called by the browser or applet viewer to inform
-     * this applet that it should start its execution. It is called after
-     * the {@code init} method and each time the applet is revisited
-     * in a Web page.
+     * Called by the browser or applet viewer to inform this applet that it
+     * should start its execution. It is called after the {@code init} method
+     * and each time the applet is revisited in a Web page.
      * <p>
-     * A subclass of {@code Applet} should override this method if
-     * it has any operation that it wants to perform each time the Web
-     * page containing it is visited. For example, an applet with
-     * animation might want to use the {@code start} method to
-     * resume animation, and the {@code stop} method to suspend the
-     * animation.
+     * A subclass of {@code Applet} should override this method if it has any
+     * operation that it wants to perform each time the Web page containing it
+     * is visited. For example, an applet with animation might want to use the
+     * {@code start} method to resume animation, and the {@code stop} method to
+     * suspend the animation.
      * <p>
-     * Note: some methods, such as {@code getLocationOnScreen}, can only
-     * provide meaningful results if the applet is showing.  Because
-     * {@code isShowing} returns {@code false} when the applet's
-     * {@code start} is first called, methods requiring
-     * {@code isShowing} to return {@code true} should be called from
-     * a {@code ComponentListener}.
+     * Note: some methods, such as {@code getLocationOnScreen}, can only provide
+     * meaningful results if the applet is showing. Because {@code isShowing}
+     * returns {@code false} when the applet's {@code start} is first called,
+     * methods requiring {@code isShowing} to return {@code true} should be
+     * called from a {@code ComponentListener}.
      * <p>
-     * The implementation of this method provided by the
-     * {@code Applet} class does nothing.
+     * The implementation of this method provided by the {@code Applet} class
+     * does nothing.
      *
-     * @see     java.applet.Applet#destroy()
-     * @see     java.applet.Applet#init()
-     * @see     java.applet.Applet#stop()
-     * @see     java.awt.Component#isShowing()
-     * @see     java.awt.event.ComponentListener#componentShown(java.awt.event.ComponentEvent)
+     * @see java.applet.Applet#destroy()
+     * @see java.applet.Applet#init()
+     * @see java.applet.Applet#stop()
+     * @see java.awt.Component#isShowing()
+     * @see java.awt.event.ComponentListener#componentShown(ComponentEvent)
      */
     public void start() {
     }
 
     /**
-     * Called by the browser or applet viewer to inform
-     * this applet that it should stop its execution. It is called when
-     * the Web page that contains this applet has been replaced by
-     * another page, and also just before the applet is to be destroyed.
+     * Called by the browser or applet viewer to inform this applet that it
+     * should stop its execution. It is called when the Web page that contains
+     * this applet has been replaced by another page, and also just before the
+     * applet is to be destroyed.
      * <p>
-     * A subclass of {@code Applet} should override this method if
-     * it has any operation that it wants to perform each time the Web
-     * page containing it is no longer visible. For example, an applet
-     * with animation might want to use the {@code start} method to
-     * resume animation, and the {@code stop} method to suspend the
-     * animation.
+     * A subclass of {@code Applet} should override this method if it has any
+     * operation that it wants to perform each time the Web page containing it
+     * is no longer visible. For example, an applet with animation might want to
+     * use the {@code start} method to resume animation, and the {@code stop}
+     * method to suspend the animation.
      * <p>
-     * The implementation of this method provided by the
-     * {@code Applet} class does nothing.
+     * The implementation of this method provided by the {@code Applet} class
+     * does nothing.
      *
-     * @see     java.applet.Applet#destroy()
-     * @see     java.applet.Applet#init()
+     * @see java.applet.Applet#destroy()
+     * @see java.applet.Applet#init()
      */
     public void stop() {
     }
 
     /**
-     * Called by the browser or applet viewer to inform
-     * this applet that it is being reclaimed and that it should destroy
-     * any resources that it has allocated. The {@code stop} method
-     * will always be called before {@code destroy}.
+     * Called by the browser or applet viewer to inform this applet that it is
+     * being reclaimed and that it should destroy any resources that it has
+     * allocated. The {@code stop} method will always be called before
+     * {@code destroy}.
      * <p>
-     * A subclass of {@code Applet} should override this method if
-     * it has any operation that it wants to perform before it is
-     * destroyed. For example, an applet with threads would use the
-     * {@code init} method to create the threads and the
-     * {@code destroy} method to kill them.
+     * A subclass of {@code Applet} should override this method if it has any
+     * operation that it wants to perform before it is destroyed. For example,
+     * an applet with threads would use the {@code init} method to create the
+     * threads and the {@code destroy} method to kill them.
      * <p>
-     * The implementation of this method provided by the
-     * {@code Applet} class does nothing.
+     * The implementation of this method provided by the {@code Applet} class
+     * does nothing.
      *
-     * @see     java.applet.Applet#init()
-     * @see     java.applet.Applet#start()
-     * @see     java.applet.Applet#stop()
+     * @see java.applet.Applet#init()
+     * @see java.applet.Applet#start()
+     * @see java.applet.Applet#stop()
      */
     public void destroy() {
     }
@@ -553,16 +541,19 @@
     // Accessibility support
     //
 
+    /**
+     * The accessible context associated with this {@code Applet}.
+     */
     AccessibleContext accessibleContext = null;
 
     /**
-     * Gets the AccessibleContext associated with this Applet.
-     * For applets, the AccessibleContext takes the form of an
-     * AccessibleApplet.
-     * A new AccessibleApplet instance is created if necessary.
+     * Gets the {@code AccessibleContext} associated with this {@code Applet}.
+     * For applets, the {@code AccessibleContext} takes the form of an
+     * {@code AccessibleApplet}. A new {@code AccessibleApplet} instance is
+     * created if necessary.
      *
-     * @return an AccessibleApplet that serves as the
-     *         AccessibleContext of this Applet
+     * @return an {@code AccessibleApplet} that serves as the
+     *         {@code AccessibleContext} of this {@code Applet}
      * @since 1.3
      */
     public AccessibleContext getAccessibleContext() {
@@ -573,20 +564,24 @@
     }
 
     /**
-     * This class implements accessibility support for the
-     * {@code Applet} class.  It provides an implementation of the
-     * Java Accessibility API appropriate to applet user-interface elements.
+     * This class implements accessibility support for the {@code Applet} class.
+     * It provides an implementation of the Java Accessibility API appropriate
+     * to applet user-interface elements.
+     *
      * @since 1.3
      */
     protected class AccessibleApplet extends AccessibleAWTPanel {
 
+        /**
+         * Use serialVersionUID from JDK 1.3 for interoperability.
+         */
         private static final long serialVersionUID = 8127374778187708896L;
 
         /**
          * Get the role of this object.
          *
-         * @return an instance of AccessibleRole describing the role of the
-         * object
+         * @return an instance of {@code AccessibleRole} describing the role of
+         *         the object
          */
         public AccessibleRole getAccessibleRole() {
             return AccessibleRole.FRAME;
@@ -595,8 +590,8 @@
         /**
          * Get the state of this object.
          *
-         * @return an instance of AccessibleStateSet containing the current
-         * state set of the object
+         * @return an instance of {@code AccessibleStateSet} containing the
+         *         current state set of the object
          * @see AccessibleState
          */
         public AccessibleStateSet getAccessibleStateSet() {
@@ -604,6 +599,5 @@
             states.add(AccessibleState.ACTIVE);
             return states;
         }
-
     }
 }
--- a/src/java.desktop/share/classes/java/applet/AppletContext.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/applet/AppletContext.java	Mon Dec 03 10:08:18 2018 +0100
@@ -33,81 +33,76 @@
 import java.util.Iterator;
 
 /**
- * This interface corresponds to an applet's environment: the
- * document containing the applet and the other applets in the same
- * document.
+ * This interface corresponds to an applet's environment: the document
+ * containing the applet and the other applets in the same document.
  * <p>
- * The methods in this interface can be used by an applet to obtain
- * information about its environment.
+ * The methods in this interface can be used by an applet to obtain information
+ * about its environment.
  *
- * @author      Arthur van Hoff
- * @since       1.0
- *
+ * @author Arthur van Hoff
+ * @since 1.0
  * @deprecated The Applet API is deprecated, no replacement.
  */
 @Deprecated(since = "9")
 public interface AppletContext {
+
     /**
      * Creates an audio clip.
      *
-     * @param   url   an absolute URL giving the location of the audio clip.
-     * @return  the audio clip at the specified URL.
+     * @param  url an absolute {@code URL} giving the location of the audio clip
+     * @return the audio clip at the specified {@code URL}
      */
     AudioClip getAudioClip(URL url);
 
     /**
-     * Returns an {@code Image} object that can then be painted on
-     * the screen. The {@code url} argument that is
-     * passed as an argument must specify an absolute URL.
+     * Returns an {@code Image} object that can then be painted on the screen.
+     * The {@code url} argument that is passed as an argument must specify an
+     * absolute {@code URL}.
      * <p>
-     * This method always returns immediately, whether or not the image
-     * exists. When the applet attempts to draw the image on the screen,
-     * the data will be loaded. The graphics primitives that draw the
-     * image will incrementally paint on the screen.
+     * This method always returns immediately, whether or not the image exists.
+     * When the applet attempts to draw the image on the screen, the data will
+     * be loaded. The graphics primitives that draw the image will incrementally
+     * paint on the screen.
      *
-     * @param   url   an absolute URL giving the location of the image.
-     * @return  the image at the specified URL.
-     * @see     java.awt.Image
+     * @param  url an absolute {@code URL} giving the location of the image
+     * @return the image at the specified {@code URL}
+     * @see java.awt.Image
      */
     Image getImage(URL url);
 
     /**
-     * Finds and returns the applet in the document represented by this
-     * applet context with the given name. The name can be set in the
-     * HTML tag by setting the {@code name} attribute.
+     * Finds and returns the applet in the document represented by this applet
+     * context with the given name. The name can be set in the HTML tag by
+     * setting the {@code name} attribute.
      *
-     * @param   name   an applet name.
-     * @return  the applet with the given name, or {@code null} if
-     *          not found.
+     * @param  name an applet name
+     * @return the applet with the given name, or {@code null} if not found
      */
     Applet getApplet(String name);
 
     /**
-     * Finds all the applets in the document represented by this applet
-     * context.
+     * Finds all the applets in the document represented by this applet context.
      *
-     * @return  an enumeration of all applets in the document represented by
-     *          this applet context.
+     * @return an enumeration of all applets in the document represented by this
+     *         applet context
      */
     Enumeration<Applet> getApplets();
 
     /**
-     * Requests that the browser or applet viewer show the Web page
-     * indicated by the {@code url} argument. The browser or
-     * applet viewer determines which window or frame to display the
-     * Web page. This method may be ignored by applet contexts that
-     * are not browsers.
+     * Requests that the browser or applet viewer show the Web page indicated by
+     * the {@code url} argument. The browser or applet viewer determines which
+     * window or frame to display the Web page. This method may be ignored by
+     * applet contexts that are not browsers.
      *
-     * @param   url   an absolute URL giving the location of the document.
+     * @param url an absolute {@code URL} giving the location of the document
      */
     void showDocument(URL url);
 
     /**
-     * Requests that the browser or applet viewer show the Web page
-     * indicated by the {@code url} argument. The
-     * {@code target} argument indicates in which HTML frame the
-     * document is to be displayed.
-     * The target argument is interpreted as follows:
+     * Requests that the browser or applet viewer show the Web page indicated by
+     * the {@code url} argument. The {@code target} argument indicates in which
+     * HTML frame the document is to be displayed. The target argument is
+     * interpreted as follows:
      *
      * <table class="striped">
      * <caption>Target arguments and their descriptions</caption>
@@ -141,53 +136,50 @@
      * <p>
      * An applet viewer or browser is free to ignore {@code showDocument}.
      *
-     * @param   url   an absolute URL giving the location of the document.
-     * @param   target   a {@code String} indicating where to display
-     *                   the page.
+     * @param  url an absolute {@code URL} giving the location of the document
+     * @param  target a {@code String} indicating where to display the page
      */
     public void showDocument(URL url, String target);
 
     /**
-     * Requests that the argument string be displayed in the
-     * "status window". Many browsers and applet viewers
-     * provide such a window, where the application can inform users of
-     * its current state.
+     * Requests that the argument string be displayed in the "status window".
+     * Many browsers and applet viewers provide such a window, where the
+     * application can inform users of its current state.
      *
-     * @param   status   a string to display in the status window.
+     * @param  status a string to display in the status window
      */
     void showStatus(String status);
 
     /**
-     * Associates the specified stream with the specified key in this
-     * applet context. If the applet context previously contained a mapping
-     * for this key, the old value is replaced.
+     * Associates the specified stream with the specified key in this applet
+     * context. If the applet context previously contained a mapping for this
+     * key, the old value is replaced.
      * <p>
      * For security reasons, mapping of streams and keys exists for each
-     * codebase. In other words, applet from one codebase cannot access
-     * the streams created by an applet from a different codebase
+     * codebase. In other words, applet from one codebase cannot access the
+     * streams created by an applet from a different codebase
      *
-     * @param key key with which the specified value is to be associated.
-     * @param stream stream to be associated with the specified key. If this
-     *               parameter is {@code null}, the specified key is removed
-     *               in this applet context.
-     * @throws IOException if the stream size exceeds a certain
-     *         size limit. Size limit is decided by the implementor of this
-     *         interface.
+     * @param  key key with which the specified value is to be associated
+     * @param  stream stream to be associated with the specified key. If this
+     *         parameter is {@code null}, the specified key is removed in this
+     *         applet context.
+     * @throws IOException if the stream size exceeds a certain size limit. Size
+     *         limit is decided by the implementor of this interface.
      * @since 1.4
      */
-    public void setStream(String key, InputStream stream)throws IOException;
+    public void setStream(String key, InputStream stream) throws IOException;
 
     /**
      * Returns the stream to which specified key is associated within this
-     * applet context. Returns {@code null} if the applet context contains
-     * no stream for this key.
+     * applet context. Returns {@code null} if the applet context contains no
+     * stream for this key.
      * <p>
      * For security reasons, mapping of streams and keys exists for each
-     * codebase. In other words, applet from one codebase cannot access
-     * the streams created by an applet from a different codebase
+     * codebase. In other words, applet from one codebase cannot access the
+     * streams created by an applet from a different codebase.
      *
+     * @param  key key whose associated stream is to be returned
      * @return the stream to which this applet context maps the key
-     * @param key key whose associated stream is to be returned.
      * @since 1.4
      */
     public InputStream getStream(String key);
@@ -196,11 +188,11 @@
      * Finds all the keys of the streams in this applet context.
      * <p>
      * For security reasons, mapping of streams and keys exists for each
-     * codebase. In other words, applet from one codebase cannot access
-     * the streams created by an applet from a different codebase
+     * codebase. In other words, applet from one codebase cannot access the
+     * streams created by an applet from a different codebase.
      *
-     * @return  an Iterator of all the names of the streams in this applet
-     *          context.
+     * @return an {@code Iterator} of all the names of the streams in this
+     *         applet context
      * @since 1.4
      */
     public Iterator<String> getStreamKeys();
--- a/src/java.desktop/share/classes/java/applet/AppletStub.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/applet/AppletStub.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,35 +28,31 @@
 import java.net.URL;
 
 /**
- * When an applet is first created, an applet stub is attached to it
- * using the applet's {@code setStub} method. This stub
- * serves as the interface between the applet and the browser
- * environment or applet viewer environment in which the application
- * is running.
+ * When an applet is first created, an applet stub is attached to it using the
+ * applet's {@code setStub} method. This stub serves as the interface between
+ * the applet and the browser environment or applet viewer environment in which
+ * the application is running.
  *
- * @author      Arthur van Hoff
- * @see         java.applet.Applet#setStub(java.applet.AppletStub)
- * @since       1.0
- *
+ * @author Arthur van Hoff
+ * @see java.applet.Applet#setStub(java.applet.AppletStub)
+ * @since 1.0
  * @deprecated The Applet API is deprecated, no replacement.
  */
 @Deprecated(since = "9")
 public interface AppletStub {
+
     /**
-     * Determines if the applet is active. An applet is active just
-     * before its {@code start} method is called. It becomes
-     * inactive just before its {@code stop} method is called.
+     * Determines if the applet is active. An applet is active just before its
+     * {@code start} method is called. It becomes inactive just before its
+     * {@code stop} method is called.
      *
-     * @return  {@code true} if the applet is active;
-     *          {@code false} otherwise.
+     * @return {@code true} if the applet is active; {@code false} otherwise
      */
     boolean isActive();
 
-
     /**
-     * Gets the URL of the document in which the applet is embedded.
-     * For example, suppose an applet is contained
-     * within the document:
+     * Gets the {@code URL} of the document in which the applet is embedded. For
+     * example, suppose an applet is contained within the document:
      * <blockquote><pre>
      *    http://www.oracle.com/technetwork/java/index.html
      * </pre></blockquote>
@@ -65,51 +61,50 @@
      *    http://www.oracle.com/technetwork/java/index.html
      * </pre></blockquote>
      *
-     * @return  the {@link java.net.URL} of the document that contains the
-     *          applet.
-     * @see     java.applet.AppletStub#getCodeBase()
+     * @return the {@link java.net.URL} of the document that contains the applet
+     * @see java.applet.AppletStub#getCodeBase()
      */
     URL getDocumentBase();
 
     /**
-     * Gets the base URL. This is the URL of the directory which contains the applet.
+     * Gets the base {@code URL}. This is the {@code URL} of the directory which
+     * contains the applet.
      *
-     * @return  the base {@link java.net.URL} of
-     *          the directory which contains the applet.
-     * @see     java.applet.AppletStub#getDocumentBase()
+     * @return the base {@link java.net.URL} of the directory which contains the
+     *         applet
+     * @see java.applet.AppletStub#getDocumentBase()
      */
     URL getCodeBase();
 
     /**
-     * Returns the value of the named parameter in the HTML tag. For
-     * example, if an applet is specified as
+     * Returns the value of the named parameter in the HTML tag. For example, if
+     * an applet is specified as
      * <blockquote><pre>
      * &lt;applet code="Clock" width=50 height=50&gt;
      * &lt;param name=Color value="blue"&gt;
      * &lt;/applet&gt;
      * </pre></blockquote>
      * <p>
-     * then a call to {@code getParameter("Color")} returns the
-     * value {@code "blue"}.
+     * then a call to {@code getParameter("Color")} returns the value
+     * {@code "blue"}.
      *
-     * @param   name   a parameter name.
-     * @return  the value of the named parameter,
-     * or {@code null} if not set.
+     * @param  name a parameter name
+     * @return the value of the named parameter, or {@code null} if not set
      */
     String getParameter(String name);
 
     /**
      * Returns the applet's context.
      *
-     * @return  the applet's context.
+     * @return the applet's context
      */
     AppletContext getAppletContext();
 
     /**
      * Called when the applet wants to be resized.
      *
-     * @param   width    the new requested width for the applet.
-     * @param   height   the new requested height for the applet.
+     * @param  width the new requested width for the applet
+     * @param  height the new requested height for the applet
      */
     void appletResize(int width, int height);
 }
--- a/src/java.desktop/share/classes/java/applet/AudioClip.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/applet/AudioClip.java	Mon Dec 03 10:08:18 2018 +0100
@@ -26,21 +26,20 @@
 package java.applet;
 
 /**
- * The {@code AudioClip} interface is a simple abstraction for
- * playing a sound clip. Multiple {@code AudioClip} items can be
- * playing at the same time, and the resulting sound is mixed
- * together to produce a composite.
+ * The {@code AudioClip} interface is a simple abstraction for playing a sound
+ * clip. Multiple {@code AudioClip} items can be playing at the same time, and
+ * the resulting sound is mixed together to produce a composite.
  *
- * @author      Arthur van Hoff
- * @since       1.0
- *
+ * @author Arthur van Hoff
+ * @since 1.0
  * @deprecated The Applet API is deprecated, no replacement.
  */
 @Deprecated(since = "9")
 public interface AudioClip {
+
     /**
-     * Starts playing this audio clip. Each time this method is called,
-     * the clip is restarted from the beginning.
+     * Starts playing this audio clip. Each time this method is called, the clip
+     * is restarted from the beginning.
      */
     void play();
 
--- a/src/java.desktop/share/classes/java/awt/Component.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/Component.java	Mon Dec 03 10:08:18 2018 +0100
@@ -204,7 +204,7 @@
  * <a href="http://www.oracle.com/technetwork/java/painting-140037.html">Painting in AWT and Swing</a>.
  * <p>
  * For details on the focus subsystem, see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
  * How to Use the Focus Subsystem</a>,
  * a section in <em>The Java Tutorial</em>, and the
  * <a href="../../java/awt/doc-files/FocusSpec.html">Focus Specification</a>
--- a/src/java.desktop/share/classes/java/awt/Container.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/Container.java	Mon Dec 03 10:08:18 2018 +0100
@@ -79,7 +79,7 @@
  * (and hence to the bottom of the stacking order).
  * <p>
  * <b>Note</b>: For details on the focus subsystem, see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
  * How to Use the Focus Subsystem</a>,
  * a section in <em>The Java Tutorial</em>, and the
  * <a href="../../java/awt/doc-files/FocusSpec.html">Focus Specification</a>
--- a/src/java.desktop/share/classes/java/awt/DefaultFocusTraversalPolicy.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/DefaultFocusTraversalPolicy.java	Mon Dec 03 10:08:18 2018 +0100
@@ -54,7 +54,7 @@
  * impact, the focusability of the Component itself.
  * <p>
  * Please see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
  * How to Use the Focus Subsystem</a>,
  * a section in <em>The Java Tutorial</em>, and the
  * <a href="../../java/awt/doc-files/FocusSpec.html">Focus Specification</a>
--- a/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java	Mon Dec 03 10:08:18 2018 +0100
@@ -49,7 +49,7 @@
  * Container's FocusTraversalPolicy.
  * <p>
  * Please see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
  * How to Use the Focus Subsystem</a>,
  * a section in <em>The Java Tutorial</em>, and the
  * <a href="../../java/awt/doc-files/FocusSpec.html">Focus Specification</a>
--- a/src/java.desktop/share/classes/java/awt/DisplayMode.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/DisplayMode.java	Mon Dec 03 10:08:18 2018 +0100
@@ -35,7 +35,7 @@
  * (see {@link GraphicsDevice#isDisplayChangeSupported}).
  * <p>
  * For more information on full-screen exclusive mode API, see the
- * <a href="http://docs.oracle.com/javase/tutorial/extra/fullscreen/index.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/extra/fullscreen/index.html">
  * Full-Screen Exclusive Mode API Tutorial</a>.
  *
  * @see GraphicsDevice
--- a/src/java.desktop/share/classes/java/awt/FocusTraversalPolicy.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/FocusTraversalPolicy.java	Mon Dec 03 10:08:18 2018 +0100
@@ -49,7 +49,7 @@
  * policy is used to perform the search operation.
  * <p>
  * Please see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
  * How to Use the Focus Subsystem</a>,
  * a section in <em>The Java Tutorial</em>, and the
  * <a href="../../java/awt/doc-files/FocusSpec.html">Focus Specification</a>
--- a/src/java.desktop/share/classes/java/awt/GraphicsDevice.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/GraphicsDevice.java	Mon Dec 03 10:08:18 2018 +0100
@@ -67,7 +67,7 @@
  * }</pre>
  * <p>
  * For more information on full-screen exclusive mode API, see the
- * <a href="http://docs.oracle.com/javase/tutorial/extra/fullscreen/index.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/extra/fullscreen/index.html">
  * Full-Screen Exclusive Mode API Tutorial</a>.
  *
  * @see GraphicsEnvironment
--- a/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java	Mon Dec 03 10:08:18 2018 +0100
@@ -85,7 +85,7 @@
  * ClassLoader.
  * <p>
  * Please see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
  * How to Use the Focus Subsystem</a>,
  * a section in <em>The Java Tutorial</em>, and the
  * <a href="../../java/awt/doc-files/FocusSpec.html">Focus Specification</a>
--- a/src/java.desktop/share/classes/java/awt/Toolkit.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/Toolkit.java	Mon Dec 03 10:08:18 2018 +0100
@@ -102,9 +102,9 @@
  *
  * <li>Moving the focus from one component to another.
  * <br>For more information, see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html#transferTiming">Timing
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html#transferTiming">Timing
  * Focus Transfers</a>, a section in
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/">The Swing
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/">The Swing
  * Tutorial</a>.
  *
  * <li>Making a top-level container visible.
--- a/src/java.desktop/share/classes/java/awt/event/ActionEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/ActionEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -51,7 +51,7 @@
  * in the range from {@code ACTION_FIRST} to {@code ACTION_LAST}.
  *
  * @see ActionListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html">Tutorial: How to Write an Action Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html">Tutorial: How to Write an Action Listener</a>
  *
  * @author Carl Quinn
  * @since 1.1
--- a/src/java.desktop/share/classes/java/awt/event/ActionListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/ActionListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -37,7 +37,7 @@
  * invoked.
  *
  * @see ActionEvent
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html">How to Write an Action Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html">How to Write an Action Listener</a>
  *
  * @author Carl Quinn
  * @since 1.1
--- a/src/java.desktop/share/classes/java/awt/event/ComponentAdapter.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/ComponentAdapter.java	Mon Dec 03 10:08:18 2018 +0100
@@ -44,7 +44,7 @@
  *
  * @see ComponentEvent
  * @see ComponentListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/componentlistener.html">Tutorial: Writing a Component Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/componentlistener.html">Tutorial: Writing a Component Listener</a>
  *
  * @author Carl Quinn
  * @since 1.1
--- a/src/java.desktop/share/classes/java/awt/event/ComponentEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/ComponentEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -60,7 +60,7 @@
  *
  * @see ComponentAdapter
  * @see ComponentListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/componentlistener.html">Tutorial: Writing a Component Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/componentlistener.html">Tutorial: Writing a Component Listener</a>
  *
  * @author Carl Quinn
  * @since 1.1
--- a/src/java.desktop/share/classes/java/awt/event/ComponentListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/ComponentListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -46,7 +46,7 @@
  *
  * @see ComponentAdapter
  * @see ComponentEvent
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/componentlistener.html">Tutorial: Writing a Component Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/componentlistener.html">Tutorial: Writing a Component Listener</a>
  *
  * @author Carl Quinn
  * @since 1.1
--- a/src/java.desktop/share/classes/java/awt/event/ContainerAdapter.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/ContainerAdapter.java	Mon Dec 03 10:08:18 2018 +0100
@@ -44,7 +44,7 @@
  *
  * @see ContainerEvent
  * @see ContainerListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/containerlistener.html">Tutorial: Writing a Container Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/containerlistener.html">Tutorial: Writing a Container Listener</a>
  *
  * @author Amy Fowler
  * @since 1.1
--- a/src/java.desktop/share/classes/java/awt/event/ContainerEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/ContainerEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -52,7 +52,7 @@
  *
  * @see ContainerAdapter
  * @see ContainerListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/containerlistener.html">Tutorial: Writing a Container Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/containerlistener.html">Tutorial: Writing a Container Listener</a>
  *
  * @author Tim Prinzing
  * @author Amy Fowler
--- a/src/java.desktop/share/classes/java/awt/event/ContainerListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/ContainerListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -46,7 +46,7 @@
  *
  * @see ContainerAdapter
  * @see ContainerEvent
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/containerlistener.html">Tutorial: Writing a Container Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/containerlistener.html">Tutorial: Writing a Container Listener</a>
  *
  * @author Tim Prinzing
  * @author Amy Fowler
--- a/src/java.desktop/share/classes/java/awt/event/FocusAdapter.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/FocusAdapter.java	Mon Dec 03 10:08:18 2018 +0100
@@ -44,7 +44,7 @@
  *
  * @see FocusEvent
  * @see FocusListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/focuslistener.html">Tutorial: Writing a Focus Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/focuslistener.html">Tutorial: Writing a Focus Listener</a>
  *
  * @author Carl Quinn
  * @since 1.1
--- a/src/java.desktop/share/classes/java/awt/event/FocusEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/FocusEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -64,7 +64,7 @@
  *
  * @see FocusAdapter
  * @see FocusListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/focuslistener.html">Tutorial: Writing a Focus Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/focuslistener.html">Tutorial: Writing a Focus Listener</a>
  *
  * @author Carl Quinn
  * @author Amy Fowler
--- a/src/java.desktop/share/classes/java/awt/event/FocusListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/FocusListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -42,7 +42,7 @@
  *
  * @see FocusAdapter
  * @see FocusEvent
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/focuslistener.html">Tutorial: Writing a Focus Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/focuslistener.html">Tutorial: Writing a Focus Listener</a>
  *
  * @author Carl Quinn
  * @since 1.1
--- a/src/java.desktop/share/classes/java/awt/event/InputEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/InputEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -536,9 +536,6 @@
      * Zero parameter means that no modifiers were passed and will
      * cause the returning an empty string.
      *
-     * @return a String describing the extended modifier keys and
-     * mouse buttons
-     *
      * @param modifiers a modifier mask describing the extended
      *                modifier keys and mouse buttons for the event
      * @return a text description of the combination of extended
--- a/src/java.desktop/share/classes/java/awt/event/ItemEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/ItemEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -58,7 +58,7 @@
  *
  * @see java.awt.ItemSelectable
  * @see ItemListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/itemlistener.html">Tutorial: Writing an Item Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/itemlistener.html">Tutorial: Writing an Item Listener</a>
  *
  * @since 1.1
  */
--- a/src/java.desktop/share/classes/java/awt/event/ItemListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/ItemListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -40,7 +40,7 @@
  *
  * @see java.awt.ItemSelectable
  * @see ItemEvent
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/itemlistener.html">Tutorial: Writing an Item Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/itemlistener.html">Tutorial: Writing an Item Listener</a>
  *
  * @since 1.1
  */
--- a/src/java.desktop/share/classes/java/awt/event/KeyAdapter.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/KeyAdapter.java	Mon Dec 03 10:08:18 2018 +0100
@@ -46,7 +46,7 @@
  *
  * @see KeyEvent
  * @see KeyListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html">Tutorial: Writing a Key Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html">Tutorial: Writing a Key Listener</a>
  *
  * @since 1.1
  */
--- a/src/java.desktop/share/classes/java/awt/event/KeyEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/KeyEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -145,7 +145,7 @@
  *
  * @see KeyAdapter
  * @see KeyListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html">Tutorial: Writing a Key Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html">Tutorial: Writing a Key Listener</a>
  *
  * @since 1.1
  */
--- a/src/java.desktop/share/classes/java/awt/event/MouseAdapter.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/MouseAdapter.java	Mon Dec 03 10:08:18 2018 +0100
@@ -63,7 +63,7 @@
  * @see MouseListener
  * @see MouseMotionListener
  * @see MouseWheelListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html">Tutorial: Writing a Mouse Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html">Tutorial: Writing a Mouse Listener</a>
  *
  * @since 1.1
  */
--- a/src/java.desktop/share/classes/java/awt/event/MouseEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/MouseEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -184,8 +184,8 @@
  * @see MouseMotionAdapter
  * @see MouseMotionListener
  * @see MouseWheelListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html">Tutorial: Writing a Mouse Listener</a>
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html">Tutorial: Writing a Mouse Motion Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html">Tutorial: Writing a Mouse Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html">Tutorial: Writing a Mouse Motion Listener</a>
  *
  * @since 1.1
  */
--- a/src/java.desktop/share/classes/java/awt/event/MouseListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/MouseListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -50,7 +50,7 @@
  *
  * @see MouseAdapter
  * @see MouseEvent
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html">Tutorial: Writing a Mouse Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html">Tutorial: Writing a Mouse Listener</a>
  *
  * @since 1.1
  */
--- a/src/java.desktop/share/classes/java/awt/event/MouseMotionAdapter.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/MouseMotionAdapter.java	Mon Dec 03 10:08:18 2018 +0100
@@ -49,7 +49,7 @@
  *
  * @see MouseEvent
  * @see MouseMotionListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html">Tutorial: Writing a Mouse Motion Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html">Tutorial: Writing a Mouse Motion Listener</a>
  *
  * @since 1.1
  */
--- a/src/java.desktop/share/classes/java/awt/event/MouseMotionListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/MouseMotionListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -47,7 +47,7 @@
  *
  * @see MouseMotionAdapter
  * @see MouseEvent
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html">Tutorial: Writing a Mouse Motion Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html">Tutorial: Writing a Mouse Motion Listener</a>
  *
  * @since 1.1
  */
--- a/src/java.desktop/share/classes/java/awt/event/WindowAdapter.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/WindowAdapter.java	Mon Dec 03 10:08:18 2018 +0100
@@ -45,7 +45,7 @@
  *
  * @see WindowEvent
  * @see WindowListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html">Tutorial: Writing a Window Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html">Tutorial: Writing a Window Listener</a>
  *
  * @author Carl Quinn
  * @author Amy Fowler
--- a/src/java.desktop/share/classes/java/awt/event/WindowEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/WindowEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -52,7 +52,7 @@
  *
  * @see WindowAdapter
  * @see WindowListener
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html">Tutorial: Writing a Window Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html">Tutorial: Writing a Window Listener</a>
  *
  * @since 1.1
  */
--- a/src/java.desktop/share/classes/java/awt/event/WindowFocusListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/WindowFocusListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -47,7 +47,7 @@
  *
  * @see WindowAdapter
  * @see WindowEvent
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html">Tutorial: Writing a Window Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html">Tutorial: Writing a Window Listener</a>
  *
  * @since 1.4
  */
--- a/src/java.desktop/share/classes/java/awt/event/WindowListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/event/WindowListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -44,7 +44,7 @@
  *
  * @see WindowAdapter
  * @see WindowEvent
- * @see <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html">Tutorial: How to Write Window Listeners</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html">Tutorial: How to Write Window Listeners</a>
  *
  * @since 1.1
  */
--- a/src/java.desktop/share/classes/java/beans/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/java/beans/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -102,7 +102,7 @@
  * <h2>Related Documentation</h2>
  * For overview, architecture, and tutorial documentation, please see:
  * <ul>
- *     <li><a href="http://docs.oracle.com/javase/tutorial/javabeans/">
+ *     <li><a href="https://docs.oracle.com/javase/tutorial/javabeans/">
  *         JavaBeans</a>, a trail in <em>The Java Tutorial</em>.</li>
  *     <li><a href="http://www.oracle.com/technetwork/java/persistence2-141443.html">
  *         Long-Term Persistence</a>, an article in
--- a/src/java.desktop/share/classes/javax/swing/AbstractButton.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/AbstractButton.java	Mon Dec 03 10:08:18 2018 +0100
@@ -49,12 +49,12 @@
  * configuring a button.  Refer to <a href="Action.html#buttonActions">
  * Swing Components Supporting <code>Action</code></a> for more
  * details, and you can find more information in <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
  * to Use Actions</a>, a section in <em>The Java Tutorial</em>.
  * <p>
  * For further information see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/button.html">How to Use Buttons, Check Boxes, and Radio Buttons</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/button.html">How to Use Buttons, Check Boxes, and Radio Buttons</a>,
  * a section in <em>The Java Tutorial</em>.
  * <p>
  * <strong>Warning:</strong>
--- a/src/java.desktop/share/classes/javax/swing/BorderFactory.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/BorderFactory.java	Mon Dec 03 10:08:18 2018 +0100
@@ -35,7 +35,7 @@
  * possible, this factory will hand out references to shared
  * <code>Border</code> instances.
  * For further information and examples see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/border.html">How
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/border.html">How
  to Use Borders</a>,
  * a section in <em>The Java Tutorial</em>.
  *
--- a/src/java.desktop/share/classes/javax/swing/Box.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/Box.java	Mon Dec 03 10:08:18 2018 +0100
@@ -57,7 +57,7 @@
  * If you are implementing a <code>BoxLayout</code> you
  * can find further information and examples in
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html">How to Use BoxLayout</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/layout/box.html">How to Use BoxLayout</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong>
--- a/src/java.desktop/share/classes/javax/swing/BoxLayout.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/BoxLayout.java	Mon Dec 03 10:08:18 2018 +0100
@@ -117,7 +117,7 @@
  * <p>
  * For further information and examples see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html">How to Use BoxLayout</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/layout/box.html">How to Use BoxLayout</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong>
--- a/src/java.desktop/share/classes/javax/swing/ButtonGroup.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/ButtonGroup.java	Mon Dec 03 10:08:18 2018 +0100
@@ -51,7 +51,7 @@
  * Initially, all buttons in the group are unselected.
  * <p>
  * For examples and further information on using button groups see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/button.html#radiobutton">How to Use Radio Buttons</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/button.html#radiobutton">How to Use Radio Buttons</a>,
  * a section in <em>The Java Tutorial</em>.
  * <p>
  * <strong>Warning:</strong>
--- a/src/java.desktop/share/classes/javax/swing/DefaultFocusManager.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/DefaultFocusManager.java	Mon Dec 03 10:08:18 2018 +0100
@@ -37,7 +37,7 @@
  * <code>java.awt.DefaultKeyboardFocusManager</code> instead.
  * <p>
  * Please see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
  * How to Use the Focus Subsystem</a>,
  * a section in <em>The Java Tutorial</em>, and the
  * <a href="../../java/awt/doc-files/FocusSpec.html">Focus Specification</a>
--- a/src/java.desktop/share/classes/javax/swing/FocusManager.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/FocusManager.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,7 +34,7 @@
  * <code>java.awt.DefaultKeyboardFocusManager</code> instead.
  * <p>
  * Please see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
  * How to Use the Focus Subsystem</a>,
  * a section in <em>The Java Tutorial</em>, and the
  * <a href="../../java/awt/doc-files/FocusSpec.html">Focus Specification</a>
--- a/src/java.desktop/share/classes/javax/swing/ImageIcon.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/ImageIcon.java	Mon Dec 03 10:08:18 2018 +0100
@@ -51,7 +51,7 @@
  *
  * <p>
  * For further information and examples of using image icons, see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/icon.html">How to Use Icons</a>
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/icon.html">How to Use Icons</a>
  * in <em>The Java Tutorial.</em>
  *
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/JApplet.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JApplet.java	Mon Dec 03 10:08:18 2018 +0100
@@ -47,7 +47,7 @@
  * in <em>The Java Tutorial</em>,
  * in the section
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/applet.html">How to Make Applets</a>.
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/applet.html">How to Make Applets</a>.
  * <p>
  * The <code>JApplet</code> class is slightly incompatible with
  * <code>java.applet.Applet</code>.  <code>JApplet</code> contains a
@@ -197,7 +197,7 @@
      * are currently typed to {@code JComponent}.
      * <p>
      * Please see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html">
      * How to Use Drag and Drop and Data Transfer</a>, a section in
      * <em>The Java Tutorial</em>, for more information.
      *
--- a/src/java.desktop/share/classes/javax/swing/JButton.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JButton.java	Mon Dec 03 10:08:18 2018 +0100
@@ -43,10 +43,10 @@
  * configuring a button.  Refer to <a href="Action.html#buttonActions">
  * Swing Components Supporting <code>Action</code></a> for more
  * details, and you can find more information in <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
  * to Use Actions</a>, a section in <em>The Java Tutorial</em>.
  * <p>
- * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/button.html">How to Use Buttons, Check Boxes, and Radio Buttons</a>
+ * See <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/button.html">How to Use Buttons, Check Boxes, and Radio Buttons</a>
  * in <em>The Java Tutorial</em>
  * for information and examples of using buttons.
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/JCheckBox.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JCheckBox.java	Mon Dec 03 10:08:18 2018 +0100
@@ -38,7 +38,7 @@
  * An implementation of a check box -- an item that can be selected or
  * deselected, and which displays its state to the user.
  * By convention, any number of check boxes in a group can be selected.
- * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/button.html">How to Use Buttons, Check Boxes, and Radio Buttons</a>
+ * See <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/button.html">How to Use Buttons, Check Boxes, and Radio Buttons</a>
  * in <em>The Java Tutorial</em>
  * for examples and information on using check boxes.
  * <p>
@@ -48,7 +48,7 @@
  * configuring a button.  Refer to <a href="Action.html#buttonActions">
  * Swing Components Supporting <code>Action</code></a> for more
  * details, and you can find more information in <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
  * to Use Actions</a>, a section in <em>The Java Tutorial</em>.
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
--- a/src/java.desktop/share/classes/javax/swing/JCheckBoxMenuItem.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JCheckBoxMenuItem.java	Mon Dec 03 10:08:18 2018 +0100
@@ -53,7 +53,7 @@
  * configuring a menu item.  Refer to <a href="Action.html#buttonActions">
  * Swing Components Supporting <code>Action</code></a> for more
  * details, and you can find more information in <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
  * to Use Actions</a>, a section in <em>The Java Tutorial</em>.
  * <p>
  * Some times it is required to select several check box menu items from a menu.
@@ -70,7 +70,7 @@
  * <p>
  * For further information and examples of using check box menu items,
  * see <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
@@ -178,7 +178,7 @@
      * Returns the name of the L&amp;F class
      * that renders this component.
      *
-     * @return "CheckBoxMenuItemUI"
+     * @return the string "CheckBoxMenuItemUI"
      * @see JComponent#getUIClassID
      * @see UIDefaults#getUI
      */
--- a/src/java.desktop/share/classes/javax/swing/JColorChooser.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JColorChooser.java	Mon Dec 03 10:08:18 2018 +0100
@@ -42,7 +42,7 @@
  * a user to manipulate and select a color.
  * For information about using color choosers, see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html">How to Use Color Choosers</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html">How to Use Color Choosers</a>,
  * a section in <em>The Java Tutorial</em>.
  *
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/JComboBox.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JComboBox.java	Mon Dec 03 10:08:18 2018 +0100
@@ -64,8 +64,8 @@
  * Please see {@link java.beans.XMLEncoder}.
  *
  * <p>
- * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html">How to Use Combo Boxes</a>
- * in <a href="http://docs.oracle.com/javase/tutorial/"><em>The Java Tutorial</em></a>
+ * See <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html">How to Use Combo Boxes</a>
+ * in <a href="https://docs.oracle.com/javase/tutorial/"><em>The Java Tutorial</em></a>
  * for further information.
  *
  * @see ComboBoxModel
--- a/src/java.desktop/share/classes/javax/swing/JComponent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JComponent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -70,7 +70,7 @@
  * that provide a place for other Swing components to paint themselves.
  * For an explanation of containment hierarchies, see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html">Swing Components and the Containment Hierarchy</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html">Swing Components and the Containment Hierarchy</a>,
  * a section in <em>The Java Tutorial</em>.
  *
  * <p>
@@ -84,20 +84,20 @@
  *     <em>UI delegate</em> -- an object that descends from
  *     {@link javax.swing.plaf.ComponentUI}.
  *     See <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html">How
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html">How
  *     to Set the Look and Feel</a>
  *     in <em>The Java Tutorial</em>
  *     for more information.
  * <li>Comprehensive keystroke handling.
  *     See the document <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html">How to Use Key Bindings</a>,
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html">How to Use Key Bindings</a>,
  *     an article in <em>The Java Tutorial</em>,
  *     for more information.
  * <li>Support for tool tips --
  *     short descriptions that pop up when the cursor lingers
  *     over a component.
  *     See <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/components/tooltip.html">How
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/components/tooltip.html">How
  *     to Use Tool Tips</a>
  *     in <em>The Java Tutorial</em>
  *     for more information.
@@ -116,14 +116,14 @@
  *     that includes double buffering and support for borders.
  *     For more information see <a
  * href="http://www.oracle.com/technetwork/java/painting-140037.html#swing">Painting</a> and
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/border.html">How
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/border.html">How
  *     to Use Borders</a>,
  *     both of which are sections in <em>The Java Tutorial</em>.
  * </ul>
  * For more information on these subjects, see the
  * {@link javax.swing Swing package description}
  * and <em>The Java Tutorial</em> section
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/jcomponent.html">The JComponent Class</a>.
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/jcomponent.html">The JComponent Class</a>.
  * <p>
  * <code>JComponent</code> and its subclasses document default values
  * for certain properties.  For example, <code>JTable</code> documents the
@@ -141,7 +141,7 @@
  * <p>
  * In release 1.4, the focus subsystem was rearchitected.
  * For more information, see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
  * How to Use the Focus Subsystem</a>,
  * a section in <em>The Java Tutorial</em>.
  * <p>
@@ -1313,7 +1313,7 @@
     /**
      * In release 1.4, the focus subsystem was rearchitected.
      * For more information, see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
      * How to Use the Focus Subsystem</a>,
      * a section in <em>The Java Tutorial</em>.
      * <p>
@@ -1377,7 +1377,7 @@
     /**
      * In release 1.4, the focus subsystem was rearchitected.
      * For more information, see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
      * How to Use the Focus Subsystem</a>,
      * a section in <em>The Java Tutorial</em>.
      * <p>
@@ -1410,7 +1410,7 @@
     /**
      * In release 1.4, the focus subsystem was rearchitected.
      * For more information, see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
      * How to Use the Focus Subsystem</a>,
      * a section in <em>The Java Tutorial</em>.
      * <p>
@@ -1443,7 +1443,7 @@
      * all, use the <code>setFocusable</code> method instead.
      * <p>
      * Please see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
      * How to Use the Focus Subsystem</a>,
      * a section in <em>The Java Tutorial</em>,
      * for more information.
@@ -1462,7 +1462,7 @@
      * get focus; otherwise returns <code>false</code>.
      * <p>
      * Please see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
      * How to Use the Focus Subsystem</a>,
      * a section in <em>The Java Tutorial</em>,
      * for more information.
@@ -1488,7 +1488,7 @@
      * its behavior is platform dependent. Instead we recommend the
      * use of {@link #requestFocusInWindow() requestFocusInWindow()}.
      * If you would like more information on focus, see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
      * How to Use the Focus Subsystem</a>,
      * a section in <em>The Java Tutorial</em>.
      *
@@ -1511,7 +1511,7 @@
      * use of {@link #requestFocusInWindow(boolean)
      * requestFocusInWindow(boolean)}.
      * If you would like more information on focus, see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
      * How to Use the Focus Subsystem</a>,
      * a section in <em>The Java Tutorial</em>.
      *
@@ -1533,7 +1533,7 @@
      * this method.
      * <p>
      * If you would like more information on focus, see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
      * How to Use the Focus Subsystem</a>,
      * a section in <em>The Java Tutorial</em>.
      *
@@ -1554,7 +1554,7 @@
      * this method.
      * <p>
      * If you would like more information on focus, see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
      * How to Use the Focus Subsystem</a>,
      * a section in <em>The Java Tutorial</em>.
      *
@@ -2628,7 +2628,7 @@
     /**
      * In release 1.4, the focus subsystem was rearchitected.
      * For more information, see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html">
      * How to Use the Focus Subsystem</a>,
      * a section in <em>The Java Tutorial</em>.
      * <p>
@@ -3007,7 +3007,7 @@
      * Registers the text to display in a tool tip.
      * The text displays when the cursor lingers over the component.
      * <p>
-     * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/tooltip.html">How to Use Tool Tips</a>
+     * See <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/tooltip.html">How to Use Tool Tips</a>
      * in <em>The Java Tutorial</em>
      * for further documentation.
      *
@@ -3228,7 +3228,7 @@
      * default value for the system property is {@code false}.
      * <p>
      * Please see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html">
      * How to Use Drag and Drop and Data Transfer</a>,
      * a section in <em>The Java Tutorial</em>, for more information.
      *
--- a/src/java.desktop/share/classes/javax/swing/JDesktopPane.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JDesktopPane.java	Mon Dec 03 10:08:18 2018 +0100
@@ -62,7 +62,7 @@
  * (closing, resizing, etc).
  * <p>
  * For further documentation and examples see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/internalframe.html">How to Use Internal Frames</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/internalframe.html">How to Use Internal Frames</a>,
  * a section in <em>The Java Tutorial</em>.
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
--- a/src/java.desktop/share/classes/javax/swing/JDialog.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JDialog.java	Mon Dec 03 10:08:18 2018 +0100
@@ -37,7 +37,7 @@
  * For information about creating dialogs, see
  * <em>The Java Tutorial</em> section
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html">How
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html">How
  * to Make Dialogs</a>.
  *
  * <p>
@@ -788,7 +788,7 @@
      * are currently typed to {@code JComponent}.
      * <p>
      * Please see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html">
      * How to Use Drag and Drop and Data Transfer</a>, a section in
      * <em>The Java Tutorial</em>, for more information.
      *
--- a/src/java.desktop/share/classes/javax/swing/JEditorPane.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JEditorPane.java	Mon Dec 03 10:08:18 2018 +0100
@@ -42,7 +42,7 @@
 /**
  * A text component to edit various kinds of content.
  * You can find how-to information and examples of using editor panes in
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/text.html">Using Text Components</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/text.html">Using Text Components</a>,
  * a section in <em>The Java Tutorial.</em>
  *
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/JFileChooser.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JFileChooser.java	Mon Dec 03 10:08:18 2018 +0100
@@ -57,7 +57,7 @@
  * choose a file.
  * For information about using <code>JFileChooser</code>, see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html">How to Use File Choosers</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html">How to Use File Choosers</a>,
  * a section in <em>The Java Tutorial</em>.
  *
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/JFrame.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JFrame.java	Mon Dec 03 10:08:18 2018 +0100
@@ -50,7 +50,7 @@
  * You can find task-oriented documentation about using <code>JFrame</code>
  * in <em>The Java Tutorial</em>, in the section
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/frame.html">How to Make Frames</a>.
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/frame.html">How to Make Frames</a>.
  *
  * <p>
  * The <code>JFrame</code> class is slightly incompatible with <code>Frame</code>.
@@ -88,7 +88,7 @@
  * For more information on content panes
  * and other features that root panes provide,
  * see <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html">Using Top-Level Containers</a> in <em>The Java Tutorial</em>.
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html">Using Top-Level Containers</a> in <em>The Java Tutorial</em>.
  * <p>
  * In a multi-screen environment, you can create a <code>JFrame</code>
  * on a different screen device.  See {@link java.awt.Frame} for more
@@ -426,7 +426,7 @@
      * are currently typed to {@code JComponent}.
      * <p>
      * Please see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html">
      * How to Use Drag and Drop and Data Transfer</a>, a section in
      * <em>The Java Tutorial</em>, for more information.
      *
--- a/src/java.desktop/share/classes/javax/swing/JInternalFrame.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JInternalFrame.java	Mon Dec 03 10:08:18 2018 +0100
@@ -48,7 +48,7 @@
  * resizing, title display, and support for a menu bar.
  * For task-oriented documentation and examples of using internal frames,
  * see <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/internalframe.html" target="_top">How to Use Internal Frames</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/internalframe.html" target="_top">How to Use Internal Frames</a>,
  * a section in <em>The Java Tutorial</em>.
  *
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/JLabel.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JLabel.java	Mon Dec 03 10:08:18 2018 +0100
@@ -75,7 +75,7 @@
  * should appear between the text and the image.
  * The default is 4 pixels.
  * <p>
- * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/label.html">How to Use Labels</a>
+ * See <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/label.html">How to Use Labels</a>
  * in <em>The Java Tutorial</em>
  * for further documentation.
  * <p>
@@ -275,8 +275,7 @@
      * Returns a string that specifies the name of the l&amp;f class
      * that renders this component.
      *
-     * @return String "LabelUI"
-     *
+     * @return the string "LabelUI"
      * @see JComponent#getUIClassID
      * @see UIDefaults#getUI
      */
--- a/src/java.desktop/share/classes/javax/swing/JLayeredPane.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JLayeredPane.java	Mon Dec 03 10:08:18 2018 +0100
@@ -44,7 +44,7 @@
  * container, where higher-numbered components sit &quot;on top&quot; of other
  * components.
  * For task-oriented documentation and examples of using layered panes see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html">How to Use a Layered Pane</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html">How to Use a Layered Pane</a>,
  * a section in <em>The Java Tutorial</em>.
  *
  * <table class="borderless" style="float:right">
--- a/src/java.desktop/share/classes/javax/swing/JList.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JList.java	Mon Dec 03 10:08:18 2018 +0100
@@ -258,8 +258,8 @@
  * has been added to the <code>java.beans</code> package.
  * Please see {@link java.beans.XMLEncoder}.
  * <p>
- * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/list.html">How to Use Lists</a>
- * in <a href="http://docs.oracle.com/javase/tutorial/"><em>The Java Tutorial</em></a>
+ * See <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/list.html">How to Use Lists</a>
+ * in <a href="https://docs.oracle.com/javase/tutorial/"><em>The Java Tutorial</em></a>
  * for further documentation.
  *
  * @see ListModel
--- a/src/java.desktop/share/classes/javax/swing/JMenu.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JMenu.java	Mon Dec 03 10:08:18 2018 +0100
@@ -69,11 +69,11 @@
  * configuring a menu.  Refer to <a href="Action.html#buttonActions">
  * Swing Components Supporting <code>Action</code></a> for more
  * details, and you can find more information in <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
  * to Use Actions</a>, a section in <em>The Java Tutorial</em>.
  * <p>
  * For information and examples of using menus see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
--- a/src/java.desktop/share/classes/javax/swing/JMenuBar.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JMenuBar.java	Mon Dec 03 10:08:18 2018 +0100
@@ -52,7 +52,7 @@
  * <p>
  * For information and examples of using menu bars see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
--- a/src/java.desktop/share/classes/javax/swing/JMenuItem.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JMenuItem.java	Mon Dec 03 10:08:18 2018 +0100
@@ -51,12 +51,12 @@
  * configuring a menu item.  Refer to <a href="Action.html#buttonActions">
  * Swing Components Supporting <code>Action</code></a> for more
  * details, and you can find more information in <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
  * to Use Actions</a>, a section in <em>The Java Tutorial</em>.
  * <p>
  * For further documentation and for examples, see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>
  * in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
--- a/src/java.desktop/share/classes/javax/swing/JOptionPane.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JOptionPane.java	Mon Dec 03 10:08:18 2018 +0100
@@ -62,7 +62,7 @@
  * prompts users for a value or informs them of something.
  * For information about using <code>JOptionPane</code>, see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html">How to Make Dialogs</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html">How to Make Dialogs</a>,
  * a section in <em>The Java Tutorial</em>.
  *
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/JPanel.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JPanel.java	Mon Dec 03 10:08:18 2018 +0100
@@ -39,7 +39,7 @@
  * <code>JPanel</code> is a generic lightweight container.
  * For examples and task-oriented documentation for JPanel, see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/panel.html">How to Use Panels</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/panel.html">How to Use Panels</a>,
  * a section in <em>The Java Tutorial</em>.
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
@@ -154,7 +154,7 @@
      * Returns a string that specifies the name of the L&amp;F class
      * that renders this component.
      *
-     * @return "PanelUI"
+     * @return the string "PanelUI"
      * @see JComponent#getUIClassID
      * @see UIDefaults#getUI
      */
--- a/src/java.desktop/share/classes/javax/swing/JPasswordField.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JPasswordField.java	Mon Dec 03 10:08:18 2018 +0100
@@ -38,7 +38,7 @@
  * the editing of a single line of text where the view indicates
  * something was typed, but does not show the original characters.
  * You can find further information and examples in
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html">How to Use Text Fields</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html">How to Use Text Fields</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * <code>JPasswordField</code> is intended
--- a/src/java.desktop/share/classes/javax/swing/JPopupMenu.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JPopupMenu.java	Mon Dec 03 10:08:18 2018 +0100
@@ -54,7 +54,7 @@
  * <p>
  * For information and examples of using popup menus, see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>
  * in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
--- a/src/java.desktop/share/classes/javax/swing/JProgressBar.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JProgressBar.java	Mon Dec 03 10:08:18 2018 +0100
@@ -98,7 +98,7 @@
  * <p>
  *
  * For complete examples and further documentation see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html" target="_top">How to Monitor Progress</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/progress.html" target="_top">How to Monitor Progress</a>,
  * a section in <em>The Java Tutorial.</em>
  *
  * <p>
@@ -891,7 +891,7 @@
      * <p>
      *
      * See
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html" target="_top">How to Monitor Progress</a>
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/progress.html" target="_top">How to Monitor Progress</a>
      * for examples of using indeterminate progress bars.
      *
      * @param newValue  <code>true</code> if the progress bar
--- a/src/java.desktop/share/classes/javax/swing/JRadioButton.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JRadioButton.java	Mon Dec 03 10:08:18 2018 +0100
@@ -54,10 +54,10 @@
  * configuring a button.  Refer to <a href="Action.html#buttonActions">
  * Swing Components Supporting <code>Action</code></a> for more
  * details, and you can find more information in <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
  * to Use Actions</a>, a section in <em>The Java Tutorial</em>.
  * <p>
- * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/button.html">How to Use Buttons, Check Boxes, and Radio Buttons</a>
+ * See <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/button.html">How to Use Buttons, Check Boxes, and Radio Buttons</a>
  * in <em>The Java Tutorial</em>
  * for further documentation.
  * <p>
@@ -196,7 +196,7 @@
      * Returns the name of the L&amp;F class
      * that renders this component.
      *
-     * @return String "RadioButtonUI"
+     * @return the string "RadioButtonUI"
      * @see JComponent#getUIClassID
      * @see UIDefaults#getUI
      */
--- a/src/java.desktop/share/classes/javax/swing/JRadioButtonMenuItem.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JRadioButtonMenuItem.java	Mon Dec 03 10:08:18 2018 +0100
@@ -47,7 +47,7 @@
  * configuring a menu item.  Refer to <a href="Action.html#buttonActions">
  * Swing Components Supporting <code>Action</code></a> for more
  * details, and you can find more information in <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
  * to Use Actions</a>, a section in <em>The Java Tutorial</em>.
  * <p>
  * Some menus can have several button groups with radio button menu items. In
@@ -64,7 +64,7 @@
  * <p>
  * For further documentation and examples see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
--- a/src/java.desktop/share/classes/javax/swing/JRootPane.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JRootPane.java	Mon Dec 03 10:08:18 2018 +0100
@@ -44,7 +44,7 @@
  * <code>JFrame</code>, <code>JDialog</code>, <code>JWindow</code>,
  * <code>JApplet</code>, and <code>JInternalFrame</code>.
  * For task-oriented information on functionality provided by root panes
- * see <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html">How to Use Root Panes</a>,
+ * see <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html">How to Use Root Panes</a>,
  * a section in <em>The Java Tutorial</em>.
  *
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/JScrollBar.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JScrollBar.java	Mon Dec 03 10:08:18 2018 +0100
@@ -235,7 +235,7 @@
     /**
      * Returns the name of the LookAndFeel class for this component.
      *
-     * @return "ScrollBarUI"
+     * @return the string "ScrollBarUI"
      * @see JComponent#getUIClassID
      * @see UIDefaults#getUI
      */
--- a/src/java.desktop/share/classes/javax/swing/JScrollPane.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JScrollPane.java	Mon Dec 03 10:08:18 2018 +0100
@@ -51,7 +51,7 @@
  * vertical and horizontal scroll bars, and optional row and
  * column heading viewports.
  * You can find task-oriented documentation of <code>JScrollPane</code> in
- *  <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html">How to Use Scroll Panes</a>,
+ *  <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html">How to Use Scroll Panes</a>,
  * a section in <em>The Java Tutorial</em>.  Note that
  * <code>JScrollPane</code> does not support heavyweight components.
  *
--- a/src/java.desktop/share/classes/javax/swing/JSeparator.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JSeparator.java	Mon Dec 03 10:08:18 2018 +0100
@@ -46,7 +46,7 @@
  *
  * For more information and examples see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
--- a/src/java.desktop/share/classes/javax/swing/JSlider.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JSlider.java	Mon Dec 03 10:08:18 2018 +0100
@@ -56,7 +56,7 @@
  * <p>
  * For further information and examples see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/slider.html">How to Use Sliders</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/slider.html">How to Use Sliders</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
@@ -335,7 +335,7 @@
     /**
      * Returns the name of the L&amp;F class that renders this component.
      *
-     * @return "SliderUI"
+     * @return the string "SliderUI"
      * @see JComponent#getUIClassID
      * @see UIDefaults#getUI
      */
--- a/src/java.desktop/share/classes/javax/swing/JSpinner.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JSpinner.java	Mon Dec 03 10:08:18 2018 +0100
@@ -93,7 +93,7 @@
  * </pre>
  * <p>
  * For information and examples of using spinner see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/spinner.html">How to Use Spinners</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/spinner.html">How to Use Spinners</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
--- a/src/java.desktop/share/classes/javax/swing/JSplitPane.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JSplitPane.java	Mon Dec 03 10:08:18 2018 +0100
@@ -44,7 +44,7 @@
  * interactively resized by the user.
  * Information on using <code>JSplitPane</code> is in
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/splitpane.html">How to Use Split Panes</a> in
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/splitpane.html">How to Use Split Panes</a> in
  * <em>The Java Tutorial</em>.
  * <p>
  * The two <code>Component</code>s in a split pane can be aligned
--- a/src/java.desktop/share/classes/javax/swing/JTabbedPane.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JTabbedPane.java	Mon Dec 03 10:08:18 2018 +0100
@@ -45,7 +45,7 @@
  * A component that lets the user switch between a group of components by
  * clicking on a tab with a given title and/or icon.
  * For examples and information on using tabbed panes see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html">How to Use Tabbed Panes</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html">How to Use Tabbed Panes</a>,
  * a section in <em>The Java Tutorial</em>.
  * <p>
  * Tabs/components are added to a <code>TabbedPane</code> object by using the
--- a/src/java.desktop/share/classes/javax/swing/JTable.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JTable.java	Mon Dec 03 10:08:18 2018 +0100
@@ -68,7 +68,7 @@
 /**
  * The <code>JTable</code> is used to display and edit regular two-dimensional tables
  * of cells.
- * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/table.html">How to Use Tables</a>
+ * See <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/table.html">How to Use Tables</a>
  * in <em>The Java Tutorial</em>
  * for task-oriented documentation and examples of using <code>JTable</code>.
  *
@@ -2477,7 +2477,7 @@
      * The default value of this property is defined by the look
      * and feel implementation.
      * <p>
-     * This is a <a href="http://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html">JavaBeans</a> bound property.
+     * This is a <a href="https://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html">JavaBeans</a> bound property.
      *
      * @param selectionForeground  the <code>Color</code> to use in the foreground
      *                             for selected list items
@@ -2514,7 +2514,7 @@
      * The default value of this property is defined by the look
      * and feel implementation.
      * <p>
-     * This is a <a href="http://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html">JavaBeans</a> bound property.
+     * This is a <a href="https://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html">JavaBeans</a> bound property.
      *
      * @param selectionBackground  the <code>Color</code> to use for the background
      *                             of selected cells
--- a/src/java.desktop/share/classes/javax/swing/JTextArea.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JTextArea.java	Mon Dec 03 10:08:18 2018 +0100
@@ -39,7 +39,7 @@
  * compatibility with the <code>java.awt.TextArea</code> class where it can
  * reasonably do so.
  * You can find information and examples of using all the text components in
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/text.html">Using Text Components</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/text.html">Using Text Components</a>,
  * a section in <em>The Java Tutorial.</em>
  *
  * <p>
@@ -226,7 +226,7 @@
     /**
      * Returns the class ID for the UI.
      *
-     * @return the ID ("TextAreaUI")
+     * @return the string "TextAreaUI"
      * @see JComponent#getUIClassID
      * @see UIDefaults#getUI
      */
--- a/src/java.desktop/share/classes/javax/swing/JTextField.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JTextField.java	Mon Dec 03 10:08:18 2018 +0100
@@ -43,7 +43,7 @@
  * of a single line of text.
  * For information on and examples of using text fields,
  * see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html">How to Use Text Fields</a>
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html">How to Use Text Fields</a>
  * in <em>The Java Tutorial.</em>
  *
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/JTextPane.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JTextPane.java	Mon Dec 03 10:08:18 2018 +0100
@@ -36,7 +36,7 @@
  * A text component that can be marked up with attributes that are
  * represented graphically.
  * You can find how-to information and examples of using text panes in
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/text.html">Using Text Components</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/text.html">Using Text Components</a>,
  * a section in <em>The Java Tutorial.</em>
  *
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/JToggleButton.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JToggleButton.java	Mon Dec 03 10:08:18 2018 +0100
@@ -42,7 +42,7 @@
  * are subclasses of this class.
  * For information on using them see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/button.html">How to Use Buttons, Check Boxes, and Radio Buttons</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/button.html">How to Use Buttons, Check Boxes, and Radio Buttons</a>,
  * a section in <em>The Java Tutorial</em>.
  * <p>
  * Buttons can be configured, and to some degree controlled, by
@@ -51,7 +51,7 @@
  * configuring a button.  Refer to <a href="Action.html#buttonActions">
  * Swing Components Supporting <code>Action</code></a> for more
  * details, and you can find more information in <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
  * to Use Actions</a>, a section in <em>The Java Tutorial</em>.
  * <p>
  * <strong>Warning:</strong> Swing is not thread safe. For more
@@ -190,7 +190,7 @@
      * Returns a string that specifies the name of the l&amp;f class
      * that renders this component.
      *
-     * @return String "ToggleButtonUI"
+     * @return the string "ToggleButtonUI"
      * @see JComponent#getUIClassID
      * @see UIDefaults#getUI
      */
--- a/src/java.desktop/share/classes/javax/swing/JToolBar.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JToolBar.java	Mon Dec 03 10:08:18 2018 +0100
@@ -47,7 +47,7 @@
  * <code>JToolBar</code> provides a component that is useful for
  * displaying commonly used <code>Action</code>s or controls.
  * For examples and information on using tool bars see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/toolbar.html">How to Use Tool Bars</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/toolbar.html">How to Use Tool Bars</a>,
  * a section in <em>The Java Tutorial</em>.
  *
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/JToolTip.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JToolTip.java	Mon Dec 03 10:08:18 2018 +0100
@@ -46,7 +46,7 @@
  * display can override <code>JComponent</code>'s <code>createToolTip</code>
  * method and use a subclass of this class.
  * <p>
- * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/tooltip.html">How to Use Tool Tips</a>
+ * See <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/tooltip.html">How to Use Tool Tips</a>
  * in <em>The Java Tutorial</em>
  * for further documentation.
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/JTree.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JTree.java	Mon Dec 03 10:08:18 2018 +0100
@@ -48,7 +48,7 @@
 /**
  * A control that displays a set of hierarchical data as an outline.
  * You can find task-oriented documentation and examples of using trees in
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * A specific node in a tree can be identified either by a
--- a/src/java.desktop/share/classes/javax/swing/JWindow.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/JWindow.java	Mon Dec 03 10:08:18 2018 +0100
@@ -313,7 +313,7 @@
      * are currently typed to {@code JComponent}.
      * <p>
      * Please see
-     * <a href="http://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html">
+     * <a href="https://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html">
      * How to Use Drag and Drop and Data Transfer</a>, a section in
      * <em>The Java Tutorial</em>, for more information.
      *
--- a/src/java.desktop/share/classes/javax/swing/ProgressMonitor.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/ProgressMonitor.java	Mon Dec 03 10:08:18 2018 +0100
@@ -71,7 +71,7 @@
  *
  * For further documentation and examples see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html">How to Monitor Progress</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/progress.html">How to Monitor Progress</a>,
  * a section in <em>The Java Tutorial.</em>
  *
  * @see ProgressMonitorInputStream
--- a/src/java.desktop/share/classes/javax/swing/ProgressMonitorInputStream.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/ProgressMonitorInputStream.java	Mon Dec 03 10:08:18 2018 +0100
@@ -54,7 +54,7 @@
  * <p>
  *
  * For further documentation and examples see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html">How to Monitor Progress</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/progress.html">How to Monitor Progress</a>,
  * a section in <em>The Java Tutorial.</em>
  *
  * @see ProgressMonitor
--- a/src/java.desktop/share/classes/javax/swing/Spring.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/Spring.java	Mon Dec 03 10:08:18 2018 +0100
@@ -109,7 +109,7 @@
  * If you are implementing a <code>SpringLayout</code> you
  * can find further information and examples in
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html">How to Use SpringLayout</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html">How to Use SpringLayout</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong>
--- a/src/java.desktop/share/classes/javax/swing/SpringLayout.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/SpringLayout.java	Mon Dec 03 10:08:18 2018 +0100
@@ -36,7 +36,7 @@
 /**
  * A <code>SpringLayout</code> lays out the children of its associated container
  * according to a set of constraints.
- * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html">How to Use SpringLayout</a>
+ * See <a href="https://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html">How to Use SpringLayout</a>
  * in <em>The Java Tutorial</em> for examples of using
  * <code>SpringLayout</code>.
  *
--- a/src/java.desktop/share/classes/javax/swing/SwingUtilities.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/SwingUtilities.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1408,7 +1408,7 @@
      * <p>
      * Additional documentation and examples for this method can be
      * found in
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency in Swing</a>.
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency in Swing</a>.
      * <p>
      * As of 1.3 this method is just a cover for <code>java.awt.EventQueue.invokeLater()</code>.
      * <p>
@@ -1460,7 +1460,7 @@
      * <p>
      * Additional documentation and examples for this method can be
      * found in
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency in Swing</a>.
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency in Swing</a>.
      * <p>
      * As of 1.3 this method is just a cover for
      * <code>java.awt.EventQueue.invokeAndWait()</code>.
--- a/src/java.desktop/share/classes/javax/swing/SwingWorker.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/SwingWorker.java	Mon Dec 03 10:08:18 2018 +0100
@@ -59,7 +59,7 @@
  * When writing a multi-threaded application using Swing, there are
  * two constraints to keep in mind:
  * (refer to
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">
  *   Concurrency in Swing
  * </a> for more details):
  * <ul>
--- a/src/java.desktop/share/classes/javax/swing/Timer.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/Timer.java	Mon Dec 03 10:08:18 2018 +0100
@@ -121,7 +121,7 @@
  * <p>
  * You can find further documentation
  * and several examples of using timers by visiting
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html"
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html"
  * target = "_top">How to Use Timers</a>,
  * a section in <em>The Java Tutorial.</em>
  * For more examples and help in choosing between
--- a/src/java.desktop/share/classes/javax/swing/TransferHandler.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/TransferHandler.java	Mon Dec 03 10:08:18 2018 +0100
@@ -75,7 +75,7 @@
  * of the transfer, and <code>setForeground</code> for the target of a transfer.
  * <p>
  * Please see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html">
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html">
  * How to Use Drag and Drop and Data Transfer</a>,
  * a section in <em>The Java Tutorial</em>, for more information.
  *
--- a/src/java.desktop/share/classes/javax/swing/WindowConstants.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/WindowConstants.java	Mon Dec 03 10:08:18 2018 +0100
@@ -36,7 +36,7 @@
  * use these constants.
  * For examples of setting the default window-closing operation, see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/frame.html#windowevents">Responding to Window-Closing Events</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/frame.html#windowevents">Responding to Window-Closing Events</a>,
  * a section in <em>The Java Tutorial</em>.
  * @see JFrame#setDefaultCloseOperation(int)
  * @see JDialog#setDefaultCloseOperation(int)
--- a/src/java.desktop/share/classes/javax/swing/border/Border.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/border/Border.java	Mon Dec 03 10:08:18 2018 +0100
@@ -33,7 +33,7 @@
  * Interface describing an object capable of rendering a border
  * around the edges of a swing component.
  * For examples of using borders see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/border.html">How to Use Borders</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/border.html">How to Use Borders</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * In the Swing component set, borders supercede Insets as the
--- a/src/java.desktop/share/classes/javax/swing/border/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/border/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,17 +32,17 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * <h2>Related Documentation</h2>
  * For overviews, tutorials, examples, guides, and tool documentation,
  * please see:
  * <ul>
- *     <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/components/border.html"
+ *     <li><a href="https://docs.oracle.com/javase/tutorial/uiswing/components/border.html"
  *     target="_top">How to Use Borders</a>,
  *     a section in <em>The Java Tutorial</em></li>
  * </ul>
--- a/src/java.desktop/share/classes/javax/swing/colorchooser/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/colorchooser/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,17 +29,17 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * <h2>Related Documentation </h2>
  * This document forms the complete API specification. For overviews, tutorials,
  * examples, guides, and tool documentation, please see:
  * <ul>
- *     <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html"
+ *     <li><a href="https://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html"
  *     target="_top">How to Use Color Choosers</a>,
  *     a section in <em>The Java Tutorial</em></li>
  *     <li>{@extLink i18n_overview Internationalization Overview}</li>
--- a/src/java.desktop/share/classes/javax/swing/event/InternalFrameAdapter.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/event/InternalFrameAdapter.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  * convenience for creating listener objects, and is functionally
  * equivalent to the WindowAdapter class in the AWT.
  * <p>
- * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/internalframelistener.html">How to Write an Internal Frame Listener</a>
+ * See <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/internalframelistener.html">How to Write an Internal Frame Listener</a>
  * in <em>The Java Tutorial</em>
  *
  * @see InternalFrameEvent
--- a/src/java.desktop/share/classes/javax/swing/event/InternalFrameEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/event/InternalFrameEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,7 +34,7 @@
  * although different IDs are used.
  * Help on handling internal frame events
  * is in
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/internalframelistener.html" target="_top">How to Write an Internal Frame Listener</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/internalframelistener.html" target="_top">How to Write an Internal Frame Listener</a>,
  * a section in <em>The Java Tutorial</em>.
  * <p>
  * <strong>Warning:</strong>
--- a/src/java.desktop/share/classes/javax/swing/event/InternalFrameListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/event/InternalFrameListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  * This class is functionally equivalent to the WindowListener class
  * in the AWT.
  * <p>
- * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/internalframelistener.html">How to Write an Internal Frame Listener</a>
+ * See <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/internalframelistener.html">How to Write an Internal Frame Listener</a>
  * in <em>The Java Tutorial</em> for further documentation.
  *
  * @see java.awt.event.WindowListener
--- a/src/java.desktop/share/classes/javax/swing/event/TreeExpansionEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/event/TreeExpansionEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,8 +34,8 @@
  * <p>
  * For further documentation and examples see
  * the following sections in <em>The Java Tutorial</em>:
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/treeexpansionlistener.html">How to Write a Tree Expansion Listener</a> and
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/treewillexpandlistener.html">How to Write a Tree-Will-Expand Listener</a>.
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/treeexpansionlistener.html">How to Write a Tree Expansion Listener</a> and
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/treewillexpandlistener.html">How to Write a Tree-Will-Expand Listener</a>.
  * <p>
  * <strong>Warning:</strong>
  * Serialized objects of this class will not be compatible with
--- a/src/java.desktop/share/classes/javax/swing/event/TreeExpansionListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/event/TreeExpansionListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
   * a node.
   * For further documentation and examples see
   * <a
-  href="http://docs.oracle.com/javase/tutorial/uiswing/events/treeexpansionlistener.html">How to Write a Tree Expansion Listener</a>,
+  href="https://docs.oracle.com/javase/tutorial/uiswing/events/treeexpansionlistener.html">How to Write a Tree Expansion Listener</a>,
   * a section in <em>The Java Tutorial.</em>
   *
   * @author Scott Violet
--- a/src/java.desktop/share/classes/javax/swing/event/TreeModelEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/event/TreeModelEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,7 +34,7 @@
  * used to notify tree model listeners of the change.
  * For more information and examples see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/events/treemodellistener.html">How to Write a Tree Model Listener</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/events/treemodellistener.html">How to Write a Tree Model Listener</a>,
  * a section in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong>
--- a/src/java.desktop/share/classes/javax/swing/event/TreeModelListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/event/TreeModelListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  * to changes in a TreeModel.
  * For further information and examples see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/events/treemodellistener.html">How to Write a Tree Model Listener</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/events/treemodellistener.html">How to Write a Tree Model Listener</a>,
  * a section in <em>The Java Tutorial.</em>
  *
  * @author Rob Davis
--- a/src/java.desktop/share/classes/javax/swing/event/TreeSelectionListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/event/TreeSelectionListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  * changes.
  * For more information and examples see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/events/treeselectionlistener.html">How to Write a Tree Selection Listener</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/events/treeselectionlistener.html">How to Write a Tree Selection Listener</a>,
  * a section in <em>The Java Tutorial.</em>
  *
  * @see javax.swing.tree.TreeSelectionModel
--- a/src/java.desktop/share/classes/javax/swing/event/TreeWillExpandListener.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/event/TreeWillExpandListener.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
   * The listener that's notified when a tree expands or collapses
   * a node.
   * For further information and examples see
-  * <a href="http://docs.oracle.com/javase/tutorial/uiswing/events/treewillexpandlistener.html">How to Write a Tree-Will-Expand Listener</a>,
+  * <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/treewillexpandlistener.html">How to Write a Tree-Will-Expand Listener</a>,
   * a section in <em>The Java Tutorial.</em>
   *
   * @author Scott Violet
--- a/src/java.desktop/share/classes/javax/swing/event/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/event/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,17 +31,17 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * <h2>Related Documentation</h2>
  * For overviews, tutorials, examples, guides, and tool documentation,
  * please see:
  * <ul>
- *     <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/events/index.html"
+ *     <li><a href="https://docs.oracle.com/javase/tutorial/uiswing/events/index.html"
  *     target="_top">Writing Event Listeners</a>,
  *     a section in <em>The Java Tutorial</em></li>
  * </ul>
--- a/src/java.desktop/share/classes/javax/swing/filechooser/FileFilter.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/filechooser/FileFilter.java	Mon Dec 03 10:08:18 2018 +0100
@@ -39,7 +39,7 @@
  * For an example implementation of a simple file filter, see
  * <code><i>yourJDK</i>/demo/jfc/FileChooserDemo/ExampleFileFilter.java</code>.
  * For more information and examples see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html">How to Use File Choosers</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html">How to Use File Choosers</a>,
  * a section in <em>The Java Tutorial</em>.
  *
  * @see FileNameExtensionFilter
--- a/src/java.desktop/share/classes/javax/swing/filechooser/FileView.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/filechooser/FileView.java	Mon Dec 03 10:08:18 2018 +0100
@@ -57,7 +57,7 @@
  * <code><i>yourJDK</i>/demo/jfc/FileChooserDemo/ExampleFileView.java</code>.
  * For more information and examples see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html">How to Use File Choosers</a>,
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html">How to Use File Choosers</a>,
  * a section in <em>The Java Tutorial</em>.
  *
  * @see javax.swing.JFileChooser
--- a/src/java.desktop/share/classes/javax/swing/filechooser/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/filechooser/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,17 +29,17 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * <h2>Related Documentation </h2>
  * This document forms the complete API specification. For overviews, tutorials,
  * examples, guides, and tool documentation, please see:
  * <ul>
- *     <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html"
+ *     <li><a href="https://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html"
  *     target="_top">How to Use File Choosers</a>,
  *     a section in <em>The Java Tutorial</em></li>
  *     <li>{@extLink i18n_overview Internationalization Overview}</li>
--- a/src/java.desktop/share/classes/javax/swing/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -27,7 +27,7 @@
  * Provides a set of &quot;lightweight&quot; (all-Java language) components
  * that, to the maximum degree possible, work the same on all platforms. For a
  * programmer's guide to using these components, see
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/index.html"
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/index.html"
  * target="_top">Creating a GUI with JFC/Swing</a>, a trail in
  * <em>The Java Tutorial</em>. For other resources, see
  * <a href="#related">Related Documentation</a>.
@@ -121,10 +121,10 @@
  * when working with Swing.
  * <p>
  * More information on this topic can be found in the
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/">Swing tutorial</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/">Swing tutorial</a>,
  * in particular the section on
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">
  * Concurrency in Swing</a>.
  *
  * <h2><a id="related">Related Documentation</a></h2>
@@ -133,7 +133,7 @@
  * <ul>
  *     <li><a href="http://www.oracle.com/technetwork/java/javase/tech/articles-jsp-139072.html"
  *     target="_top">The Swing Connection</a></li>
- *     <li><a href="http://docs.oracle.com/javase/tutorial/"
+ *     <li><a href="https://docs.oracle.com/javase/tutorial/"
  *     target="_top">The Java Tutorial</a></li>
  *     <li><a href="http://www.oracle.com/technetwork/java/javase/training/index.html"
  *     target="_top">Online Training</a>
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java	Mon Dec 03 10:08:18 2018 +0100
@@ -55,7 +55,7 @@
  * <p>
  * For adding specific actions,
  * overide <code>installKeyboardActions</code> to add actions in response to
- * KeyStroke bindings. See the article <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html">How to Use Key Bindings</a>
+ * KeyStroke bindings. See the article <a href="https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html">How to Use Key Bindings</a>
  *
  * @author Arnaud Weber
  * @author Tom Santos
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -43,10 +43,10 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * @since 1.2
--- a/src/java.desktop/share/classes/javax/swing/plaf/metal/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/metal/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -40,10 +40,10 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * @since 1.2
--- a/src/java.desktop/share/classes/javax/swing/plaf/multi/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/multi/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -40,10 +40,10 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * @since 1.2
--- a/src/java.desktop/share/classes/javax/swing/plaf/nimbus/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/nimbus/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -81,10 +81,10 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * @since 1.7
--- a/src/java.desktop/share/classes/javax/swing/plaf/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -35,10 +35,10 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * @since 1.2
--- a/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthButtonUI.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthButtonUI.java	Mon Dec 03 10:08:18 2018 +0100
@@ -55,14 +55,7 @@
      * @return the UI object
      */
     public static ComponentUI createUI(JComponent c) {
-        AppContext appContext = AppContext.getAppContext();
-        SynthButtonUI synthButtonUI =
-                (SynthButtonUI) appContext.get(SYNTH_BUTTON_UI_KEY);
-        if (synthButtonUI == null) {
-            synthButtonUI = new SynthButtonUI();
-            appContext.put(SYNTH_BUTTON_UI_KEY, synthButtonUI);
-        }
-        return synthButtonUI;
+        return new SynthButtonUI();
     }
 
     /**
@@ -216,9 +209,15 @@
 
         // layout the text and icon
         SynthContext context = getContext(b);
+        SynthStyle style;
+        if (context.getStyle() != null) {
+            style = context.getStyle();
+        } else {
+            style = SynthLookAndFeel.updateStyle(context, this);
+        }
         FontMetrics fm = context.getComponent().getFontMetrics(
-                               context.getStyle().getFont(context));
-        context.getStyle().getGraphicsUtils(context).layoutText(
+                               style.getFont(context));
+        style.getGraphicsUtils(context).layoutText(
             context, fm, b.getText(), b.getIcon(),
             b.getHorizontalAlignment(), b.getVerticalAlignment(),
             b.getHorizontalTextPosition(), b.getVerticalTextPosition(),
--- a/src/java.desktop/share/classes/javax/swing/table/JTableHeader.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/table/JTableHeader.java	Mon Dec 03 10:08:18 2018 +0100
@@ -506,9 +506,8 @@
     /**
      * Returns the suffix used to construct the name of the look and feel
      * (L&amp;F) class used to render this component.
+     *
      * @return the string "TableHeaderUI"
-     *
-     * @return "TableHeaderUI"
      * @see JComponent#getUIClassID
      * @see UIDefaults#getUI
      */
--- a/src/java.desktop/share/classes/javax/swing/table/TableModel.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/table/TableModel.java	Mon Dec 03 10:08:18 2018 +0100
@@ -40,7 +40,7 @@
  *      JTable table = new JTable(myData);
  *  </pre><p>
  *
- * For further documentation, see <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#data">Creating a Table Model</a>
+ * For further documentation, see <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#data">Creating a Table Model</a>
  * in <em>The Java Tutorial</em>.
  *
  * @author Philip Milne
--- a/src/java.desktop/share/classes/javax/swing/table/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/table/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,17 +34,17 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * <h2>Related Documentation</h2>
  * For overviews, tutorials, examples, guides, and tool documentation,
  * please see:
  * <ul>
- *     <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/components/table.html"
+ *     <li><a href="https://docs.oracle.com/javase/tutorial/uiswing/components/table.html"
  *     target="_top">How to Use Tables</a>,
  *     a section in <em>The Java Tutorial</em></li>
  * </ul>
--- a/src/java.desktop/share/classes/javax/swing/text/AbstractDocument.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/AbstractDocument.java	Mon Dec 03 10:08:18 2018 +0100
@@ -414,7 +414,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param r the renderer to execute
@@ -575,7 +575,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param offs the starting offset &gt;= 0
@@ -688,7 +688,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param offs the starting offset &gt;= 0
@@ -825,7 +825,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param offs the position in the model &gt;= 0
--- a/src/java.desktop/share/classes/javax/swing/text/CompositeView.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/CompositeView.java	Mon Dec 03 10:08:18 2018 +0100
@@ -718,8 +718,6 @@
      * @exception BadLocationException for a bad location within a document model
      * @exception IllegalArgumentException if <code>direction</code> is invalid
      * @see #getNextVisualPositionFrom
-     *
-     * @return the next position west of the passed in position
      */
     protected int getNextNorthSouthVisualPositionFrom(int pos, Position.Bias b,
                                                       Shape a, int direction,
--- a/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java	Mon Dec 03 10:08:18 2018 +0100
@@ -238,7 +238,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      */
     protected final synchronized void repaint() {
--- a/src/java.desktop/share/classes/javax/swing/text/DefaultEditorKit.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/DefaultEditorKit.java	Mon Dec 03 10:08:18 2018 +0100
@@ -878,11 +878,10 @@
                         isPrintableMask = ((SunToolkit)tk).isPrintableCharacterModifiersMask(mod);
                     }
 
-                    if (isPrintableMask) {
-                        char c = content.charAt(0);
-                        if ((c >= 0x20) && (c != 0x7F)) {
-                            target.replaceSelection(content);
-                        }
+                    char c = content.charAt(0);
+                    if ((isPrintableMask && (c >= 0x20) && (c != 0x7F)) ||
+                        (!isPrintableMask && (c >= 0x200C) && (c <= 0x200D))) {
+                        target.replaceSelection(content);
                     }
                 }
             }
--- a/src/java.desktop/share/classes/javax/swing/text/DefaultStyledDocument.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/DefaultStyledDocument.java	Mon Dec 03 10:08:18 2018 +0100
@@ -176,7 +176,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param offset the starting offset &gt;= 0
@@ -429,7 +429,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param pos the offset from the start of the document &gt;= 0
@@ -486,7 +486,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param offset the offset in the document &gt;= 0
@@ -539,7 +539,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param offset the offset into the paragraph &gt;= 0
--- a/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -86,7 +86,7 @@
  * support).
  * You can find information on how to use the functionality
  * this class provides in
- * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html">General Rules for Using Text Components</a>,
+ * <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html">General Rules for Using Text Components</a>,
  * a section in <em>The Java Tutorial.</em>
  *
  * <dl>
@@ -2228,7 +2228,7 @@
      * <p>
      * This method is thread-safe, although most Swing methods are not. Please
      * see <A
-     * HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">
+     * HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">
      * Concurrency in Swing</A> for more information.
      *
      * <p>
@@ -2487,7 +2487,7 @@
      * <p>
      * This method is thread-safe, although most Swing methods are not. Please
      * see <A
-     * HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">
+     * HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">
      * Concurrency in Swing</A> for more information.
      *
      * <p>
--- a/src/java.desktop/share/classes/javax/swing/text/LabelView.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/LabelView.java	Mon Dec 03 10:08:18 2018 +0100
@@ -253,7 +253,6 @@
 
     /**
      * Determines if the glyphs should be rendered as superscript.
-     * @return the value of the cached subscript property
      *
      * <p>When you request this property, <code>LabelView</code>
      * re-syncs its state with the properties of the
--- a/src/java.desktop/share/classes/javax/swing/text/PlainDocument.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/PlainDocument.java	Mon Dec 03 10:08:18 2018 +0100
@@ -101,7 +101,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param offs the starting offset &gt;= 0
--- a/src/java.desktop/share/classes/javax/swing/text/StyleContext.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/StyleContext.java	Mon Dec 03 10:08:18 2018 +0100
@@ -294,7 +294,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param old the old attribute set
@@ -323,7 +323,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param old the old attribute set
@@ -351,7 +351,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param old the old set of attributes
@@ -379,7 +379,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param old the old attribute set
@@ -407,7 +407,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param old the old attribute set
@@ -447,7 +447,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param a the set to reclaim
--- a/src/java.desktop/share/classes/javax/swing/text/html/HTMLDocument.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/html/HTMLDocument.java	Mon Dec 03 10:08:18 2018 +0100
@@ -477,7 +477,7 @@
      * <p>
      * This method is thread safe, although most Swing methods
      * are not. Please see
-     * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+     * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
      * in Swing</A> for more information.
      *
      * @param offset the offset into the paragraph (must be at least 0)
--- a/src/java.desktop/share/classes/javax/swing/text/html/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/html/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,10 +30,10 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * <h2>Package Specification</h2>
--- a/src/java.desktop/share/classes/javax/swing/text/html/parser/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/html/parser/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,10 +31,10 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * @see javax.swing.text.html.HTMLEditorKit.ParserCallback
--- a/src/java.desktop/share/classes/javax/swing/text/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -33,17 +33,17 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * <h2>Related Documentation</h2>
  * For overviews, tutorials, examples, guides, and tool documentation,
  * please see:
  * <ul>
- *     <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/components/text.html"
+ *     <li><a href="https://docs.oracle.com/javase/tutorial/uiswing/components/text.html"
  *     target="_top">Using Text Components</a>,
  *     a section in <em>The Java Tutorial</em></li>
  * </ul>
--- a/src/java.desktop/share/classes/javax/swing/text/rtf/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/text/rtf/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,10 +30,10 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * @since 1.2
--- a/src/java.desktop/share/classes/javax/swing/tree/DefaultMutableTreeNode.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/tree/DefaultMutableTreeNode.java	Mon Dec 03 10:08:18 2018 +0100
@@ -36,7 +36,7 @@
  * structure.
  * For examples of using default mutable tree nodes, see
  * <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
  * in <em>The Java Tutorial.</em>
  *
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java	Mon Dec 03 10:08:18 2018 +0100
@@ -50,7 +50,7 @@
  * <code>DefaultTreeCellRenderer</code> is not opaque and
  * unless you subclass paint you should not change this.
  * See <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
  * in <em>The Java Tutorial</em>
  * for examples of customizing node display using this class.
  * <p>
--- a/src/java.desktop/share/classes/javax/swing/tree/DefaultTreeModel.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/tree/DefaultTreeModel.java	Mon Dec 03 10:08:18 2018 +0100
@@ -33,7 +33,7 @@
 /**
  * A simple tree data model that uses TreeNodes.
  * For further information and examples that use DefaultTreeModel,
- * see <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
+ * see <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
  * in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong>
--- a/src/java.desktop/share/classes/javax/swing/tree/ExpandVetoException.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/tree/ExpandVetoException.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
 /**
  * Exception used to stop an expand/collapse from happening.
  * See <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/events/treewillexpandlistener.html">How to Write a Tree-Will-Expand Listener</a>
+ href="https://docs.oracle.com/javase/tutorial/uiswing/events/treewillexpandlistener.html">How to Write a Tree-Will-Expand Listener</a>
  * in <em>The Java Tutorial</em>
  * for further information and examples.
  *
--- a/src/java.desktop/share/classes/javax/swing/tree/TreeCellRenderer.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/tree/TreeCellRenderer.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
 /**
  * Defines the requirements for an object that displays a tree node.
  * See <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
  * in <em>The Java Tutorial</em>
  * for an example of implementing a tree cell renderer
  * that displays custom icons.
--- a/src/java.desktop/share/classes/javax/swing/tree/TreeModel.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/tree/TreeModel.java	Mon Dec 03 10:08:18 2018 +0100
@@ -50,7 +50,7 @@
  * For further information on tree models,
  * including an example of a custom implementation,
  * see <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
  * in <em>The Java Tutorial.</em>
  *
  * @see TreePath
--- a/src/java.desktop/share/classes/javax/swing/tree/TreeNode.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/tree/TreeNode.java	Mon Dec 03 10:08:18 2018 +0100
@@ -37,7 +37,7 @@
  *
  * For further information and examples of using tree nodes,
  * see <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Tree Nodes</a>
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Tree Nodes</a>
  * in <em>The Java Tutorial.</em>
  *
  * @author Rob Davis
--- a/src/java.desktop/share/classes/javax/swing/tree/TreePath.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/tree/TreePath.java	Mon Dec 03 10:08:18 2018 +0100
@@ -66,7 +66,7 @@
  * <p>
  * For further information and examples of using tree paths,
  * see <a
- href="http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
+ href="https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
  * in <em>The Java Tutorial.</em>
  * <p>
  * <strong>Warning:</strong>
--- a/src/java.desktop/share/classes/javax/swing/tree/TreeSelectionModel.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/tree/TreeSelectionModel.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
   * This interface represents the current state of the selection for
   * the tree component.
   * For information and examples of using tree selection models,
-  * see <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
+  * see <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a>
   * in <em>The Java Tutorial.</em>
   *
   * <p>
--- a/src/java.desktop/share/classes/javax/swing/tree/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/tree/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,17 +32,17 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * <h2>Related Documentation</h2>
  * For overviews, tutorials, examples, guides, and tool documentation,
  * please see:
  * <ul>
- *     <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html"
+ *     <li><a href="https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html"
  *     target="_top">How to Use Trees</a>,
  *     a section in <em>The Java Tutorial</em></li>
  * </ul>
--- a/src/java.desktop/share/classes/javax/swing/undo/package-info.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/undo/package-info.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,17 +30,17 @@
  * <strong>Note:</strong>
  * Most of the Swing API is <em>not</em> thread safe. For details, see
  * <a
- * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
+ * href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html"
  * target="_top">Concurrency in Swing</a>,
  * a section in
- * <em><a href="http://docs.oracle.com/javase/tutorial/"
+ * <em><a href="https://docs.oracle.com/javase/tutorial/"
  * target="_top">The Java Tutorial</a></em>.
  *
  * <h2>Related Documentation</h2>
  * For overviews, tutorials, examples, guides, and tool documentation,
  * please see:
  * <ul>
- *     <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#undo"
+ *     <li><a href="https://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#undo"
  *     target="_top">Implementing Undo and Redo</a>,
  *     a section in <em>The Java Tutorial</em></li>
  * </ul>
--- a/src/java.desktop/share/classes/sun/swing/PrintingStatus.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/share/classes/sun/swing/PrintingStatus.java	Mon Dec 03 10:08:18 2018 +0100
@@ -43,7 +43,7 @@
  * <p>
  * Methods of these class are thread safe, although most Swing methods
  * are not. Please see
- * <A HREF="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
+ * <A HREF="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
  * in Swing</A> for more information.
  *
  * @author Alexander Potochkin
--- a/src/java.desktop/unix/classes/sun/awt/X11/XDragSourceContextPeer.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/unix/classes/sun/awt/X11/XDragSourceContextPeer.java	Mon Dec 03 10:08:18 2018 +0100
@@ -653,7 +653,7 @@
                     xmotion.set_y(xkey.get_y());
                     xmotion.set_x_root(xkey.get_x_root());
                     xmotion.set_y_root(xkey.get_y_root());
-                    xmotion.set_state((int)Native.getLong(XlibWrapper.larg7));
+                    xmotion.set_state(Native.getInt(XlibWrapper.larg7));
                     // we do not use this field, so it's unset for now
                     // xmotion.set_is_hint(???);
                     xmotion.set_same_screen(xkey.get_same_screen());
--- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c	Mon Dec 03 10:08:18 2018 +0100
@@ -34,7 +34,7 @@
 #ifndef HEADLESS
 #include <X11/extensions/Xdbe.h>
 #include <X11/XKBlib.h>
-#ifndef _AIX
+#ifndef NO_XRANDR
 #include <X11/extensions/Xrandr.h>
 #endif
 #include "GLXGraphicsConfig.h"
@@ -1627,7 +1627,7 @@
 
 #ifndef HEADLESS
 
-#ifndef _AIX
+#ifndef NO_XRANDR
 
 #define BIT_DEPTH_MULTI java_awt_DisplayMode_BIT_DEPTH_MULTI
 #define REFRESH_RATE_UNKNOWN java_awt_DisplayMode_REFRESH_RATE_UNKNOWN
@@ -1834,7 +1834,7 @@
     }
 }
 
-#endif /* !_AIX */
+#endif /* !NO_XRANDR */
 
 static void
 X11GD_SetFullscreenMode(Window win, jboolean enabled)
@@ -1875,7 +1875,7 @@
 Java_sun_awt_X11GraphicsDevice_initXrandrExtension
     (JNIEnv *env, jclass x11gd)
 {
-#if defined(HEADLESS) || defined(_AIX)
+#if defined(HEADLESS) || defined(NO_XRANDR)
     return JNI_FALSE;
 #else
     int opcode = 0, firstEvent = 0, firstError = 0;
@@ -1902,7 +1902,7 @@
 Java_sun_awt_X11GraphicsDevice_getCurrentDisplayMode
     (JNIEnv* env, jclass x11gd, jint screen)
 {
-#if defined(HEADLESS) || defined(_AIX)
+#if defined(HEADLESS) || defined(NO_XRANDR)
     return NULL;
 #else
     XRRScreenConfiguration *config;
@@ -1998,7 +1998,7 @@
     (JNIEnv* env, jclass x11gd,
      jint screen, jobject arrayList)
 {
-#if !defined(HEADLESS) && !defined(_AIX)
+#if !defined(HEADLESS) && !defined(NO_XRANDR)
 
     AWT_LOCK();
 
@@ -2086,7 +2086,7 @@
     (JNIEnv* env, jclass x11gd,
      jint screen, jint width, jint height, jint refreshRate)
 {
-#if !defined(HEADLESS) && !defined(_AIX)
+#if !defined(HEADLESS) && !defined(NO_XRANDR)
     jboolean success = JNI_FALSE;
     XRRScreenConfiguration *config;
     Drawable root;
@@ -2203,7 +2203,7 @@
  */
 
 static char *get_output_screen_name(JNIEnv *env, int screen) {
-#ifdef _AIX
+#ifdef NO_XRANDR
     return NULL;
 #else
     if (!awt_XRRGetScreenResources || !awt_XRRGetOutputInfo) {
@@ -2235,7 +2235,7 @@
     }
     AWT_UNLOCK();
     return name;
-#endif /* _AIX */
+#endif /* NO_XRANDR */
 }
 
 /*
--- a/src/java.desktop/windows/native/libawt/windows/ThemeReader.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/windows/native/libawt/windows/ThemeReader.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -251,7 +251,7 @@
         DWORD lastError = GetLastError();
         if (lastError != 0) {
             LPSTR msgBuffer = NULL;
-            FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+            DWORD fret= FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                     FORMAT_MESSAGE_FROM_SYSTEM |
                     FORMAT_MESSAGE_IGNORE_INSERTS,
                     NULL,
@@ -261,8 +261,14 @@
                     // it's an output parameter when allocate buffer is used
                     0,
                     NULL);
-            DTRACE_PRINTLN3("Error: hres=0x%x lastError=0x%x %s\n", hres,
+            if (fret != 0) {
+                DTRACE_PRINTLN3("Error: hres=0x%x lastError=0x%x %s\n", hres,
                                                 lastError, msgBuffer);
+                LocalFree(msgBuffer);
+            } else {
+                DTRACE_PRINTLN2("Error: hres=0x%x lastError=0x%x \n", hres,
+                                                lastError);
+            }
         }
     }
 #endif
--- a/src/java.desktop/windows/native/libawt/windows/awt_Debug.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.desktop/windows/native/libawt/windows/awt_Debug.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -182,7 +182,7 @@
     int     ret = IDNO;
     static jboolean headless = isHeadless();
 
-    FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+    DWORD fret= FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                   FORMAT_MESSAGE_FROM_SYSTEM |
                   FORMAT_MESSAGE_IGNORE_INSERTS,
                   NULL,
@@ -197,7 +197,9 @@
     }
     // format the assertion message
     _snprintf(assertMsg, ASSERT_MSG_SIZE, AssertFmt, expr, file, line, lastError, msgBuffer);
-    LocalFree(msgBuffer);
+    if (fret != 0) {
+        LocalFree(msgBuffer);
+    }
 
     // tell the user the bad news
     fprintf(stderr, "*********************\n");
--- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeSet.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeSet.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -95,7 +95,7 @@
             parser.reportError(Constants.ERROR, err);
         }
         _name = parser.getQNameIgnoreDefaultNs(name);
-        if ((_name == null) || (_name.equals(EMPTYSTRING))) {
+        if ((_name == null) || (_name.getStringRep().equals(EMPTYSTRING))) {
             ErrorMsg msg = new ErrorMsg(ErrorMsg.UNNAMED_ATTRIBSET_ERR, this);
             parser.reportError(Constants.ERROR, msg);
         }
--- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -83,7 +83,7 @@
  * @author Andy Clark, IBM
  * @author Ralf Pfeiffer, IBM
  * @since  PR-DOM-Level-1-19980818.
- * @LastModified: Nov 2017
+ * @LastModified: Nov 2018
  */
 public class CoreDocumentImpl
         extends ParentNode implements Document {
@@ -1797,6 +1797,11 @@
                     return null;
                 }
             }
+            // Adopting from a deferred DOM into another deferred DOM
+            else if (otherImpl instanceof DeferredDOMImplementationImpl) {
+                // traverse the DOM and expand deferred nodes and then allow adoption
+                undeferChildren (node);
+            }
         }
 
         switch (node.getNodeType()) {
--- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -89,7 +89,7 @@
  * @author K.Venugopal SUN Microsystems
  * @author Neeraj Bajaj SUN Microsystems
  * @author Sunitha Reddy SUN Microsystems
- * @LastModified: Oct 2017
+ * @LastModified: Nov 2018
  */
 public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
 
@@ -855,7 +855,7 @@
 
         // We've seen a new Reader.
         // Push it on the stack so we can close it later.
-        //fOwnReaders.add(reader);
+        fReaderStack.push(reader);
 
         // push entity on stack
         if (fCurrentEntity != null) {
@@ -1444,16 +1444,21 @@
             (fEntityStack.empty() ? null : fEntityStack.get(0));
     }
 
+    // A stack containing all the open readers
+    protected Stack<Reader> fReaderStack = new Stack<>();
 
     /**
      * Close all opened InputStreams and Readers opened by this parser.
      */
     public void closeReaders() {
-        /** this call actually does nothing, readers are closed in the endEntity method
-         * through the current entity.
-         * The change seems to have happened during the jdk6 development with the
-         * addition of StAX
-        **/
+        // close all readers
+        while (!fReaderStack.isEmpty()) {
+            try {
+                (fReaderStack.pop()).close();
+            } catch (IOException e) {
+                // ignore
+            }
+        }
     }
 
     public void endEntity() throws IOException, XNIException {
@@ -1487,6 +1492,13 @@
             }
         }
 
+        // REVISIT: We should never encounter underflow if the calls
+        // to startEntity and endEntity are balanced, but guard
+        // against the EmptyStackException for now. -- mrglavas
+        if (!fReaderStack.isEmpty()) {
+            fReaderStack.pop();
+        }
+
         if (fEntityHandler != null) {
             //so this is the last opened entity, signal it to current fEntityHandler using Augmentation
             if(entity == null){
--- a/src/jdk.accessibility/windows/native/common/AccessBridgeDebug.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.accessibility/windows/native/common/AccessBridgeDebug.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -66,6 +66,7 @@
     if (lpMsgBuf != NULL) {
         strncat((char *)retbuf, ": ", sizeof(retbuf) - strlen(retbuf) - 1);
         strncat((char *)retbuf, (char *)lpMsgBuf, sizeof(retbuf) - strlen(retbuf) - 1);
+        LocalFree(lpMsgBuf);
     }
     return (char *)retbuf;
 }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/TypeAnnotations.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/TypeAnnotations.java	Mon Dec 03 10:08:18 2018 +0100
@@ -169,9 +169,12 @@
 
     /**
      * Determine whether an annotation is a declaration annotation,
-     * a type annotation, or both.
+     * a type annotation, or both (or none, i.e a non-annotation masquerading as one).
      */
     public AnnotationType annotationTargetType(Attribute.Compound a, Symbol s) {
+        if (!a.type.tsym.isAnnotationType()) {
+            return AnnotationType.NONE;
+        }
         List<Attribute> targets = annotationTargets(a.type.tsym);
         return (targets == null) ?
                 AnnotationType.DECLARATION :
@@ -319,6 +322,8 @@
                         onlyTypeAnnos.append(ta);
                         break;
                     }
+                    case NONE: // Error signaled already, just drop the non-annotation.
+                        break;
                 }
             }
 
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java	Mon Dec 03 10:08:18 2018 +0100
@@ -344,17 +344,19 @@
 
             Assert.checkNonNull(c, "Failed to create annotation");
 
-            if (annotated.containsKey(a.type.tsym)) {
-                if (!allowRepeatedAnnos) {
-                    log.error(DiagnosticFlag.SOURCE_LEVEL, a.pos(), Feature.REPEATED_ANNOTATIONS.error(sourceName));
+            if (a.type.tsym.isAnnotationType()) {
+                if (annotated.containsKey(a.type.tsym)) {
+                    if (!allowRepeatedAnnos) {
+                        log.error(DiagnosticFlag.SOURCE_LEVEL, a.pos(), Feature.REPEATED_ANNOTATIONS.error(sourceName));
+                    }
+                    ListBuffer<T> l = annotated.get(a.type.tsym);
+                    l = l.append(c);
+                    annotated.put(a.type.tsym, l);
+                    pos.put(c, a.pos());
+                } else {
+                    annotated.put(a.type.tsym, ListBuffer.of(c));
+                    pos.put(c, a.pos());
                 }
-                ListBuffer<T> l = annotated.get(a.type.tsym);
-                l = l.append(c);
-                annotated.put(a.type.tsym, l);
-                pos.put(c, a.pos());
-            } else {
-                annotated.put(a.type.tsym, ListBuffer.of(c));
-                pos.put(c, a.pos());
             }
 
             // Note: @Deprecated has no effect on local variables and parameters
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java	Mon Dec 03 10:08:18 2018 +0100
@@ -2903,6 +2903,15 @@
                     }
                     super.scan(tree);
                 }
+
+                @Override
+                public void visitClassDef(JCClassDecl that) {
+                    // or class declaration trees!
+                }
+
+                public void visitLambda(JCLambda that) {
+                    // or lambda expressions!
+                }
             }.scan(tree);
         }
 
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java	Mon Dec 03 10:08:18 2018 +0100
@@ -2749,7 +2749,7 @@
         class AnnotationValidator extends TreeScanner {
             @Override
             public void visitAnnotation(JCAnnotation tree) {
-                if (!tree.type.isErroneous()) {
+                if (!tree.type.isErroneous() && tree.type.tsym.isAnnotationType()) {
                     super.visitAnnotation(tree);
                     validateAnnotation(tree);
                 }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java	Mon Dec 03 10:08:18 2018 +0100
@@ -313,7 +313,7 @@
                 fs = new DirectoryContainer(realPath);
             } else {
                 try {
-                    fs = new ArchiveContainer(realPath);
+                    fs = new ArchiveContainer(path);
                 } catch (ProviderNotFoundException | SecurityException ex) {
                     throw new IOException(ex);
                 }
--- a/src/jdk.dynalink/share/classes/jdk/dynalink/beans/AccessibleMembersLookup.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.dynalink/share/classes/jdk/dynalink/beans/AccessibleMembersLookup.java	Mon Dec 03 10:08:18 2018 +0100
@@ -65,9 +65,8 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.LinkedHashSet;
+import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * Utility class for discovering accessible methods and inner classes. Normally, a public member declared on a class is
@@ -78,7 +77,7 @@
  */
 class AccessibleMembersLookup {
     private final Map<MethodSignature, Method> methods;
-    private final Set<Class<?>> innerClasses;
+    private final Map<String, Class<?>> innerClasses;
     private final boolean instance;
 
     /**
@@ -89,7 +88,7 @@
      */
     AccessibleMembersLookup(final Class<?> clazz, final boolean instance) {
         this.methods = new HashMap<>();
-        this.innerClasses = new LinkedHashSet<>();
+        this.innerClasses = new LinkedHashMap<>();
         this.instance = instance;
         lookupAccessibleMembers(clazz);
     }
@@ -110,7 +109,7 @@
     }
 
     Class<?>[] getInnerClasses() {
-        return innerClasses.toArray(new Class<?>[0]);
+        return innerClasses.values().toArray(new Class<?>[0]);
     }
 
     /**
@@ -216,7 +215,8 @@
                 // NOTE: getting inner class objects through getClasses() does not resolve them, so if those classes
                 // were not yet loaded, they'll only get loaded in a non-resolved state; no static initializers for
                 // them will trigger just by doing this.
-                innerClasses.add(innerClass);
+                // Don't overwrite an inner class with an inherited inner class with the same name.
+                innerClasses.putIfAbsent(innerClass.getSimpleName(), innerClass);
             }
         } else {
             searchSuperTypes = true;
--- a/src/jdk.hotspot.agent/macosx/native/libsaproc/MacosxDebuggerLocal.m	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.hotspot.agent/macosx/native/libsaproc/MacosxDebuggerLocal.m	Mon Dec 03 10:08:18 2018 +0100
@@ -441,6 +441,7 @@
   for (i = 0; i < n; i++) {
     if (!get_nth_lwp_regs(ph, i, &regs)) {
       print_debug("Could not get regs of thread %d, already set!\n", i);
+      (*env)->ReleaseLongArrayElements(env, thrinfos, (jlong*)cinfos, 0);
       return false;
     }
     for (j = 0; j < len; j += 3) {
@@ -519,8 +520,8 @@
   regs[REG_INDEX(TRAPNO)] = gregs.r_trapno;
   regs[REG_INDEX(RFL)]    = gregs.r_rflags;
 
+  (*env)->ReleaseLongArrayElements(env, array, regs, JNI_COMMIT);
 #endif /* amd64 */
-  (*env)->ReleaseLongArrayElements(env, array, regs, JNI_COMMIT);
   return array;
 }
 
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/OopUtilities.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/OopUtilities.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, 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
@@ -63,16 +63,16 @@
   private static BooleanField threadDaemonField;
 
   // possible values of java_lang_Thread::ThreadStatus
-  private static int THREAD_STATUS_NEW;
+  public static int THREAD_STATUS_NEW;
 
-  private static int THREAD_STATUS_RUNNABLE;
-  private static int THREAD_STATUS_SLEEPING;
-  private static int THREAD_STATUS_IN_OBJECT_WAIT;
-  private static int THREAD_STATUS_IN_OBJECT_WAIT_TIMED;
-  private static int THREAD_STATUS_PARKED;
-  private static int THREAD_STATUS_PARKED_TIMED;
-  private static int THREAD_STATUS_BLOCKED_ON_MONITOR_ENTER;
-  private static int THREAD_STATUS_TERMINATED;
+  public static int THREAD_STATUS_RUNNABLE;
+  public static int THREAD_STATUS_SLEEPING;
+  public static int THREAD_STATUS_IN_OBJECT_WAIT;
+  public static int THREAD_STATUS_IN_OBJECT_WAIT_TIMED;
+  public static int THREAD_STATUS_PARKED;
+  public static int THREAD_STATUS_PARKED_TIMED;
+  public static int THREAD_STATUS_BLOCKED_ON_MONITOR_ENTER;
+  public static int THREAD_STATUS_TERMINATED;
 
   // java.util.concurrent.locks.AbstractOwnableSynchronizer fields
   private static OopField absOwnSyncOwnerThreadField;
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/JavaVFrame.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/JavaVFrame.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, 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
@@ -99,13 +99,14 @@
         // we are still waiting for notification or timeout. Otherwise if
         // we earlier reported java.lang.Thread.State == "BLOCKED (on object
         // monitor)", then we are actually waiting to re-lock the monitor.
-        // At this level we can't distinguish the two cases to report
-        // "waited on" rather than "waiting on" for the second case.
         StackValueCollection locs = getLocals();
         if (!locs.isEmpty()) {
           StackValue sv = locs.get(0);
           if (sv.getType() == BasicType.getTObject()) {
             OopHandle o = sv.getObject();
+            if (OopUtilities.threadOopGetThreadStatus(thread.getThreadObj()) == OopUtilities.THREAD_STATUS_BLOCKED_ON_MONITOR_ENTER) {
+              waitState = "waiting to re-lock in wait()";
+            }
             printLockedObjectClassName(tty, o, waitState);
           }
         } else {
@@ -146,13 +147,6 @@
             // an inflated monitor that is first on the monitor list in
             // the first frame can block us on a monitor enter.
             lockState = identifyLockState(monitor, "waiting to lock");
-          } else if (frameCount != 0) {
-            // This is not the first frame so we either own this monitor
-            // or we owned the monitor before and called wait(). Because
-            // wait() could have been called on any monitor in a lower
-            // numbered frame on the stack, we have to check all the
-            // monitors on the list for this frame.
-            lockState = identifyLockState(monitor, "waiting to re-lock in wait()");
           }
           printLockedObjectClassName(tty, monitor.owner(), lockState);
           foundFirstMonitor = true;
--- a/src/jdk.jartool/share/classes/sun/tools/jar/Main.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.jartool/share/classes/sun/tools/jar/Main.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2018, 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
@@ -693,7 +693,7 @@
             usageError(getMsg("error.bad.cflag"));
             return false;
         } else if (uflag) {
-            if ((mname != null) || (ename != null)) {
+            if ((mname != null) || (ename != null) || moduleVersion != null) {
                 /* just want to update the manifest */
                 return true;
             } else {
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractIndexWriter.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractIndexWriter.java	Mon Dec 03 10:08:18 2018 +0100
@@ -223,7 +223,7 @@
         String moduleName = utils.getFullyQualifiedName(mdle);
         Content link = getModuleLink(mdle, new StringContent(moduleName));
         si.setLabel(moduleName);
-        si.setCategory(resources.getText("doclet.Modules"));
+        si.setCategory(SearchIndexItem.Category.MODULES);
         Content dt = HtmlTree.DT(link);
         dt.addContent(" - ");
         dt.addContent(contents.module_);
@@ -247,7 +247,7 @@
             si.setContainingModule(utils.getFullyQualifiedName(utils.containingModule(pkg)));
         }
         si.setLabel(utils.getPackageName(pkg));
-        si.setCategory(resources.getText("doclet.Packages"));
+        si.setCategory(SearchIndexItem.Category.PACKAGES);
         Content dt = HtmlTree.DT(link);
         dt.addContent(" - ");
         dt.addContent(contents.package_);
@@ -270,7 +270,7 @@
                         LinkInfoImpl.Kind.INDEX, typeElement).strong(true));
         si.setContainingPackage(utils.getPackageName(utils.containingPackage(typeElement)));
         si.setLabel(utils.getSimpleName(typeElement));
-        si.setCategory(resources.getText("doclet.Types"));
+        si.setCategory(SearchIndexItem.Category.TYPES);
         Content dt = HtmlTree.DT(link);
         dt.addContent(" - ");
         addClassInfo(typeElement, dt);
@@ -318,7 +318,7 @@
         }  else {
             si.setLabel(name);
         }
-        si.setCategory(resources.getText("doclet.Members"));
+        si.setCategory(SearchIndexItem.Category.MEMBERS);
         Content span = HtmlTree.SPAN(HtmlStyle.memberNameLink,
                 getDocLink(LinkInfoImpl.Kind.INDEX, member, name));
         Content dt = HtmlTree.DT(span);
@@ -439,7 +439,7 @@
         }
         if (!configuration.packages.isEmpty()) {
             SearchIndexItem si = new SearchIndexItem();
-            si.setCategory(resources.getText("doclet.Packages"));
+            si.setCategory(SearchIndexItem.Category.PACKAGES);
             si.setLabel(resources.getText("doclet.All_Packages"));
             si.setUrl(DocPaths.ALLPACKAGES_INDEX.getPath());
             configuration.packageSearchIndex.add(si);
@@ -447,7 +447,7 @@
         createSearchIndexFile(DocPaths.PACKAGE_SEARCH_INDEX_JSON, DocPaths.PACKAGE_SEARCH_INDEX_ZIP,
                 DocPaths.PACKAGE_SEARCH_INDEX_JS, configuration.packageSearchIndex, "packageSearchIndex");
         SearchIndexItem si = new SearchIndexItem();
-        si.setCategory(resources.getText("doclet.Types"));
+        si.setCategory(SearchIndexItem.Category.TYPES);
         si.setLabel(resources.getText("doclet.All_Classes"));
         si.setUrl(DocPaths.ALLCLASSES_INDEX.getPath());
         configuration.typeSearchIndex.add(si);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DocFilesHandlerImpl.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DocFilesHandlerImpl.java	Mon Dec 03 10:08:18 2018 +0100
@@ -169,7 +169,7 @@
 
         DocPath dfilePath = dstPath.resolve(srcfile.getName());
         HtmlDocletWriter docletWriter = new DocFileWriter(configuration, dfilePath, element);
-        configuration.messages.notice("doclet.Generating_0", docletWriter.filename);
+        configuration.messages.notice("doclet.Generating_0", docletWriter.filename.getPath());
 
         String title = getWindowTitle(docletWriter, dfElement).trim();
         HtmlTree htmlContent = docletWriter.getBody(true, title);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java	Mon Dec 03 10:08:18 2018 +0100
@@ -139,19 +139,6 @@
         if (configuration.createtree) {
             TreeWriter.generate(configuration, classtree);
         }
-        if (configuration.createindex) {
-            configuration.buildSearchTagIndex();
-            if (configuration.splitindex) {
-                SplitIndexWriter.generate(configuration, indexbuilder);
-            } else {
-                SingleIndexWriter.generate(configuration, indexbuilder);
-            }
-            AllClassesIndexWriter.generate(configuration,
-                    new IndexBuilder(configuration, nodeprecated, true));
-            if (!configuration.packages.isEmpty()) {
-                AllPackagesIndexWriter.generate(configuration);
-            }
-        }
 
         if (!(configuration.nodeprecatedlist || nodeprecated)) {
             DeprecatedListWriter.generate(configuration);
@@ -172,6 +159,20 @@
             }
         }
 
+        if (configuration.createindex) {
+            configuration.buildSearchTagIndex();
+            if (configuration.splitindex) {
+                SplitIndexWriter.generate(configuration, indexbuilder);
+            } else {
+                SingleIndexWriter.generate(configuration, indexbuilder);
+            }
+            AllClassesIndexWriter.generate(configuration,
+                    new IndexBuilder(configuration, nodeprecated, true));
+            if (!configuration.packages.isEmpty()) {
+                AllPackagesIndexWriter.generate(configuration);
+            }
+        }
+
         if (!configuration.frames) {
             if (configuration.createoverview) {
                 IndexRedirectWriter.generate(configuration, DocPaths.OVERVIEW_SUMMARY, DocPaths.INDEX);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SearchIndexItem.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SearchIndexItem.java	Mon Dec 03 10:08:18 2018 +0100
@@ -35,9 +35,17 @@
  */
 public class SearchIndexItem {
 
+    enum Category {
+        MODULES,
+        PACKAGES,
+        TYPES,
+        MEMBERS,
+        SEARCH_TAGS
+    }
+
+    private Category category;
     private String label = "";
     private String url = "";
-    private String category = "";
     private String containingModule = "";
     private String containingPackage = "";
     private String containingClass = "";
@@ -72,7 +80,7 @@
         containingClass = c;
     }
 
-    public void setCategory(String c) {
+    public void setCategory(Category c) {
         category = c;
     }
 
@@ -94,11 +102,13 @@
 
     public String toString() {
         StringBuilder item = new StringBuilder("");
-        if (category.equals("Modules")) {
+        switch (category) {
+        case MODULES:
             item.append("{")
                     .append("\"l\":\"").append(label).append("\"")
                     .append("}");
-        } else if (category.equals("Packages")) {
+            break;
+        case PACKAGES:
             item.append("{");
             if (!containingModule.isEmpty()) {
                 item.append("\"m\":\"").append(containingModule).append("\",");
@@ -108,7 +118,8 @@
                 item.append(",\"url\":\"").append(url).append("\"");
             }
             item.append("}");
-        } else if (category.equals("Types")) {
+            break;
+        case TYPES:
             item.append("{");
             if (!containingPackage.equals("")) {
                 item.append("\"p\":\"").append(containingPackage).append("\",");
@@ -118,7 +129,8 @@
                 item.append(",\"url\":\"").append(url).append("\"");
             }
             item.append("}");
-        } else if (category.equals("Members")) {
+            break;
+        case MEMBERS:
             item.append("{")
                     .append("\"p\":\"").append(containingPackage).append("\",")
                     .append("\"c\":\"").append(containingClass).append("\",")
@@ -127,7 +139,8 @@
                 item.append(",\"url\":\"").append(url).append("\"");
             }
             item.append("}");
-        } else {
+            break;
+        case SEARCH_TAGS:
             item.append("{")
                     .append("\"l\":\"").append(label).append("\",")
                     .append("\"h\":\"").append(holder).append("\",");
@@ -136,6 +149,9 @@
             }
             item.append("\"u\":\"").append(url).append("\"")
                     .append("}");
+            break;
+        default:
+            throw new IllegalStateException("category not set");
         }
         return item.toString();
     }
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java	Mon Dec 03 10:08:18 2018 +0100
@@ -41,11 +41,11 @@
 import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
-import jdk.javadoc.internal.doclets.formats.html.markup.Links;
 import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
 import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.DocletElement;
 import jdk.javadoc.internal.doclets.toolkit.Resources;
 import jdk.javadoc.internal.doclets.toolkit.builders.SerializedFormBuilder;
 import jdk.javadoc.internal.doclets.toolkit.taglets.TagletWriter;
@@ -421,48 +421,43 @@
                 SearchIndexItem si = new SearchIndexItem();
                 si.setLabel(tagText);
                 si.setDescription(desc);
+                si.setUrl(htmlWriter.path.getPath() + "#" + anchorName);
                 DocPaths docPaths = configuration.docPaths;
                 new SimpleElementVisitor9<Void, Void>() {
                     @Override
-                    public Void visitModule(ModuleElement e, Void p) {
-                        si.setUrl(docPaths.moduleSummary(e).getPath() + "#" + anchorName);
-                        si.setHolder(utils.getFullyQualifiedName(element));
-                        return null;
-                    }
-
-                    @Override
-                    public Void visitPackage(PackageElement e, Void p) {
-                        si.setUrl(docPaths.forPackage(e).getPath()
-                                + "/" + DocPaths.PACKAGE_SUMMARY.getPath() + "#" + anchorName);
-                        si.setHolder(utils.getSimpleName(element));
-                        return null;
-                    }
-
-                    @Override
-                    public Void visitType(TypeElement e, Void p) {
-                        si.setUrl(docPaths.forClass(e).getPath() + "#" + anchorName);
-                        si.setHolder(utils.getFullyQualifiedName(e));
-                        return null;
-                    }
-
-                    @Override
                     public Void visitVariable(VariableElement e, Void p) {
                         TypeElement te = utils.getEnclosingTypeElement(e);
-                        si.setUrl(docPaths.forClass(te).getPath() + "#" + anchorName);
                         si.setHolder(utils.getFullyQualifiedName(e) + "." + utils.getSimpleName(e));
                         return null;
                     }
 
                     @Override
+                    public Void visitUnknown(Element e, Void p) {
+                        if (e instanceof DocletElement) {
+                            DocletElement de = (DocletElement) e;
+                            switch (de.getSubKind()) {
+                                case OVERVIEW:
+                                    si.setHolder(resources.getText("doclet.Overview"));
+                                    break;
+                                case DOCFILE:
+                                    si.setHolder(de.getPackageElement().toString());
+                                    break;
+                                default:
+                                    throw new IllegalStateException();
+                            }
+                            return null;
+                        } else {
+                            return super.visitUnknown(e, p);
+                        }
+                    }
+
+                    @Override
                     protected Void defaultAction(Element e, Void p) {
-                        TypeElement te = utils.getEnclosingTypeElement(e);
-                        si.setUrl(docPaths.forClass(te).getPath() + "#" + anchorName);
                         si.setHolder(utils.getFullyQualifiedName(e));
                         return null;
                     }
                 }.visit(element);
-                Contents contents = configuration.getContents();
-                si.setCategory(contents.getContent("doclet.SearchTags").toString());
+                si.setCategory(SearchIndexItem.Category.SEARCH_TAGS);
                 configuration.tagSearchIndex.add(si);
             }
         }
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets.properties	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets.properties	Mon Dec 03 10:08:18 2018 +0100
@@ -211,9 +211,6 @@
 doclet.Type=Type
 doclet.Modifier_and_Type=Modifier and Type
 doclet.Implementation=Implementation(s):
-doclet.Types=Types
-doclet.Members=Members
-doclet.SearchTags=SearchTags
 doclet.search=SEARCH:
 doclet.Field=Field
 doclet.Property=Property
@@ -230,6 +227,7 @@
   but the packages defined in {0} are in named modules.
 doclet.linkMismatch_ModuleLinkedtoPackage=The code being documented uses modules but the packages defined \
   in {0} are in the unnamed module.
+doclet.urlRedirected=URL {0} was redirected to {1} -- Update the command-line options to suppress this warning.
 
 #Documentation for Enums
 doclet.enum_values_doc.fullbody=\
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets_ja.properties	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets_ja.properties	Mon Dec 03 10:08:18 2018 +0100
@@ -202,9 +202,6 @@
 doclet.Type=\u30BF\u30A4\u30D7
 doclet.Modifier_and_Type=\u4FEE\u98FE\u5B50\u3068\u30BF\u30A4\u30D7
 doclet.Implementation=\u5B9F\u88C5:
-doclet.Types=\u30BF\u30A4\u30D7
-doclet.Members=\u30E1\u30F3\u30D0\u30FC
-doclet.SearchTags=SearchTags
 doclet.search=SEARCH:
 doclet.Field=\u30D5\u30A3\u30FC\u30EB\u30C9
 doclet.Property=\u30D7\u30ED\u30D1\u30C6\u30A3
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets_zh_CN.properties	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets_zh_CN.properties	Mon Dec 03 10:08:18 2018 +0100
@@ -202,9 +202,6 @@
 doclet.Type=\u7C7B\u578B
 doclet.Modifier_and_Type=\u4FEE\u9970\u7B26\u548C\u7C7B\u578B
 doclet.Implementation=\u5B9E\u73B0:
-doclet.Types=\u7C7B\u578B
-doclet.Members=\u6210\u5458
-doclet.SearchTags=\u641C\u7D22\u6807\u8BB0
 doclet.search=SEARCH:
 doclet.Field=\u5B57\u6BB5
 doclet.Property=\u5C5E\u6027
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Extern.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Extern.java	Mon Dec 03 10:08:18 2018 +0100
@@ -25,8 +25,15 @@
 
 package jdk.javadoc.internal.doclets.toolkit.util;
 
-import java.io.*;
-import java.net.*;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.TreeMap;
@@ -35,6 +42,7 @@
 import javax.lang.model.element.ModuleElement;
 import javax.lang.model.element.PackageElement;
 import javax.tools.Diagnostic;
+import javax.tools.Diagnostic.Kind;
 import javax.tools.DocumentationTool;
 
 import jdk.javadoc.doclet.Reporter;
@@ -85,7 +93,7 @@
     private class Item {
 
         /**
-         * Element name, found in the "element-list" file in the {@link path}.
+         * Element name, found in the "element-list" file in the {@link #path}.
          */
         final String elementName;
 
@@ -157,7 +165,7 @@
      */
     public boolean isModule(String elementName) {
         Item elem = moduleItems.get(elementName);
-        return (elem == null) ? false : true;
+        return elem != null;
     }
 
     /**
@@ -245,14 +253,6 @@
         }
     }
 
-    private URL toURL(String url) throws Fault {
-        try {
-            return new URL(url);
-        } catch (MalformedURLException e) {
-            throw new Fault(resources.getText("doclet.MalformedURL", url), e);
-        }
-    }
-
     private class Fault extends Exception {
         private static final long serialVersionUID = 0;
 
@@ -296,7 +296,9 @@
     private void readElementListFromURL(String urlpath, URL elemlisturlpath) throws Fault {
         try {
             URL link = elemlisturlpath.toURI().resolve(DocPaths.ELEMENT_LIST.getPath()).toURL();
-            readElementList(link.openStream(), urlpath, false);
+            try (InputStream in = open(link)) {
+                readElementList(in, urlpath, false);
+            }
         } catch (URISyntaxException | MalformedURLException exc) {
             throw new Fault(resources.getText("doclet.MalformedURL", elemlisturlpath.toString()), exc);
         } catch (IOException exc) {
@@ -313,7 +315,9 @@
     private void readAlternateURL(String urlpath, URL elemlisturlpath) throws Fault {
         try {
             URL link = elemlisturlpath.toURI().resolve(DocPaths.PACKAGE_LIST.getPath()).toURL();
-            readElementList(link.openStream(), urlpath, false);
+            try (InputStream in = open(link)) {
+                readElementList(in, urlpath, false);
+            }
         } catch (URISyntaxException | MalformedURLException exc) {
             throw new Fault(resources.getText("doclet.MalformedURL", elemlisturlpath.toString()), exc);
         } catch (IOException exc) {
@@ -377,9 +381,9 @@
     private void readElementList(InputStream input, String path, boolean relative)
                          throws Fault, IOException {
         try (BufferedReader in = new BufferedReader(new InputStreamReader(input))) {
-            String elemname = null;
+            String elemname;
+            DocPath elempath;
             String moduleName = null;
-            DocPath elempath = null;
             DocPath basePath  = DocPath.create(path);
             while ((elemname = in.readLine()) != null) {
                 if (elemname.length() > 0) {
@@ -406,9 +410,25 @@
         }
     }
 
+    private void checkLinkCompatibility(String packageName, String moduleName, String path) throws Fault {
+        PackageElement pe = utils.elementUtils.getPackageElement(packageName);
+        if (pe != null) {
+            ModuleElement me = (ModuleElement)pe.getEnclosingElement();
+            if (me == null || me.isUnnamed()) {
+                if (moduleName != null) {
+                    throw new Fault(resources.getText("doclet.linkMismatch_PackagedLinkedtoModule",
+                            path), null);
+                }
+            } else if (moduleName == null) {
+                throw new Fault(resources.getText("doclet.linkMismatch_ModuleLinkedtoPackage",
+                        path), null);
+            }
+        }
+    }
+
     public boolean isUrl (String urlCandidate) {
         try {
-            URL ignore = new URL(urlCandidate);
+            new URL(urlCandidate);
             //No exception was thrown, so this must really be a URL.
             return true;
         } catch (MalformedURLException e) {
@@ -417,17 +437,70 @@
         }
     }
 
-    private void checkLinkCompatibility(String packageName, String moduleName, String path) throws Fault {
-        PackageElement pe = configuration.utils.elementUtils.getPackageElement(packageName);
-        if (pe != null) {
-            ModuleElement me = (ModuleElement)pe.getEnclosingElement();
-            if (me == null || me.isUnnamed()) {
-                if (moduleName != null)
-                    throw new Fault(resources.getText("doclet.linkMismatch_PackagedLinkedtoModule",
-                            path), null);
-            } else if (moduleName == null)
-                throw new Fault(resources.getText("doclet.linkMismatch_ModuleLinkedtoPackage",
-                        path), null);
+    private URL toURL(String url) throws Fault {
+        try {
+            return new URL(url);
+        } catch (MalformedURLException e) {
+            throw new Fault(resources.getText("doclet.MalformedURL", url), e);
         }
     }
+
+    /**
+     * Open a stream to a URL, following a limited number of redirects
+     * if necessary.
+     *
+     * @param url the URL
+     * @return the stream
+     * @throws IOException if an error occurred accessing the URL
+     */
+    private InputStream open(URL url) throws IOException {
+        URLConnection conn = url.openConnection();
+
+        boolean redir;
+        int redirects = 0;
+        InputStream in;
+
+        do {
+            // Open the input stream before getting headers,
+            // because getHeaderField() et al swallow IOExceptions.
+            in = conn.getInputStream();
+            redir = false;
+
+            if (conn instanceof HttpURLConnection) {
+                HttpURLConnection http = (HttpURLConnection)conn;
+                int stat = http.getResponseCode();
+                // See:
+                // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
+                // https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection
+                switch (stat) {
+                    case 300: // Multiple Choices
+                    case 301: // Moved Permanently
+                    case 302: // Found (previously Moved Temporarily)
+                    case 303: // See Other
+                    case 307: // Temporary Redirect
+                    case 308: // Permanent Redirect
+                        URL base = http.getURL();
+                        String loc = http.getHeaderField("Location");
+                        URL target = null;
+                        if (loc != null) {
+                            target = new URL(base, loc);
+                        }
+                        http.disconnect();
+                        if (target == null || redirects >= 5) {
+                            throw new IOException("illegal URL redirect");
+                        }
+                        redir = true;
+                        conn = target.openConnection();
+                        redirects++;
+                }
+            }
+        } while (redir);
+
+        if (!url.equals(conn.getURL())) {
+            configuration.getReporter().print(Kind.WARNING,
+                    resources.getText("doclet.urlRedirected", url, conn.getURL()));
+        }
+
+        return in;
+    }
 }
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/EventInstrumentation.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/EventInstrumentation.java	Mon Dec 03 10:08:18 2018 +0100
@@ -435,6 +435,10 @@
         // MyEvent#shouldCommit()
         updateMethod(METHOD_EVENT_SHOULD_COMMIT, methodVisitor -> {
             Label fail = new Label();
+            if (guardHandlerReference) {
+                getEventHandler(methodVisitor);
+                methodVisitor.visitJumpInsn(Opcodes.IFNULL, fail);
+            }
             // if (!eventHandler.shouldCommit(duration) goto fail;
             getEventHandler(methodVisitor);
             methodVisitor.visitVarInsn(Opcodes.ALOAD, 0);
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/SecuritySupport.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/SecuritySupport.java	Mon Dec 03 10:08:18 2018 +0100
@@ -79,6 +79,14 @@
     static final SafePath USER_HOME = getPathInProperty("user.home", null);
     static final SafePath JAVA_IO_TMPDIR = getPathInProperty("java.io.tmpdir", null);
 
+    static {
+        // ensure module java.base can read module jdk.jfr as early as possible
+        addReadEdge(Object.class);
+        addHandlerExport(Object.class);
+        addEventsExport(Object.class);
+        addInstrumentExport(Object.class);
+    }
+
     final static class SecureRecorderListener implements FlightRecorderListener {
 
         private final AccessControlContext context;
@@ -262,6 +270,18 @@
         Modules.addExports(JFR_MODULE, Utils.HANDLERS_PACKAGE_NAME, clazz.getModule());
     }
 
+    static void addEventsExport(Class<?> clazz) {
+        Modules.addExports(JFR_MODULE, Utils.EVENTS_PACKAGE_NAME, clazz.getModule());
+    }
+
+    static void addInstrumentExport(Class<?> clazz) {
+        Modules.addExports(JFR_MODULE, Utils.INSTRUMENT_PACKAGE_NAME, clazz.getModule());
+    }
+
+    static void addReadEdge(Class<?> clazz) {
+        Modules.addReads(clazz.getModule(), JFR_MODULE);
+    }
+
     public static void registerEvent(Class<? extends jdk.internal.event.Event> eventClass) {
         doPrivileged(() ->  MetadataRepository.getInstance().register(eventClass), new FlightRecorderPermission(Utils.REGISTER_EVENT));
     }
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import jdk.internal.module.Modules;
 import jdk.jfr.Event;
 import jdk.jfr.FlightRecorder;
 import jdk.jfr.events.ActiveRecordingEvent;
@@ -99,12 +98,6 @@
     public synchronized static void initialize() {
         try {
             if (initializationTriggered == false) {
-                Module jdkJfrModule = Event.class.getModule();
-                Module javaBaseModule = Object.class.getModule();
-                Modules.addReads(javaBaseModule, jdkJfrModule);
-                Modules.addExports(jdkJfrModule, Utils.EVENTS_PACKAGE_NAME, javaBaseModule);
-                Modules.addExports(jdkJfrModule, Utils.INSTRUMENT_PACKAGE_NAME, javaBaseModule);
-                Modules.addExports(jdkJfrModule, Utils.HANDLERS_PACKAGE_NAME, javaBaseModule);
                 for (Class<?> mirrorEventClass : mirrorEventClasses) {
                     SecuritySupport.registerMirror(((Class<? extends Event>)mirrorEventClass));
                 }
--- a/src/jdk.jshell/share/classes/jdk/jshell/Eval.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/src/jdk.jshell/share/classes/jdk/jshell/Eval.java	Mon Dec 03 10:08:18 2018 +0100
@@ -327,7 +327,7 @@
                     String initCode = rinit.part(compileSource);
                     ExpressionInfo ei =
                             ExpressionToTypeInfo.localVariableTypeForInitializer(initCode, state, false);
-                    if (ei != null) {
+                    if (ei != null && ei.declareTypeName != null) {
                         typeName = ei.declareTypeName;
                         fullTypeName = ei.fullTypeName;
                         displayType = ei.displayTypeName;
--- a/test/hotspot/gtest/code/test_dependencyContext.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/gtest/code/test_dependencyContext.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -24,29 +24,33 @@
 
 #include "precompiled.hpp"
 #include "code/dependencyContext.hpp"
+#include "code/nmethod.hpp"
 #include "unittest.hpp"
 
 class TestDependencyContext {
  public:
-  nmethod* _nmethods[3];
+  nmethod _nmethods[3];
 
-  intptr_t _dependency_context;
+  nmethodBucket* volatile _dependency_context;
+  volatile uint64_t _last_cleanup;
 
   DependencyContext dependencies() {
-    DependencyContext depContext(&_dependency_context);
+    DependencyContext depContext(&_dependency_context, &_last_cleanup);
     return depContext;
   }
 
-  TestDependencyContext() : _dependency_context(DependencyContext::EMPTY) {
+  TestDependencyContext()
+    : _dependency_context(NULL),
+      _last_cleanup(0) {
     CodeCache_lock->lock_without_safepoint_check();
 
-    _nmethods[0] = reinterpret_cast<nmethod*>(0x8 * 0);
-    _nmethods[1] = reinterpret_cast<nmethod*>(0x8 * 1);
-    _nmethods[2] = reinterpret_cast<nmethod*>(0x8 * 2);
+    _nmethods[0].clear_unloading_state();
+    _nmethods[1].clear_unloading_state();
+    _nmethods[2].clear_unloading_state();
 
-    dependencies().add_dependent_nmethod(_nmethods[2]);
-    dependencies().add_dependent_nmethod(_nmethods[1]);
-    dependencies().add_dependent_nmethod(_nmethods[0]);
+    dependencies().add_dependent_nmethod(&_nmethods[2]);
+    dependencies().add_dependent_nmethod(&_nmethods[1]);
+    dependencies().add_dependent_nmethod(&_nmethods[0]);
   }
 
   ~TestDependencyContext() {
@@ -54,21 +58,10 @@
     CodeCache_lock->unlock();
   }
 
-  static bool has_stale_entries(DependencyContext ctx) {
-    return ctx.has_stale_entries();
-  }
-
-#ifndef PRODUCT
-  static bool find_stale_entries(DependencyContext ctx) {
-    return ctx.find_stale_entries();
-  }
-#endif
-
   void wipe() {
-    DependencyContext ctx(&_dependency_context);
+    DependencyContext ctx(&_dependency_context, &_last_cleanup);
     nmethodBucket* b = ctx.dependencies();
     ctx.set_dependencies(NULL);
-    ctx.set_has_stale_entries(false);
     while (b != NULL) {
       nmethodBucket* next = b->next();
       delete b;
@@ -77,33 +70,18 @@
   }
 };
 
-static void test_remove_dependent_nmethod(int id, bool delete_immediately) {
+static void test_remove_dependent_nmethod(int id) {
   TestDependencyContext c;
   DependencyContext depContext = c.dependencies();
-  NOT_PRODUCT(ASSERT_FALSE(TestDependencyContext::find_stale_entries(depContext)));
-  ASSERT_FALSE(TestDependencyContext::has_stale_entries(depContext));
-
-  nmethod* nm = c._nmethods[id];
-  depContext.remove_dependent_nmethod(nm, delete_immediately);
 
-  if (!delete_immediately) {
-    NOT_PRODUCT(ASSERT_TRUE(TestDependencyContext::find_stale_entries(depContext)));
-    ASSERT_TRUE(TestDependencyContext::has_stale_entries(depContext));
-    NOT_PRODUCT(ASSERT_TRUE(depContext.is_dependent_nmethod(nm)));
-    depContext.expunge_stale_entries();
-  }
+  nmethod* nm = &c._nmethods[id];
+  depContext.remove_dependent_nmethod(nm);
 
-  NOT_PRODUCT(ASSERT_FALSE(TestDependencyContext::find_stale_entries(depContext)));
-  ASSERT_FALSE(TestDependencyContext::has_stale_entries(depContext));
   NOT_PRODUCT(ASSERT_FALSE(depContext.is_dependent_nmethod(nm)));
 }
 
 TEST_VM(code, dependency_context) {
-  test_remove_dependent_nmethod(0, false);
-  test_remove_dependent_nmethod(1, false);
-  test_remove_dependent_nmethod(2, false);
-
-  test_remove_dependent_nmethod(0, true);
-  test_remove_dependent_nmethod(1, true);
-  test_remove_dependent_nmethod(2, true);
+  test_remove_dependent_nmethod(0);
+  test_remove_dependent_nmethod(1);
+  test_remove_dependent_nmethod(2);
 }
--- a/test/hotspot/jtreg/ProblemList.txt	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/ProblemList.txt	Mon Dec 03 10:08:18 2018 +0100
@@ -61,8 +61,6 @@
 
 compiler/runtime/Test8168712.java 8211769,8211771 generic-ppc64,generic-ppc64le,linux-s390x
 
-compiler/intrinsics/mathexact/MulExactLConstantTest.java 8214189 windows-all
-
 #############################################################################
 
 # :hotspot_gc
@@ -101,7 +99,7 @@
 serviceability/sa/ClhsdbField.java 8193639 solaris-all
 serviceability/sa/ClhsdbFindPC.java 8193639,8211767 solaris-all,linux-ppc64le,linux-ppc64
 serviceability/sa/ClhsdbFlags.java 8193639 solaris-all
-serviceability/sa/ClhsdbInspect.java 8193639,8211767 solaris-all,linux-ppc64le,linux-ppc64
+serviceability/sa/ClhsdbInspect.java 8193639,8211767,8213457 solaris-all,linux-ppc64le,linux-ppc64,windows-all
 serviceability/sa/ClhsdbJdis.java 8193639,8211767 solaris-all,linux-ppc64le,linux-ppc64
 serviceability/sa/ClhsdbJhisto.java 8193639,8211767 solaris-all,linux-ppc64le,linux-ppc64
 serviceability/sa/ClhsdbJstack.java 8193639,8211767 solaris-all,linux-ppc64le,linux-ppc64
--- a/test/hotspot/jtreg/applications/jcstress/JcstressRunner.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/applications/jcstress/JcstressRunner.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, 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
@@ -42,7 +42,7 @@
  * jcstress tests wrapper
  */
 @Artifact(organization = "org.openjdk.jcstress", name = "jcstress-tests-all",
-        revision = "0.3", extension = "jar", unpack = false)
+        revision = "0.5", extension = "jar", unpack = false)
 public class JcstressRunner {
 
     public static final String MAIN_CLASS = "org.openjdk.jcstress.Main";
@@ -55,7 +55,7 @@
             throw new Error("TESTBUG: Can not resolve artifacts for "
                             + JcstressRunner.class.getName(), e);
         }
-        return artifacts.get("org.openjdk.jcstress.jcstress-tests-all-0.3")
+        return artifacts.get("org.openjdk.jcstress.jcstress-tests-all-0.5")
                         .toAbsolutePath();
     }
 
@@ -115,4 +115,3 @@
         return result;
     }
 }
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/applications/jcstress/threadlocal.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2017, 2018, 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.
+ */
+
+/* DO NOT MODIFY THIS FILE. GENERATED BY applications.jcstress.TestGenerator */
+
+/**
+ * @test threadlocal
+ * @library /test/lib /
+ * @run driver/timeout=21600 applications.jcstress.JcstressRunner -v -t org.openjdk.jcstress.tests.threadlocal\.
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/integerArithmetic/MultiplyByConstantLongMax.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2018, Red Hat, Inc. 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 8214189
+ * @summary test/hotspot/jtreg/compiler/intrinsics/mathexact/MulExactLConstantTest.java fails on Windows x64 when run with -XX:-TieredCompilation
+ *
+ * @run main/othervm -XX:-TieredCompilation -XX:-BackgroundCompilation -XX:-UseOnStackReplacement MultiplyByConstantLongMax
+ *
+ */
+
+public class MultiplyByConstantLongMax {
+    public static void main(String[] args) {
+        for (int i = 0; i < 20_000; i++) {
+            if (test(1) != Long.MAX_VALUE) {
+                throw new RuntimeException("incorrect result");
+            }
+        }
+    }
+
+    private static long test(long v) {
+        return v * Long.MAX_VALUE;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/loopopts/LoadVectorFromStableArray.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2018, Red Hat, Inc. 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 8214344
+ * @summary LoadVector from a known element of a stable array shouldn't attempt to constant fold
+ * @modules java.base/jdk.internal.vm.annotation
+ *
+ * @run main/bootclasspath/othervm -XX:-TieredCompilation -XX:-BackgroundCompilation -XX:-UseOnStackReplacement LoadVectorFromStableArray
+ *
+ */
+
+import jdk.internal.vm.annotation.Stable;
+
+public class LoadVectorFromStableArray {
+    public static void main(String[] args) {
+        byte[] byte_array = new byte[100];
+        for (int i = 0; i < 20_000; i++) {
+            test_helper(0, 0);
+            test_helper(42, 0);
+            test_helper2(0, 20, byte_array, byte_array);
+        }
+        for (int i = 0; i < 20_000; i++) {
+            test(20, true);
+            test(20, false);
+        }
+    }
+
+    static @Stable byte[] stable_array1 = new byte[100];
+    static @Stable byte[] stable_array2 = new byte[100];
+
+    private static void test(int stop, boolean flag) {
+        int start = 0;
+        byte[] byte_array1 = stable_array1;
+        byte[] byte_array2 = flag ? stable_array1 : stable_array2;
+        int k = 2;
+        for (; k < 4; k *= 2);
+        int i = test_helper(k, stop);
+        // Loop in this method is unrolled and vectorized, then, upper
+        // bound is found to be constant and small. A single iteration
+        // of the main loop is executed. That iteration attempts to
+        // load a vector element from the array at a constant offset.
+        test_helper2(start, i, byte_array1, byte_array2);
+    }
+
+
+    private static void test_helper2(int start, int stop, byte[] byte_array1, byte[] byte_array2) {
+        for (int j = start; j < stop; j++) {
+            byte b = byte_array1[j+3];
+            byte_array2[j+3] = b;
+        }
+    }
+
+    private static int test_helper(int k, int stop) {
+        int i = 0;
+        if (k == 42) {
+            i = stop;
+        } else {
+            i = 5;
+        }
+        return i;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/ClassUnload/UnloadInterfaceTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2018, 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 UnloadInterfaceTest
+ * @requires vm.opt.final.ClassUnloading
+ * @modules java.base/jdk.internal.misc
+ * @library /runtime/testlibrary /test/lib
+ * @compile test/Interface.java
+ * @compile test/ImplementorClass.java
+ * @build sun.hotspot.WhiteBox
+ * @run driver ClassFileInstaller sun.hotspot.WhiteBox
+ *                              sun.hotspot.WhiteBox$WhiteBoxPermission
+ * @run main/othervm -Xbootclasspath/a:. -Xmn8m -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xlog:class+unload=trace UnloadInterfaceTest
+ */
+import sun.hotspot.WhiteBox;
+import test.Interface;
+import java.lang.ClassLoader;
+
+/**
+ * Test that verifies that class unloaded removes the implementor from its the interface that it implements
+ * via logging.
+ * [1.364s][info][class,unload] unloading class test.ImplementorClass 0x00000008000a2840
+ * [1.366s][trace][class,unload] unlinking class (subclass): test.ImplementorClass
+ * [1.366s][trace][class,unload] unlinking class (implementor): test.ImplementorClass
+ */
+public class UnloadInterfaceTest {
+    private static String className = "test.ImplementorClass";
+    private static String interfaceName = "test.Interface";
+
+    static class LoaderToUnload extends ClassLoader {
+       ClassLoader myParent;
+        public Class loadClass(String name) throws ClassNotFoundException {
+            if (name.contains(className)) {
+              System.out.println("className found " + className);
+              byte[] data = ClassUnloadCommon.getClassData(name);
+              return defineClass(name, data, 0, data.length);
+            } else {
+              return myParent.loadClass(name);
+            }
+        }
+        public LoaderToUnload(ClassLoader parent) {
+            super();
+            myParent = parent;
+        }
+    }
+
+    public static void main(String... args) throws Exception {
+       run();
+    }
+
+    private static void run() throws Exception {
+        final WhiteBox wb = WhiteBox.getWhiteBox();
+
+        ClassUnloadCommon.failIf(wb.isClassAlive(className), "is not expected to be alive yet");
+
+        // Load interface Class with one class loader.
+        ClassLoader icl = ClassUnloadCommon.newClassLoader();
+        Class<?> ic = icl.loadClass(interfaceName);
+
+        ClassLoader cl = new LoaderToUnload(icl);
+        Class<?> c = cl.loadClass(className);
+        Object o = c.newInstance();
+
+        ClassUnloadCommon.failIf(!wb.isClassAlive(className), "should be live here");
+        ClassUnloadCommon.failIf(!wb.isClassAlive(interfaceName), "should be live here");
+
+        cl = null; c = null; o = null;
+        ClassUnloadCommon.triggerUnloading();
+        ClassUnloadCommon.failIf(wb.isClassAlive(className), "should have been unloaded");
+        ClassUnloadCommon.failIf(!wb.isClassAlive(interfaceName), "should be live here");
+        System.out.println("We still have Interface referenced" + ic);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/ClassUnload/test/ImplementorClass.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2018, 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;
+
+public class ImplementorClass implements Interface {
+  public void foo() { System.out.println("foo implemented!"); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/ClassUnload/test/Interface.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2018, 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;
+
+public interface Interface {
+  public void foo();
+}
--- a/test/hotspot/jtreg/runtime/Dictionary/CleanProtectionDomain.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/runtime/Dictionary/CleanProtectionDomain.java	Mon Dec 03 10:08:18 2018 +0100
@@ -78,7 +78,7 @@
         if (cnt++ % 30 == 0) {
           System.gc();
         }
-        removedCount = wb.resolvedMethodRemovedCount();
+        removedCount = wb.protectionDomainRemovedCount();
         if (removedCountOrig != removedCount) {
           break;
         }
--- a/test/hotspot/jtreg/runtime/Nestmates/membership/TestNestmateMembership.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/runtime/Nestmates/membership/TestNestmateMembership.java	Mon Dec 03 10:08:18 2018 +0100
@@ -719,8 +719,8 @@
 
     static void test_SelfHostInvoke() throws Throwable {
         System.out.println("Testing for class that lists itself as nest-host");
-        String msg = "Type TestNestmateMembership$TargetSelfHost is not a nest member" +
-            " of TestNestmateMembership$TargetSelfHost: current type is not listed as a nest member";
+        String msg = "Type TestNestmateMembership$TargetSelfHost (loader: 'app') is not a nest member" +
+            " of TestNestmateMembership$TargetSelfHost (loader: 'app'): current type is not listed as a nest member";
         try {
             Caller.invokeTargetSelfHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -744,8 +744,8 @@
             check_expected(expected, msg);
         }
 
-        msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
-            " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerSelfHost (loader: 'app') is not a nest member" +
+            " of TestNestmateMembership$CallerSelfHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerSelfHost.invokeTarget();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -753,8 +753,8 @@
         catch (IncompatibleClassChangeError expected) {
             check_expected(expected, msg);
         }
-        msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
-            " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerSelfHost (loader: 'app') is not a nest member" +
+            " of TestNestmateMembership$CallerSelfHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerSelfHost.invokeTargetSelfHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -824,8 +824,8 @@
 
     static void test_NotInstanceHostInvoke() throws Throwable {
         System.out.println("Testing for nest-host class that is not an instance class");
-        String msg = "Type TestNestmateMembership$TargetNotInstanceHost is not a "+
-            "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
+        String msg = "Type TestNestmateMembership$TargetNotInstanceHost (loader: 'app') is not a "+
+            "nest member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member";
         try {
             Caller.invokeTargetNotInstanceHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -849,8 +849,8 @@
             check_expected(expected, msg);
         }
 
-        msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
-            "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotInstanceHost (loader: 'app') is not a "+
+            "nest member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotInstanceHost.invokeTarget();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -858,8 +858,8 @@
         catch (IncompatibleClassChangeError expected) {
             check_expected(expected, msg);
         }
-        msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
-            "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotInstanceHost (loader: 'app') is not a "+
+            "nest member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotInstanceHost.invokeTargetNotInstanceHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -871,8 +871,8 @@
 
     static void test_NotOurHostInvoke() throws Throwable {
         System.out.println("Testing for nest-host class that does not list us in its nest");
-        String msg = "Type TestNestmateMembership$TargetNotOurHost is not a nest member" +
-            " of InvalidNestHost: current type is not listed as a nest member";
+        String msg = "Type TestNestmateMembership$TargetNotOurHost (loader: 'app') is not a nest member" +
+            " of InvalidNestHost (loader: 'app'): current type is not listed as a nest member";
         try {
             Caller.invokeTargetNotOurHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -896,8 +896,8 @@
             check_expected(expected, msg);
         }
 
-        msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
-            " of InvalidNestHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotOurHost (loader: 'app') is not a nest member" +
+            " of InvalidNestHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotOurHost.invokeTarget();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -905,8 +905,8 @@
         catch (IncompatibleClassChangeError expected) {
             check_expected(expected, msg);
         }
-        msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
-            " of InvalidNestHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotOurHost (loader: 'app') is not a nest member" +
+            " of InvalidNestHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotOurHost.invokeTargetNotOurHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -918,8 +918,8 @@
 
     static void test_WrongPackageHostInvoke() {
         System.out.println("Testing for nest-host and nest-member in different packages");
-        String msg = "Type P2.PackagedNestHost2$Member is not a nest member of " +
-            "P1.PackagedNestHost: types are in different packages";
+        String msg = "Type P2.PackagedNestHost2$Member (loader: 'app') is not a nest member of " +
+            "P1.PackagedNestHost (loader: 'app'): types are in different packages";
         try {
             P1.PackagedNestHost.doInvoke();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -998,8 +998,8 @@
 
     static void test_SelfHostConstruct() throws Throwable {
         System.out.println("Testing for class that lists itself as nest-host");
-        String msg = "Type TestNestmateMembership$TargetSelfHost is not a nest member" +
-            " of TestNestmateMembership$TargetSelfHost: current type is not listed as a nest member";
+        String msg = "Type TestNestmateMembership$TargetSelfHost (loader: 'app') is not a nest member" +
+            " of TestNestmateMembership$TargetSelfHost (loader: 'app'): current type is not listed as a nest member";
         try {
             Caller.newTargetSelfHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1023,8 +1023,8 @@
             check_expected(expected, msg);
         }
 
-        msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
-            " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerSelfHost (loader: 'app') is not a nest member" +
+            " of TestNestmateMembership$CallerSelfHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerSelfHost.newTarget();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1032,8 +1032,8 @@
         catch (IncompatibleClassChangeError expected) {
             check_expected(expected, msg);
         }
-        msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
-            " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerSelfHost (loader: 'app') is not a nest member" +
+            " of TestNestmateMembership$CallerSelfHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerSelfHost.newTargetSelfHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1095,8 +1095,8 @@
 
     static void test_NotInstanceHostConstruct() throws Throwable {
         System.out.println("Testing for nest-host class that is not an instance class");
-        String msg = "Type TestNestmateMembership$TargetNotInstanceHost is not a "+
-            "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
+        String msg = "Type TestNestmateMembership$TargetNotInstanceHost (loader: 'app') is not a "+
+            "nest member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member";
         try {
             Caller.newTargetNotInstanceHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1120,8 +1120,8 @@
             check_expected(expected, msg);
         }
 
-        msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
-            "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotInstanceHost (loader: 'app') is not a "+
+            "nest member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotInstanceHost.newTarget();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1129,8 +1129,8 @@
         catch (IncompatibleClassChangeError expected) {
             check_expected(expected, msg);
         }
-        msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
-            "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotInstanceHost (loader: 'app') is not a "+
+            "nest member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotInstanceHost.newTargetNotInstanceHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1142,8 +1142,8 @@
 
     static void test_NotOurHostConstruct() throws Throwable {
         System.out.println("Testing for nest-host class that does not list us in its nest");
-        String msg = "Type TestNestmateMembership$TargetNotOurHost is not a nest member" +
-            " of InvalidNestHost: current type is not listed as a nest member";
+        String msg = "Type TestNestmateMembership$TargetNotOurHost (loader: 'app') is not a nest member" +
+            " of InvalidNestHost (loader: 'app'): current type is not listed as a nest member";
         try {
             Caller.newTargetNotOurHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1167,8 +1167,8 @@
             check_expected(expected, msg);
         }
 
-        msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
-            " of InvalidNestHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotOurHost (loader: 'app') is not a nest member" +
+            " of InvalidNestHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotOurHost.newTarget();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1176,8 +1176,8 @@
         catch (IncompatibleClassChangeError expected) {
             check_expected(expected, msg);
         }
-        msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
-            " of InvalidNestHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotOurHost (loader: 'app') is not a nest member" +
+            " of InvalidNestHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotOurHost.newTargetNotOurHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1189,8 +1189,8 @@
 
     static void test_WrongPackageHostConstruct() {
         System.out.println("Testing for nest-host and nest-member in different packages");
-        String msg = "Type P2.PackagedNestHost2$Member is not a nest member of " +
-            "P1.PackagedNestHost: types are in different packages";
+        String msg = "Type P2.PackagedNestHost2$Member (loader: 'app') is not a nest member of " +
+            "P1.PackagedNestHost (loader: 'app'): types are in different packages";
         try {
             P1.PackagedNestHost.doConstruct();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1269,8 +1269,8 @@
 
     static void test_SelfHostGetField() throws Throwable {
         System.out.println("Testing for class that lists itself as nest-host");
-        String msg = "Type TestNestmateMembership$TargetSelfHost is not a nest member" +
-            " of TestNestmateMembership$TargetSelfHost: current type is not listed as a nest member";
+        String msg = "Type TestNestmateMembership$TargetSelfHost (loader: 'app') is not a nest member" +
+            " of TestNestmateMembership$TargetSelfHost (loader: 'app'): current type is not listed as a nest member";
         try {
             Caller.getFieldTargetSelfHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1293,8 +1293,8 @@
             check_expected(expected, msg);
         }
 
-        msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
-            " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerSelfHost (loader: 'app') is not a nest member" +
+            " of TestNestmateMembership$CallerSelfHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerSelfHost.getFieldTarget();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1302,8 +1302,8 @@
         catch (IncompatibleClassChangeError expected) {
             check_expected(expected, msg);
         }
-        msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
-            " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerSelfHost (loader: 'app') is not a nest member" +
+            " of TestNestmateMembership$CallerSelfHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerSelfHost.getFieldTargetSelfHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1364,8 +1364,8 @@
 
     static void test_NotInstanceHostGetField() throws Throwable {
         System.out.println("Testing for nest-host class that is not an instance class");
-        String msg = "Type TestNestmateMembership$TargetNotInstanceHost is not a "+
-            "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
+        String msg = "Type TestNestmateMembership$TargetNotInstanceHost (loader: 'app') is not a "+
+            "nest member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member";
         try {
             Caller.getFieldTargetNotInstanceHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1388,8 +1388,8 @@
             check_expected(expected, msg);
         }
 
-        msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
-            "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotInstanceHost (loader: 'app') is not a "+
+            "nest member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotInstanceHost.getFieldTarget();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1397,8 +1397,8 @@
         catch (IncompatibleClassChangeError expected) {
             check_expected(expected, msg);
         }
-        msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
-            "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotInstanceHost (loader: 'app') is not a "+
+            "nest member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotInstanceHost.getFieldTargetNotInstanceHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1410,8 +1410,8 @@
 
     static void test_NotOurHostGetField() throws Throwable {
         System.out.println("Testing for nest-host class that does not list us in its nest");
-        String msg = "Type TestNestmateMembership$TargetNotOurHost is not a nest member" +
-            " of InvalidNestHost: current type is not listed as a nest member";
+        String msg = "Type TestNestmateMembership$TargetNotOurHost (loader: 'app') is not a nest member" +
+            " of InvalidNestHost (loader: 'app'): current type is not listed as a nest member";
         try {
             Caller.getFieldTargetNotOurHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1434,8 +1434,8 @@
             check_expected(expected, msg);
         }
 
-        msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
-            " of InvalidNestHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotOurHost (loader: 'app') is not a nest member" +
+            " of InvalidNestHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotOurHost.getFieldTarget();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1443,8 +1443,8 @@
         catch (IncompatibleClassChangeError expected) {
             check_expected(expected, msg);
         }
-        msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
-            " of InvalidNestHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotOurHost (loader: 'app') is not a nest member" +
+            " of InvalidNestHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotOurHost.getFieldTargetNotOurHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1456,8 +1456,8 @@
 
     static void test_WrongPackageHostGetField() {
         System.out.println("Testing for nest-host and nest-member in different packages");
-        String msg = "Type P2.PackagedNestHost2$Member is not a nest member of " +
-            "P1.PackagedNestHost: types are in different packages";
+        String msg = "Type P2.PackagedNestHost2$Member (loader: 'app') is not a nest member of " +
+            "P1.PackagedNestHost (loader: 'app'): types are in different packages";
         try {
             P1.PackagedNestHost.doGetField();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1534,8 +1534,8 @@
 
     static void test_SelfHostPutField() throws Throwable {
         System.out.println("Testing for class that lists itself as nest-host");
-        String msg = "Type TestNestmateMembership$TargetSelfHost is not a nest member" +
-            " of TestNestmateMembership$TargetSelfHost: current type is not listed as a nest member";
+        String msg = "Type TestNestmateMembership$TargetSelfHost (loader: 'app') is not a nest member" +
+            " of TestNestmateMembership$TargetSelfHost (loader: 'app'): current type is not listed as a nest member";
         try {
             Caller.putFieldTargetSelfHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1558,8 +1558,8 @@
             check_expected(expected, msg);
         }
 
-        msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
-            " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerSelfHost (loader: 'app') is not a nest member" +
+            " of TestNestmateMembership$CallerSelfHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerSelfHost.putFieldTarget();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1567,8 +1567,8 @@
         catch (IncompatibleClassChangeError expected) {
             check_expected(expected, msg);
         }
-        msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
-            " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerSelfHost (loader: 'app') is not a nest member" +
+            " of TestNestmateMembership$CallerSelfHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerSelfHost.putFieldTargetSelfHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1629,8 +1629,8 @@
 
     static void test_NotInstanceHostPutField() throws Throwable {
         System.out.println("Testing for nest-host class that is not an instance class");
-        String msg = "Type TestNestmateMembership$TargetNotInstanceHost is not a "+
-            "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
+        String msg = "Type TestNestmateMembership$TargetNotInstanceHost (loader: 'app') is not a "+
+            "nest member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member";
         try {
             Caller.putFieldTargetNotInstanceHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1653,8 +1653,8 @@
             check_expected(expected, msg);
         }
 
-        msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
-            "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotInstanceHost (loader: 'app') is not a "+
+            "nest member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotInstanceHost.putFieldTarget();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1662,8 +1662,8 @@
         catch (IncompatibleClassChangeError expected) {
             check_expected(expected, msg);
         }
-        msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
-            "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotInstanceHost (loader: 'app') is not a "+
+            "nest member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotInstanceHost.putFieldTargetNotInstanceHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1675,8 +1675,8 @@
 
     static void test_NotOurHostPutField() throws Throwable {
         System.out.println("Testing for nest-host class that does not list us in its nest");
-        String msg = "Type TestNestmateMembership$TargetNotOurHost is not a nest member" +
-            " of InvalidNestHost: current type is not listed as a nest member";
+        String msg = "Type TestNestmateMembership$TargetNotOurHost (loader: 'app') is not a nest member" +
+            " of InvalidNestHost (loader: 'app'): current type is not listed as a nest member";
         try {
             Caller.putFieldTargetNotOurHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1699,8 +1699,8 @@
             check_expected(expected, msg);
         }
 
-        msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
-            " of InvalidNestHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotOurHost (loader: 'app') is not a nest member" +
+            " of InvalidNestHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotOurHost.putFieldTarget();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1708,8 +1708,8 @@
         catch (IncompatibleClassChangeError expected) {
             check_expected(expected, msg);
         }
-        msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
-            " of InvalidNestHost: current type is not listed as a nest member";
+        msg = "Type TestNestmateMembership$CallerNotOurHost (loader: 'app') is not a nest member" +
+            " of InvalidNestHost (loader: 'app'): current type is not listed as a nest member";
         try {
             CallerNotOurHost.putFieldTargetNotOurHost();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
@@ -1721,8 +1721,8 @@
 
     static void test_WrongPackageHostPutField() {
         System.out.println("Testing for nest-host and nest-member in different packages");
-        String msg = "Type P2.PackagedNestHost2$Member is not a nest member of " +
-            "P1.PackagedNestHost: types are in different packages";
+        String msg = "Type P2.PackagedNestHost2$Member (loader: 'app') is not a nest member of " +
+            "P1.PackagedNestHost (loader: 'app'): types are in different packages";
         try {
             P1.PackagedNestHost.doPutField();
             throw new Error("Missing IncompatibleClassChangeError: " + msg);
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/ReplaceCriticalClasses.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/ReplaceCriticalClasses.java	Mon Dec 03 10:08:18 2018 +0100
@@ -41,8 +41,13 @@
 
 public class ReplaceCriticalClasses {
     public static void main(String args[]) throws Throwable {
+        ReplaceCriticalClasses rcc = new ReplaceCriticalClasses();
+        rcc.process(args);
+    }
+
+    public void process(String args[]) throws Throwable {
         if (args.length == 0) {
-            launchChildProcesses();
+            launchChildProcesses(getTests());
         } else if (args.length == 3 && args[0].equals("child")) {
             Class klass = Class.forName(args[2].replace("/", "."));
             if (args[1].equals("-shared")) {
@@ -58,7 +63,7 @@
         }
     }
 
-    static void launchChildProcesses() throws Throwable {
+    public String[] getTests() {
         String tests[] = {
             // CDS should be disabled -- these critical classes will be replaced
             // because JvmtiExport::early_class_hook_env() is true.
@@ -74,18 +79,24 @@
             "java/lang/Cloneable",
             "java/io/Serializable",
 
-            // Try to replace classes that are used by the archived subgraph graphs.
-            "-subgraph java/util/ArrayList",
-            "-subgraph java/lang/module/ResolvedModule",
+            /* Try to replace classes that are used by the archived subgraph graphs.
+               The following test cases are in ReplaceCriticalClassesForSubgraphs.java.
+            "-early -notshared -subgraph java/lang/module/ResolvedModule jdk.internal.module.ArchivedModuleGraph",
+            "-early -notshared -subgraph java/lang/Long java.lang.Long$LongCache",
+            "-subgraph java/lang/Long java.lang.Long$LongCache",
+            */
 
-            // Replace classes that are loaded after JVMTI_PHASE_PRIMORDIAL. It's OK to replace such
+            // Replace classes that are loaded after JVMTI_PHASE_PRIMORDIAL. It's OK to replace
+            // such
             // classes even when CDS is enabled. Nothing bad should happen.
-            "-notshared jdk/internal/vm/PostVMInitHook",
             "-notshared java/util/Locale",
             "-notshared sun/util/locale/BaseLocale",
             "-notshared java/lang/Readable",
         };
+        return tests;
+    }
 
+    static void launchChildProcesses(String tests[]) throws Throwable {
         int n = 0;
         for (String s : tests) {
             System.out.println("Test case[" + (n++) + "] = \"" + s + "\"");
@@ -96,9 +107,10 @@
 
     static void launchChild(String args[]) throws Throwable {
         if (args.length < 1) {
-            throw new RuntimeException("Invalid test case. Should be <-early> <-subgraph> <-notshared> klassName");
+            throw new RuntimeException("Invalid test case. Should be <-early> <-subgraph> <-notshared> klassName subgraphKlass");
         }
         String klassName = null;
+        String subgraphKlass = null;
         String early = "";
         boolean subgraph = false;
         String shared = "-shared";
@@ -112,11 +124,19 @@
             } else if (opt.equals("-notshared")) {
                 shared = opt;
             } else {
+              if (!subgraph) {
                 throw new RuntimeException("Unknown option: " + opt);
+              }
             }
         }
-        klassName = args[args.length-1];
+        if (subgraph) {
+          klassName = args[args.length-2];
+          subgraphKlass = args[args.length-1];
+        } else {
+          klassName = args[args.length-1];
+        }
         Class.forName(klassName.replace("/", ".")); // make sure it's a valid class
+        final String subgraphInit = "initialize_from_archived_subgraph " + subgraphKlass;
 
         // We will pass an option like "-agentlib:SimpleClassFileLoadHook=java/util/Locale,XXX,XXX".
         // The SimpleClassFileLoadHook agent would attempt to hook the java/util/Locale class
@@ -142,8 +162,7 @@
                        "-Xbootclasspath/a:" + ClassFileInstaller.getJarPath("whitebox.jar"));
 
         if (subgraph) {
-            opts.addSuffix("-Xlog:cds+heap",
-                           "-Xlog:class+load");
+            opts.addSuffix("-Xlog:cds,cds+heap");
         }
 
         opts.addSuffix("ReplaceCriticalClasses",
@@ -152,11 +171,22 @@
                        klassName);
 
         final boolean expectDisable = !early.equals("");
+        final boolean checkSubgraph = subgraph;
+        final boolean expectShared = shared.equals("-shared");
         CDSTestUtils.run(opts).assertNormalExit(out -> {
                 if (expectDisable) {
                     out.shouldContain("UseSharedSpaces: CDS is disabled because early JVMTI ClassFileLoadHook is in use.");
                     System.out.println("CDS disabled as expected");
                 }
+                if (checkSubgraph) {
+                    if (expectShared) {
+                        if (!out.getOutput().contains("UseSharedSpaces: Unable to map at required address in java heap")) {
+                            out.shouldContain(subgraphInit);
+                        }
+                    } else {
+                      out.shouldNotContain(subgraphInit);
+                    }
+                }
             });
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/ReplaceCriticalClassesForSubgraphs.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018, 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
+ * @summary Tests how CDS works when critical library classes are replaced with JVMTI ClassFileLoadHook
+ * @library /test/lib
+ * @requires vm.cds.archived.java.heap
+ * @build sun.hotspot.WhiteBox
+ * @run driver ClassFileInstaller -jar whitebox.jar sun.hotspot.WhiteBox
+ * @run main/othervm/native ReplaceCriticalClassesForSubgraphs
+ */
+
+public class ReplaceCriticalClassesForSubgraphs extends ReplaceCriticalClasses {
+    public static void main(String args[]) throws Throwable {
+        ReplaceCriticalClassesForSubgraphs rcc = new ReplaceCriticalClassesForSubgraphs();
+        rcc.process(args);
+    }
+
+    public String[] getTests() {
+        String tests[] = {
+            // Try to replace classes that are used by the archived subgraph graphs.
+            "-early -notshared -subgraph java/lang/module/ResolvedModule jdk.internal.module.ArchivedModuleGraph",
+            "-early -notshared -subgraph java/lang/Long java.lang.Long$LongCache",
+            "-subgraph java/lang/Long java.lang.Long$LongCache",
+        };
+        return tests;
+    }
+}
--- a/test/hotspot/jtreg/runtime/appcds/LotsOfClasses.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/LotsOfClasses.java	Mon Dec 03 10:08:18 2018 +0100
@@ -57,9 +57,16 @@
         opts.addSuffix("--add-modules");
         opts.addSuffix("ALL-SYSTEM");
         opts.addSuffix("-Xlog:hashtables");
+        opts.addSuffix("-Xms500m");
+        opts.addSuffix("-Xmx500m");
 
         OutputAnalyzer out = CDSTestUtils.createArchive(opts);
-        CDSTestUtils.checkDump(out);
+        try {
+            CDSTestUtils.checkDump(out);
+        } catch (java.lang.RuntimeException re) {
+            out.shouldContain(
+                "number of memory regions exceeds maximum due to fragmentation");
+        }
     }
 
     static void findAllClasses(ArrayList<String> list) throws Throwable {
--- a/test/hotspot/jtreg/runtime/appcds/cacheObject/DifferentHeapSizes.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/DifferentHeapSizes.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  * @compile ../test-classes/Hello.java
  * @build sun.hotspot.WhiteBox
  * @run driver ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. DifferentHeapSizes
+ * @run main/othervm/timeout=160 -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. DifferentHeapSizes
  */
 
 import jdk.test.lib.process.OutputAnalyzer;
--- a/test/hotspot/jtreg/runtime/logging/SafepointCleanupTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/runtime/logging/SafepointCleanupTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,7 +39,8 @@
         OutputAnalyzer output = new OutputAnalyzer(pb.start());
         output.shouldContain("[safepoint,cleanup]");
         output.shouldContain("safepoint cleanup tasks");
-        output.shouldContain("deflating idle monitors");
+        output.shouldContain("deflating global idle monitors");
+        output.shouldContain("deflating per-thread idle monitors");
         output.shouldContain("updating inline caches");
         output.shouldContain("compilation policy safepoint handler");
         output.shouldContain("purging class loader data graph");
--- a/test/hotspot/jtreg/runtime/testlibrary/ClassUnloadCommon.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/runtime/testlibrary/ClassUnloadCommon.java	Mon Dec 03 10:08:18 2018 +0100
@@ -27,7 +27,10 @@
  * for an example.
  */
 
+
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -104,4 +107,22 @@
             throw new RuntimeException(e);
         }
     }
+
+    // Get data for pre-compiled class file to load.
+    public static byte[] getClassData(String name) {
+        try {
+           String TempName = name.replaceAll("\\.", "/");
+           String currentDir = System.getProperty("test.classes");
+           String filename = currentDir + File.separator + TempName + ".class";
+           System.out.println("filename is " + filename);
+           FileInputStream fis = new FileInputStream(filename);
+           byte[] b = new byte[5000];
+           int cnt = fis.read(b, 0, 5000);
+           byte[] c = new byte[cnt];
+           for (int i=0; i<cnt; i++) c[i] = b[i];
+              return c;
+        } catch (IOException e) {
+           return null;
+        }
+    }
 }
--- a/test/hotspot/jtreg/serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitor.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitor.java	Mon Dec 03 10:08:18 2018 +0100
@@ -186,7 +186,8 @@
     throw new RuntimeException("Could not set the sampler");
   }
 
-  public static Frame[] allocateAndCheckFrames() {
+  public static Frame[] allocateAndCheckFrames(boolean shouldFindFrames,
+      boolean enableSampling) {
     if (!eventStorageIsEmpty()) {
       throw new RuntimeException("Statistics should be null to begin with.");
     }
@@ -194,20 +195,36 @@
     // Put sampling rate to 100k to ensure samples are collected.
     setSamplingInterval(100 * 1024);
 
-    enableSamplingEvents();
+    if (enableSampling) {
+      enableSamplingEvents();
+    }
 
     List<Frame> frameList = allocate();
-    frameList.add(new Frame("allocateAndCheckFrames", "()[LMyPackage/Frame;", "HeapMonitor.java",
-          199));
+    frameList.add(new Frame("allocateAndCheckFrames", "(ZZ)[LMyPackage/Frame;", "HeapMonitor.java",
+          202));
     Frame[] frames = frameList.toArray(new Frame[0]);
 
-    if (!obtainedEvents(frames) && !garbageContains(frames)) {
-      throw new RuntimeException("No expected events were found.");
+    boolean foundLive = obtainedEvents(frames);
+    boolean foundGarbage = garbageContains(frames);
+    if (shouldFindFrames) {
+      if (!foundLive && !foundGarbage) {
+        throw new RuntimeException("No expected events were found: "
+            + foundLive + ", " + foundGarbage);
+      }
+    } else {
+      if (foundLive || foundGarbage) {
+        throw new RuntimeException("Were not expecting events, but found some: "
+            + foundLive + ", " + foundGarbage);
+      }
     }
 
     return frames;
   }
 
+  public static Frame[] allocateAndCheckFrames() {
+    return allocateAndCheckFrames(true, true);
+  }
+
   public native static int sampledEvents();
   public native static boolean obtainedEvents(Frame[] frames, boolean checkLines);
   public native static boolean garbageContains(Frame[] frames, boolean checkLines);
--- a/test/hotspot/jtreg/serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorEventOnOffTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorEventOnOffTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,40 +34,17 @@
  * @run main/othervm/native -agentlib:HeapMonitorTest MyPackage.HeapMonitorEventOnOffTest
  */
 public class HeapMonitorEventOnOffTest {
-  private static void checkNoEventsAreBeingSent() {
-    HeapMonitor.resetEventStorage();
-    HeapMonitor.repeatAllocate(5);
-
-    // Check that the data is not available while heap sampling is disabled.
-    boolean status = HeapMonitor.eventStorageIsEmpty();
-    if (!status) {
-      throw new RuntimeException("Storage is not empty after allocating with disabled events.");
-    }
-  }
-
-  private static void checkEventsAreBeingSent() {
-    List<Frame> frameList = HeapMonitor.repeatAllocate(5);
-
-    frameList.add(new Frame("checkEventsAreBeingSent", "()V", "HeapMonitorEventOnOffTest.java", 49));
-    Frame[] frames = frameList.toArray(new Frame[0]);
-
-    // Check that the data is available while heap sampling is enabled.
-    boolean status = HeapMonitor.obtainedEvents(frames);
-    if (!status) {
-      throw new RuntimeException("Failed to find the traces after allocating with enabled events.");
-    }
-  }
-
   public static void main(String[] args) {
     HeapMonitor.enableSamplingEvents();
-    checkEventsAreBeingSent();
+    HeapMonitor.allocateAndCheckFrames();
 
     // Disabling the notification system should stop events.
     HeapMonitor.disableSamplingEvents();
-    checkNoEventsAreBeingSent();
+    HeapMonitor.resetEventStorage();
+    HeapMonitor.allocateAndCheckFrames(false, false);
 
     // Enabling the notification system should start events again.
     HeapMonitor.enableSamplingEvents();
-    checkEventsAreBeingSent();
+    HeapMonitor.allocateAndCheckFrames();
   }
 }
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach002/attach002Agent00.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach002/attach002Agent00.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -52,7 +52,7 @@
 static jvmtiEvent testEvents[] = {
         JVMTI_EVENT_CLASS_LOAD,
         JVMTI_EVENT_CLASS_PREPARE,
-        JVMTI_EVENT_CLASS_FILE_LOAD_HOOK};
+        JVMTI_EVENT_CLASS_FILE_LOAD_HOOK };
 
 static const int testEventsNumber = 3;
 
@@ -70,7 +70,7 @@
 int registerNativeMethods(JNIEnv* jni) {
     jclass appClass;
     JNINativeMethod nativeMethods[] = {
-            {(char*) "agentGotCapabilities", (char*) "()Z", (void*) Java_nsk_jvmti_AttachOnDemand_attach002_attach002Target_agentGotCapabilities}};
+            { (char*) "agentGotCapabilities", (char*) "()Z", (void*) Java_nsk_jvmti_AttachOnDemand_attach002_attach002Target_agentGotCapabilities } };
     jint nativeMethodsNumber = 1;
 
     appClass = jni->FindClass(ATTACH002_TARGET_APP_CLASS_NAME);
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach002a/attach002aAgent00.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach002a/attach002aAgent00.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -43,7 +43,7 @@
 static Options* options = NULL;
 static const char* agentName;
 
-static jvmtiEvent testEvents[] = {JVMTI_EVENT_VM_OBJECT_ALLOC};
+static jvmtiEvent testEvents[] = { JVMTI_EVENT_VM_OBJECT_ALLOC };
 
 static const int testEventsNumber = 1;
 
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach008/attach008Agent00.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach008/attach008Agent00.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
 static Options* options = NULL;
 static const char* agentName;
 
-static jvmtiEvent testEvents[] = {JVMTI_EVENT_MONITOR_CONTENDED_ENTER, JVMTI_EVENT_MONITOR_CONTENDED_ENTERED};
+static jvmtiEvent testEvents[] = { JVMTI_EVENT_MONITOR_CONTENDED_ENTER, JVMTI_EVENT_MONITOR_CONTENDED_ENTERED };
 static const int testEventsNumber = 2;
 
 static volatile int monitorEnter = 0;
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach020/attach020Agent00.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach020/attach020Agent00.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -44,7 +44,7 @@
 static Options* options = NULL;
 static const char* agentName;
 
-static jvmtiEvent testEvents[] = {JVMTI_EVENT_GARBAGE_COLLECTION_START, JVMTI_EVENT_GARBAGE_COLLECTION_FINISH};
+static jvmtiEvent testEvents[] = { JVMTI_EVENT_GARBAGE_COLLECTION_START, JVMTI_EVENT_GARBAGE_COLLECTION_FINISH };
 static const int testEventsNumber = 2;
 
 static jrawMonitorID gcFinishMonitor;
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach021/attach021Agent00.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach021/attach021Agent00.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -90,8 +90,8 @@
 int registerNativeMethods(JNIEnv* jni) {
     jclass appClass;
     JNINativeMethod nativeMethods[] = {
-            {(char*) "setTagFor", (char*) "(Ljava/lang/Object;)Z", (void*) Java_nsk_jvmti_AttachOnDemand_attach021_attach021Target_setTagFor},
-            {(char*) "shutdownAgent", (char*) "()V", (void*) Java_nsk_jvmti_AttachOnDemand_attach021_attach021Target_shutdownAgent}};
+            { (char*) "setTagFor", (char*) "(Ljava/lang/Object;)Z", (void*) Java_nsk_jvmti_AttachOnDemand_attach021_attach021Target_setTagFor },
+            { (char*) "shutdownAgent", (char*) "()V", (void*) Java_nsk_jvmti_AttachOnDemand_attach021_attach021Target_shutdownAgent } };
     jint nativeMethodsNumber = 2;
 
     appClass = jni->FindClass(ATTACH021_TARGET_APP_CLASS_NAME);
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach022/attach022Agent00.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach022/attach022Agent00.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -36,7 +36,7 @@
 static Options* options = NULL;
 static const char* agentName;
 
-static jvmtiEvent testEvents[] = {JVMTI_EVENT_OBJECT_FREE, JVMTI_EVENT_VM_OBJECT_ALLOC};
+static jvmtiEvent testEvents[] = { JVMTI_EVENT_OBJECT_FREE, JVMTI_EVENT_VM_OBJECT_ALLOC };
 static const int testEventsNumber = 2;
 
 static volatile int taggedObjectsCounter = 0;
@@ -100,8 +100,8 @@
 int registerNativeMethods(JNIEnv* jni) {
     jclass appClass;
     JNINativeMethod nativeMethods[] = {
-            {(char*)"shutdownAgent", (char*)"(I)Z",
-            (void*) Java_nsk_jvmti_AttachOnDemand_attach022_attach022Target_shutdownAgent}};
+            { (char*)"shutdownAgent", (char*)"(I)Z",
+              (void*) Java_nsk_jvmti_AttachOnDemand_attach022_attach022Target_shutdownAgent } };
     jint nativeMethodsNumber = 1;
 
     appClass = jni->FindClass(ATTACH022_TARGET_APP_CLASS_NAME);
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach037/attach037Agent00.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach037/attach037Agent00.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
 static Options* options = NULL;
 static const char* agentName;
 
-static jvmtiEvent testEvents[] = {JVMTI_EVENT_MONITOR_WAIT, JVMTI_EVENT_MONITOR_WAITED};
+static jvmtiEvent testEvents[] = { JVMTI_EVENT_MONITOR_WAIT, JVMTI_EVENT_MONITOR_WAITED };
 static const int testEventsNumber = 2;
 
 volatile int monitorWaitReceived = 0;
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach038/attach038Agent00.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach038/attach038Agent00.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
 static Options* options = NULL;
 static const char* agentName;
 
-static jvmtiEvent testEvents[] = {JVMTI_EVENT_THREAD_START, JVMTI_EVENT_THREAD_END};
+static jvmtiEvent testEvents[] = { JVMTI_EVENT_THREAD_START, JVMTI_EVENT_THREAD_END };
 static const int testEventsNumber = 2;
 
 static volatile int threadStartReceived = 0;
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach039/attach039Agent00.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach039/attach039Agent00.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -43,7 +43,7 @@
 static Options* options = NULL;
 static const char* agentName;
 
-static jvmtiEvent testEvents[] = {JVMTI_EVENT_THREAD_START, JVMTI_EVENT_THREAD_END};
+static jvmtiEvent testEvents[] = { JVMTI_EVENT_THREAD_START, JVMTI_EVENT_THREAD_END };
 static const int testEventsNumber = 2;
 
 volatile int threadStartReceived = 0;
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach045/attach045Agent02.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach045/attach045Agent02.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
 static Options* options = NULL;
 static const char* agentName;
 
-static jvmtiEvent testEvents[] = {JVMTI_EVENT_THREAD_START, JVMTI_EVENT_THREAD_END};
+static jvmtiEvent testEvents[] = { JVMTI_EVENT_THREAD_START, JVMTI_EVENT_THREAD_END };
 static const int testEventsNumber = 2;
 
 static jrawMonitorID eventsCounterMonitor;
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach045/attach045Agent03.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach045/attach045Agent03.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -40,7 +40,7 @@
 static Options* options = NULL;
 static const char* agentName;
 
-static jvmtiEvent testEvents[] = {JVMTI_EVENT_VM_OBJECT_ALLOC};
+static jvmtiEvent testEvents[] = { JVMTI_EVENT_VM_OBJECT_ALLOC };
 static const int testEventsNumber = 1;
 
 static jrawMonitorID eventsCounterMonitor;
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/Breakpoint/breakpoint001/breakpoint001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/Breakpoint/breakpoint001/breakpoint001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -38,8 +38,8 @@
 
 #define METH_NUM 2
 static const char *METHODS[][2] = {
-    {"bpMethod", "()V"},
-    {"bpMethod2", "()I"}
+    { "bpMethod", "()V" },
+    { "bpMethod2", "()I" }
 };
 
 static const char *CLASS_SIG =
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/ClassPrepare/classprep001/classprep001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/ClassPrepare/classprep001/classprep001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -59,8 +59,8 @@
 static size_t eventsCount = 0;
 static size_t eventsExpected = 0;
 static class_info classes[] = {
-    {"Lnsk/jvmti/ClassPrepare/classprep001$TestInterface;", EXP_STATUS, 2, 1, 0},
-    {"Lnsk/jvmti/ClassPrepare/classprep001$TestClass;", EXP_STATUS, 3, 2, 1}
+    { "Lnsk/jvmti/ClassPrepare/classprep001$TestInterface;", EXP_STATUS, 2, 1, 0 },
+    { "Lnsk/jvmti/ClassPrepare/classprep001$TestClass;", EXP_STATUS, 3, 2, 1 }
 };
 
 void printStatus(jint status) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/ClearFieldAccessWatch/clrfldw001/clrfldw001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/ClearFieldAccessWatch/clrfldw001/clrfldw001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -47,12 +47,12 @@
 static jint result = PASSED;
 static jfieldID thrown_fid = NULL;
 static field fields[] = {
-    {"nsk/jvmti/ClearFieldAccessWatch/clrfldw001", "fld0", "I", 0, NULL},
-    {"nsk/jvmti/ClearFieldAccessWatch/clrfldw001", "fld1", "I", 1, NULL},
-    {"nsk/jvmti/ClearFieldAccessWatch/clrfldw001", "fld2",
-        "Lnsk/jvmti/ClearFieldAccessWatch/clrfldw001a;", 0, NULL},
-    {"nsk/jvmti/ClearFieldAccessWatch/clrfldw001a", "fld3", "[I", 0, NULL},
-    {"nsk/jvmti/ClearFieldAccessWatch/clrfldw001b", "fld4", "F", 0, NULL},
+    { "nsk/jvmti/ClearFieldAccessWatch/clrfldw001", "fld0", "I", 0, NULL },
+    { "nsk/jvmti/ClearFieldAccessWatch/clrfldw001", "fld1", "I", 1, NULL },
+    { "nsk/jvmti/ClearFieldAccessWatch/clrfldw001", "fld2",
+      "Lnsk/jvmti/ClearFieldAccessWatch/clrfldw001a;", 0, NULL },
+    { "nsk/jvmti/ClearFieldAccessWatch/clrfldw001a", "fld3", "[I", 0, NULL },
+    { "nsk/jvmti/ClearFieldAccessWatch/clrfldw001b", "fld4", "F", 0, NULL },
 };
 
 void switchWatch(JNIEnv *env, jint ind, jboolean on) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/ClearFieldModificationWatch/clrfmodw001/clrfmodw001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/ClearFieldModificationWatch/clrfmodw001/clrfmodw001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -47,12 +47,12 @@
 static jint result = PASSED;
 static jfieldID thrown_fid = NULL;
 static field fields[] = {
-    {"nsk/jvmti/ClearFieldModificationWatch/clrfmodw001", "fld0", "I", 0, NULL},
-    {"nsk/jvmti/ClearFieldModificationWatch/clrfmodw001", "fld1", "I", 1, NULL},
-    {"nsk/jvmti/ClearFieldModificationWatch/clrfmodw001", "fld2",
-        "Lnsk/jvmti/ClearFieldModificationWatch/clrfmodw001a;", 0, NULL},
-    {"nsk/jvmti/ClearFieldModificationWatch/clrfmodw001a", "fld3", "[I", 0, NULL},
-    {"nsk/jvmti/ClearFieldModificationWatch/clrfmodw001b", "fld4", "F", 0, NULL},
+    { "nsk/jvmti/ClearFieldModificationWatch/clrfmodw001", "fld0", "I", 0, NULL },
+    { "nsk/jvmti/ClearFieldModificationWatch/clrfmodw001", "fld1", "I", 1, NULL },
+    { "nsk/jvmti/ClearFieldModificationWatch/clrfmodw001", "fld2",
+      "Lnsk/jvmti/ClearFieldModificationWatch/clrfmodw001a;", 0, NULL },
+    { "nsk/jvmti/ClearFieldModificationWatch/clrfmodw001a", "fld3", "[I", 0, NULL },
+    { "nsk/jvmti/ClearFieldModificationWatch/clrfmodw001b", "fld4", "F", 0, NULL },
 };
 
 void switchWatch(JNIEnv *env, jint ind, jboolean on) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/FramePop/framepop001/framepop001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/FramePop/framepop001/framepop001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -49,8 +49,8 @@
 static size_t eventsExpected = 0;
 static size_t eventsCount = 0;
 static pop_info pops[] = {
-    {"Lnsk/jvmti/FramePop/framepop001;", "chain", "()V", 0},
-    {"Lnsk/jvmti/FramePop/framepop001a;", "dummy", "()V", 3},
+    { "Lnsk/jvmti/FramePop/framepop001;", "chain", "()V", 0 },
+    { "Lnsk/jvmti/FramePop/framepop001a;", "dummy", "()V", 3 },
 };
 
 void JNICALL Breakpoint(jvmtiEnv *jvmti_env, JNIEnv *env,
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetAllThreads/allthr001/allthr001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetAllThreads/allthr001/allthr001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -46,11 +46,11 @@
 static jint result = PASSED;
 static jvmtiThreadInfo inf;
 static int sys_cnt;
-static const char *names0[] = {"main"};
-static const char *names1[] = {"main", "thread1"};
-static const char *names2[] = {"main", "Thread-"};
+static const char *names0[] = { "main" };
+static const char *names1[] = { "main", "thread1" };
+static const char *names2[] = { "main", "Thread-" };
 static info thrInfo[] = {
-    {1, names0}, {1, names0}, {2, names1}, {1, names0}, {2, names2}
+    { 1, names0 }, { 1, names0 }, { 2, names1 }, { 1, names0 }, { 2, names2 }
 };
 
 jthread jthr(JNIEnv *env) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetBytecodes/bytecodes001/bytecodes001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetBytecodes/bytecodes001/bytecodes001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -46,13 +46,13 @@
 static jint result = PASSED;
 static jboolean printdump = JNI_FALSE;
 
-static unsigned char m0[] = {0x2A, 0xB7, 0x00, 0x01, 0xB1};
-static unsigned char m1[] = {0xB1};
-static unsigned char m2[] = {0x1A, 0xBC, 0x06, 0x4C, 0x2B, 0xB0};
+static unsigned char m0[] = { 0x2A, 0xB7, 0x00, 0x01, 0xB1 };
+static unsigned char m1[] = { 0xB1 };
+static unsigned char m2[] = { 0x1A, 0xBC, 0x06, 0x4C, 0x2B, 0xB0 };
 static info meth_tab[3] = {
-    {"<init>", "()V",   JNI_FALSE, 5, m0},
-    {"meth1",  "()V",   JNI_FALSE, 1, m1},
-    {"meth2",  "(I)[F", JNI_TRUE,  6, m2}
+    { "<init>", "()V",   JNI_FALSE, 5, m0 },
+    { "meth1",  "()V",   JNI_FALSE, 1, m1 },
+    { "meth2",  "(I)[F", JNI_TRUE,  6, m2 }
 };
 
 #ifdef STATIC_BUILD
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetBytecodes/bytecodes003/bytecodes003.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetBytecodes/bytecodes003/bytecodes003.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -53,211 +53,211 @@
 static jboolean printdump = JNI_FALSE;
 static int eventsCount = 0;
 static opcode_info opcodes[] = {
-    {"nop", 0, 1},
-    {"aconst_null", 1, 1},
-    {"iconst_m1", 2, 1},
-    {"iconst_0", 3, 1},
-    {"iconst_1", 4, 1},
-    {"iconst_2", 5, 1},
-    {"iconst_3", 6, 1},
-    {"iconst_4", 7, 1},
-    {"iconst_5", 8, 1},
-    {"lconst_0", 9, 1},
-    {"lconst_1", 10, 1},
-    {"fconst_0", 11, 1},
-    {"fconst_1", 12, 1},
-    {"fconst_2", 13, 1},
-    {"dconst_0", 14, 1},
-    {"dconst_1", 15, 1},
-    {"bipush", 16, 2},
-    {"sipush", 17, 3},
-    {"ldc", 18, 2},
-    {"ldc_w", 19, 3},
-    {"ldc2_w", 20, 3},
-    {"iload", 21, 2},
-    {"lload", 22, 2},
-    {"fload", 23, 2},
-    {"dload", 24, 2},
-    {"aload", 25, 2},
-    {"iload_0", 26, 1},
-    {"iload_1", 27, 1},
-    {"iload_2", 28, 1},
-    {"iload_3", 29, 1},
-    {"lload_0", 30, 1},
-    {"lload_1", 31, 1},
-    {"lload_2", 32, 1},
-    {"lload_3", 33, 1},
-    {"fload_0", 34, 1},
-    {"fload_1", 35, 1},
-    {"fload_2", 36, 1},
-    {"fload_3", 37, 1},
-    {"dload_0", 38, 1},
-    {"dload_1", 39, 1},
-    {"dload_2", 40, 1},
-    {"dload_3", 41, 1},
-    {"aload_0", 42, 1},
-    {"aload_1", 43, 1},
-    {"aload_2", 44, 1},
-    {"aload_3", 45, 1},
-    {"iaload", 46, 1},
-    {"laload", 47, 1},
-    {"faload", 48, 1},
-    {"daload", 49, 1},
-    {"aaload", 50, 1},
-    {"baload", 51, 1},
-    {"caload", 52, 1},
-    {"saload", 53, 1},
-    {"istore", 54, 2},
-    {"lstore", 55, 2},
-    {"fstore", 56, 2},
-    {"dstore", 57, 2},
-    {"astore", 58, 2},
-    {"istore_0", 59, 1},
-    {"istore_1", 60, 1},
-    {"istore_2", 61, 1},
-    {"istore_3", 62, 1},
-    {"lstore_0", 63, 1},
-    {"lstore_1", 64, 1},
-    {"lstore_2", 65, 1},
-    {"lstore_3", 66, 1},
-    {"fstore_0", 67, 1},
-    {"fstore_1", 68, 1},
-    {"fstore_2", 69, 1},
-    {"fstore_3", 70, 1},
-    {"dstore_0", 71, 1},
-    {"dstore_1", 72, 1},
-    {"dstore_2", 73, 1},
-    {"dstore_3", 74, 1},
-    {"astore_0", 75, 1},
-    {"astore_1", 76, 1},
-    {"astore_2", 77, 1},
-    {"astore_3", 78, 1},
-    {"iastore", 79, 1},
-    {"lastore", 80, 1},
-    {"fastore", 81, 1},
-    {"dastore", 82, 1},
-    {"aastore", 83, 1},
-    {"bastore", 84, 1},
-    {"castore", 85, 1},
-    {"sastore", 86, 1},
-    {"pop", 87, 1},
-    {"pop2", 88, 1},
-    {"dup", 89, 1},
-    {"dup_x1", 90, 1},
-    {"dup_x2", 91, 1},
-    {"dup2", 92, 1},
-    {"dup2_x1", 93, 1},
-    {"dup2_x2", 94, 1},
-    {"swap", 95, 1},
-    {"iadd", 96, 1},
-    {"ladd", 97, 1},
-    {"fadd", 98, 1},
-    {"dadd", 99, 1},
-    {"isub", 100, 1},
-    {"lsub", 101, 1},
-    {"fsub", 102, 1},
-    {"dsub", 103, 1},
-    {"imul", 104, 1},
-    {"lmul", 105, 1},
-    {"fmul", 106, 1},
-    {"dmul", 107, 1},
-    {"idiv", 108, 1},
-    {"ldiv", 109, 1},
-    {"fdiv", 110, 1},
-    {"ddiv", 111, 1},
-    {"irem", 112, 1},
-    {"lrem", 113, 1},
-    {"frem", 114, 1},
-    {"drem", 115, 1},
-    {"ineg", 116, 1},
-    {"lneg", 117, 1},
-    {"fneg", 118, 1},
-    {"dneg", 119, 1},
-    {"ishl", 120, 1},
-    {"lshl", 121, 1},
-    {"ishr", 122, 1},
-    {"lshr", 123, 1},
-    {"iushr", 124, 1},
-    {"lushr", 125, 1},
-    {"iand", 126, 1},
-    {"land", 127, 1},
-    {"ior", 128, 1},
-    {"lor", 129, 1},
-    {"ixor", 130, 1},
-    {"lxor", 131, 1},
-    {"iinc", 132, 3},
-    {"i2l", 133, 1},
-    {"i2f", 134, 1},
-    {"i2d", 135, 1},
-    {"l2i", 136, 1},
-    {"l2f", 137, 1},
-    {"l2d", 138, 1},
-    {"f2i", 139, 1},
-    {"f2l", 140, 1},
-    {"f2d", 141, 1},
-    {"d2i", 142, 1},
-    {"d2l", 143, 1},
-    {"d2f", 144, 1},
-    {"i2b", 145, 1},
-    {"i2c", 146, 1},
-    {"i2s", 147, 1},
-    {"lcmp", 148, 1},
-    {"fcmpl", 149, 1},
-    {"fcmpg", 150, 1},
-    {"dcmpl", 151, 1},
-    {"dcmpg", 152, 1},
-    {"ifeq", 153, 3},
-    {"ifne", 154, 3},
-    {"iflt", 155, 3},
-    {"ifge", 156, 3},
-    {"ifgt", 157, 3},
-    {"ifle", 158, 3},
-    {"if_icmpeq", 159, 3},
-    {"if_icmpne", 160, 3},
-    {"if_icmplt", 161, 3},
-    {"if_icmpge", 162, 3},
-    {"if_icmpgt", 163, 3},
-    {"if_icmple", 164, 3},
-    {"if_acmpeq", 165, 3},
-    {"if_acmpne", 166, 3},
-    {"goto", 167, 3},
-    {"jsr", 168, 3},
-    {"ret", 169, 2},
-    {"tableswitch", 170, 0},
-    {"lookupswitch", 171, 0},
-    {"ireturn", 172, 1},
-    {"lreturn", 173, 1},
-    {"freturn", 174, 1},
-    {"dreturn", 175, 1},
-    {"areturn", 176, 1},
-    {"return", 177, 1},
-    {"getstatic", 178, 3},
-    {"putstatic", 179, 3},
-    {"getfield", 180, 3},
-    {"putfield", 181, 3},
-    {"invokevirtual", 182, 3},
-    {"invokespecial", 183, 3},
-    {"invokestatic", 184, 3},
-    {"invokeinterface", 185, 5},
-    {"invokedynamic", 186, 5},
-    {"new", 187, 3},
-    {"newarray", 188, 2},
-    {"anewarray", 189, 3},
-    {"arraylength", 190, 1},
-    {"athrow", 191, 1},
-    {"checkcast", 192, 3},
-    {"instanceof", 193, 3},
-    {"monitorenter", 194, 1},
-    {"monitorexit", 195, 1},
-    {"wide", 196, 0},
-    {"multianewarray", 197, 4},
-    {"ifnull", 198, 3},
-    {"ifnonnull", 199, 3},
-    {"goto_w", 200, 5},
-    {"jsr_w", 201, 5},
-    {"breakpoint", 202, 1},
-    {"impdep1", 254, 1},
-    {"impdep2", 255, 1}
+    { "nop", 0, 1 },
+    { "aconst_null", 1, 1 },
+    { "iconst_m1", 2, 1 },
+    { "iconst_0", 3, 1 },
+    { "iconst_1", 4, 1 },
+    { "iconst_2", 5, 1 },
+    { "iconst_3", 6, 1 },
+    { "iconst_4", 7, 1 },
+    { "iconst_5", 8, 1 },
+    { "lconst_0", 9, 1 },
+    { "lconst_1", 10, 1 },
+    { "fconst_0", 11, 1 },
+    { "fconst_1", 12, 1 },
+    { "fconst_2", 13, 1 },
+    { "dconst_0", 14, 1 },
+    { "dconst_1", 15, 1 },
+    { "bipush", 16, 2 },
+    { "sipush", 17, 3 },
+    { "ldc", 18, 2 },
+    { "ldc_w", 19, 3 },
+    { "ldc2_w", 20, 3 },
+    { "iload", 21, 2 },
+    { "lload", 22, 2 },
+    { "fload", 23, 2 },
+    { "dload", 24, 2 },
+    { "aload", 25, 2 },
+    { "iload_0", 26, 1 },
+    { "iload_1", 27, 1 },
+    { "iload_2", 28, 1 },
+    { "iload_3", 29, 1 },
+    { "lload_0", 30, 1 },
+    { "lload_1", 31, 1 },
+    { "lload_2", 32, 1 },
+    { "lload_3", 33, 1 },
+    { "fload_0", 34, 1 },
+    { "fload_1", 35, 1 },
+    { "fload_2", 36, 1 },
+    { "fload_3", 37, 1 },
+    { "dload_0", 38, 1 },
+    { "dload_1", 39, 1 },
+    { "dload_2", 40, 1 },
+    { "dload_3", 41, 1 },
+    { "aload_0", 42, 1 },
+    { "aload_1", 43, 1 },
+    { "aload_2", 44, 1 },
+    { "aload_3", 45, 1 },
+    { "iaload", 46, 1 },
+    { "laload", 47, 1 },
+    { "faload", 48, 1 },
+    { "daload", 49, 1 },
+    { "aaload", 50, 1 },
+    { "baload", 51, 1 },
+    { "caload", 52, 1 },
+    { "saload", 53, 1 },
+    { "istore", 54, 2 },
+    { "lstore", 55, 2 },
+    { "fstore", 56, 2 },
+    { "dstore", 57, 2 },
+    { "astore", 58, 2 },
+    { "istore_0", 59, 1 },
+    { "istore_1", 60, 1 },
+    { "istore_2", 61, 1 },
+    { "istore_3", 62, 1 },
+    { "lstore_0", 63, 1 },
+    { "lstore_1", 64, 1 },
+    { "lstore_2", 65, 1 },
+    { "lstore_3", 66, 1 },
+    { "fstore_0", 67, 1 },
+    { "fstore_1", 68, 1 },
+    { "fstore_2", 69, 1 },
+    { "fstore_3", 70, 1 },
+    { "dstore_0", 71, 1 },
+    { "dstore_1", 72, 1 },
+    { "dstore_2", 73, 1 },
+    { "dstore_3", 74, 1 },
+    { "astore_0", 75, 1 },
+    { "astore_1", 76, 1 },
+    { "astore_2", 77, 1 },
+    { "astore_3", 78, 1 },
+    { "iastore", 79, 1 },
+    { "lastore", 80, 1 },
+    { "fastore", 81, 1 },
+    { "dastore", 82, 1 },
+    { "aastore", 83, 1 },
+    { "bastore", 84, 1 },
+    { "castore", 85, 1 },
+    { "sastore", 86, 1 },
+    { "pop", 87, 1 },
+    { "pop2", 88, 1 },
+    { "dup", 89, 1 },
+    { "dup_x1", 90, 1 },
+    { "dup_x2", 91, 1 },
+    { "dup2", 92, 1 },
+    { "dup2_x1", 93, 1 },
+    { "dup2_x2", 94, 1 },
+    { "swap", 95, 1 },
+    { "iadd", 96, 1 },
+    { "ladd", 97, 1 },
+    { "fadd", 98, 1 },
+    { "dadd", 99, 1 },
+    { "isub", 100, 1 },
+    { "lsub", 101, 1 },
+    { "fsub", 102, 1 },
+    { "dsub", 103, 1 },
+    { "imul", 104, 1 },
+    { "lmul", 105, 1 },
+    { "fmul", 106, 1 },
+    { "dmul", 107, 1 },
+    { "idiv", 108, 1 },
+    { "ldiv", 109, 1 },
+    { "fdiv", 110, 1 },
+    { "ddiv", 111, 1 },
+    { "irem", 112, 1 },
+    { "lrem", 113, 1 },
+    { "frem", 114, 1 },
+    { "drem", 115, 1 },
+    { "ineg", 116, 1 },
+    { "lneg", 117, 1 },
+    { "fneg", 118, 1 },
+    { "dneg", 119, 1 },
+    { "ishl", 120, 1 },
+    { "lshl", 121, 1 },
+    { "ishr", 122, 1 },
+    { "lshr", 123, 1 },
+    { "iushr", 124, 1 },
+    { "lushr", 125, 1 },
+    { "iand", 126, 1 },
+    { "land", 127, 1 },
+    { "ior", 128, 1 },
+    { "lor", 129, 1 },
+    { "ixor", 130, 1 },
+    { "lxor", 131, 1 },
+    { "iinc", 132, 3 },
+    { "i2l", 133, 1 },
+    { "i2f", 134, 1 },
+    { "i2d", 135, 1 },
+    { "l2i", 136, 1 },
+    { "l2f", 137, 1 },
+    { "l2d", 138, 1 },
+    { "f2i", 139, 1 },
+    { "f2l", 140, 1 },
+    { "f2d", 141, 1 },
+    { "d2i", 142, 1 },
+    { "d2l", 143, 1 },
+    { "d2f", 144, 1 },
+    { "i2b", 145, 1 },
+    { "i2c", 146, 1 },
+    { "i2s", 147, 1 },
+    { "lcmp", 148, 1 },
+    { "fcmpl", 149, 1 },
+    { "fcmpg", 150, 1 },
+    { "dcmpl", 151, 1 },
+    { "dcmpg", 152, 1 },
+    { "ifeq", 153, 3 },
+    { "ifne", 154, 3 },
+    { "iflt", 155, 3 },
+    { "ifge", 156, 3 },
+    { "ifgt", 157, 3 },
+    { "ifle", 158, 3 },
+    { "if_icmpeq", 159, 3 },
+    { "if_icmpne", 160, 3 },
+    { "if_icmplt", 161, 3 },
+    { "if_icmpge", 162, 3 },
+    { "if_icmpgt", 163, 3 },
+    { "if_icmple", 164, 3 },
+    { "if_acmpeq", 165, 3 },
+    { "if_acmpne", 166, 3 },
+    { "goto", 167, 3 },
+    { "jsr", 168, 3 },
+    { "ret", 169, 2 },
+    { "tableswitch", 170, 0 },
+    { "lookupswitch", 171, 0 },
+    { "ireturn", 172, 1 },
+    { "lreturn", 173, 1 },
+    { "freturn", 174, 1 },
+    { "dreturn", 175, 1 },
+    { "areturn", 176, 1 },
+    { "return", 177, 1 },
+    { "getstatic", 178, 3 },
+    { "putstatic", 179, 3 },
+    { "getfield", 180, 3 },
+    { "putfield", 181, 3 },
+    { "invokevirtual", 182, 3 },
+    { "invokespecial", 183, 3 },
+    { "invokestatic", 184, 3 },
+    { "invokeinterface", 185, 5 },
+    { "invokedynamic", 186, 5 },
+    { "new", 187, 3 },
+    { "newarray", 188, 2 },
+    { "anewarray", 189, 3 },
+    { "arraylength", 190, 1 },
+    { "athrow", 191, 1 },
+    { "checkcast", 192, 3 },
+    { "instanceof", 193, 3 },
+    { "monitorenter", 194, 1 },
+    { "monitorexit", 195, 1 },
+    { "wide", 196, 0 },
+    { "multianewarray", 197, 4 },
+    { "ifnull", 198, 3 },
+    { "ifnonnull", 199, 3 },
+    { "goto_w", 200, 5 },
+    { "jsr_w", 201, 5 },
+    { "breakpoint", 202, 1 },
+    { "impdep1", 254, 1 },
+    { "impdep2", 255, 1 }
 };
 
 jint get_u4(unsigned char *p) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetClassFields/getclfld007/getclfld007.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetClassFields/getclfld007/getclfld007.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -49,52 +49,52 @@
 static jboolean printdump = JNI_FALSE;
 
 static fld_info f0[] = {
-    {"fld_1", "Ljava/lang/String;"}
+    { "fld_1", "Ljava/lang/String;" }
 };
 
 static fld_info f1[] = {
-    {"fld_n1", "I"}
+    { "fld_n1", "I" }
 };
 
 static fld_info f2[] = {
-    {"fld_n2", "I"}
+    { "fld_n2", "I" }
 };
 
 static fld_info f4[] = {
-    {"fld_o2", "I"}
+    { "fld_o2", "I" }
 };
 
 static fld_info f5[] = {
-    {"fld_o3", "I"}
+    { "fld_o3", "I" }
 };
 
 static fld_info f6[] = {
-    {"fld_i1", "I"}
+    { "fld_i1", "I" }
 };
 
 static fld_info f7[] = {
-    {"fld_i2", "I"}
+    { "fld_i2", "I" }
 };
 
 static fld_info f8[] = {
-    {"fld_i2", "I"}
+    { "fld_i2", "I" }
 };
 
 static fld_info f9[] = {
-    {"fld_i1", "I"}
+    { "fld_i1", "I" }
 };
 
 static class_info classes[] = {
-    {"InnerClass1", 1, f0},
-    {"InnerInterface", 1, f1},
-    {"InnerClass2", 1, f2},
-    {"OuterClass1", 0, NULL},
-    {"OuterClass2", 1, f4},
-    {"OuterClass3", 1, f5},
-    {"OuterInterface1", 1, f6},
-    {"OuterInterface2", 1, f7},
-    {"OuterClass4", 1, f8},
-    {"OuterClass5", 1, f9}
+    { "InnerClass1", 1, f0 },
+    { "InnerInterface", 1, f1 },
+    { "InnerClass2", 1, f2 },
+    { "OuterClass1", 0, NULL },
+    { "OuterClass2", 1, f4 },
+    { "OuterClass3", 1, f5 },
+    { "OuterInterface1", 1, f6 },
+    { "OuterInterface2", 1, f7 },
+    { "OuterClass4", 1, f8 },
+    { "OuterClass5", 1, f9 }
 };
 
 #ifdef STATIC_BUILD
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetClassMethods/getclmthd007/getclmthd007.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetClassMethods/getclmthd007/getclmthd007.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -49,64 +49,64 @@
 static jboolean printdump = JNI_FALSE;
 
 static meth_info m0[] = {
-    {"<init>", "(Lnsk/jvmti/GetClassMethods/getclmthd007;)V"},
-    {"meth_1", "(Ljava/lang/String;)V"}
+    { "<init>", "(Lnsk/jvmti/GetClassMethods/getclmthd007;)V" },
+    { "meth_1", "(Ljava/lang/String;)V" }
 };
 
 static meth_info m1[] = {
-    {"meth_n1", "()V"}
+    { "meth_n1", "()V" }
 };
 
 static meth_info m2[] = {
-    {"<init>", "()V"},
-    {"meth_n1", "()V"},
-    {"meth_n2", "()I"},
-    {"<clinit>", "()V"}
+    { "<init>", "()V" },
+    { "meth_n1", "()V" },
+    { "meth_n2", "()I" },
+    { "<clinit>", "()V" }
 };
 
 static meth_info m3[] = {
-    {"<init>", "()V"}
+    { "<init>", "()V" }
 };
 
 static meth_info m4[] = {
-    {"<init>", "()V"},
-    {"meth_o2", "()V"}
+    { "<init>", "()V" },
+    { "meth_o2", "()V" }
 };
 
 static meth_info m5[] = {
-    {"<init>", "()V"},
-    {"meth_o3", "()I"}
+    { "<init>", "()V" },
+    { "meth_o3", "()I" }
 };
 
 static meth_info m6[] = {
-    {"meth_i1", "()I"}
+    { "meth_i1", "()I" }
 };
 
 static meth_info m7[] = {
-    {"meth_i2", "()I"}
+    { "meth_i2", "()I" }
 };
 
 static meth_info m8[] = {
-    {"<init>", "()V"},
-    {"meth_i2", "()I"}
+    { "<init>", "()V" },
+    { "meth_i2", "()I" }
 };
 
 static meth_info m9[] = {
-    {"<init>", "()V"},
-    {"meth_i1", "()I"}
+    { "<init>", "()V" },
+    { "meth_i1", "()I" }
 };
 
 static class_info classes[] = {
-    {"InnerClass1", 2, m0},
-    {"InnerInterface", 1, m1},
-    {"InnerClass2", 4, m2},
-    {"OuterClass1", 1, m3},
-    {"OuterClass2", 2, m4},
-    {"OuterClass3", 2, m5},
-    {"OuterInterface1", 1, m6},
-    {"OuterInterface2", 1, m7},
-    {"OuterClass4", 2, m8},
-    {"OuterClass5", 2, m9}
+    { "InnerClass1", 2, m0 },
+    { "InnerInterface", 1, m1 },
+    { "InnerClass2", 4, m2 },
+    { "OuterClass1", 1, m3 },
+    { "OuterClass2", 2, m4 },
+    { "OuterClass3", 2, m5 },
+    { "OuterInterface1", 1, m6 },
+    { "OuterInterface2", 1, m7 },
+    { "OuterClass4", 2, m8 },
+    { "OuterClass5", 2, m9 }
 };
 
 #ifdef STATIC_BUILD
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetClassSignature/getclsig006/getclsig006.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetClassSignature/getclsig006/getclsig006.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -40,15 +40,15 @@
 
 /* expected class signatures are below */
 static const char *class_sig[][CLS_NUM] = {
-    {"getclsig006", "Lnsk/jvmti/GetClassSignature/getclsig006;", "NULL"},
-    {"getclsig006b", "Lnsk/jvmti/GetClassSignature/getclsig006b;",
-        "<L:Ljava/lang/String;>Ljava/lang/Object;"},
-    {"getclsig006c", "Lnsk/jvmti/GetClassSignature/getclsig006c;",
-        "<A:Ljava/lang/Object;B:Ljava/lang/Integer;>Ljava/lang/Object;"},
-    {"getclsig006if", "Lnsk/jvmti/GetClassSignature/getclsig006if;",
-        "<I:Ljava/lang/Object;>Ljava/lang/Object;"},
-    {"getclsig006g", "Lnsk/jvmti/GetClassSignature/getclsig006g;",
-        "<E:Lnsk/jvmti/GetClassSignature/getclsig006e;:Lnsk/jvmti/GetClassSignature/getclsig006if;>Ljava/lang/Object;"}
+    { "getclsig006", "Lnsk/jvmti/GetClassSignature/getclsig006;", "NULL" },
+    { "getclsig006b", "Lnsk/jvmti/GetClassSignature/getclsig006b;",
+      "<L:Ljava/lang/String;>Ljava/lang/Object;" },
+    { "getclsig006c", "Lnsk/jvmti/GetClassSignature/getclsig006c;",
+      "<A:Ljava/lang/Object;B:Ljava/lang/Integer;>Ljava/lang/Object;" },
+    { "getclsig006if", "Lnsk/jvmti/GetClassSignature/getclsig006if;",
+      "<I:Ljava/lang/Object;>Ljava/lang/Object;" },
+    { "getclsig006g", "Lnsk/jvmti/GetClassSignature/getclsig006g;",
+      "<E:Lnsk/jvmti/GetClassSignature/getclsig006e;:Lnsk/jvmti/GetClassSignature/getclsig006if;>Ljava/lang/Object;" }
 };
 
 static jvmtiEnv *jvmti = NULL;
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetImplementedInterfaces/getintrf007/getintrf007.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetImplementedInterfaces/getintrf007/getintrf007.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -48,37 +48,37 @@
 static jboolean printdump = JNI_FALSE;
 
 static iface_info i2[] = {
-    {"Lnsk/jvmti/GetImplementedInterfaces/getintrf007$InnerInterface1;"}
+    { "Lnsk/jvmti/GetImplementedInterfaces/getintrf007$InnerInterface1;" }
 };
 
 static iface_info i3[] = {
-    {"Lnsk/jvmti/GetImplementedInterfaces/getintrf007$InnerInterface2;"}
+    { "Lnsk/jvmti/GetImplementedInterfaces/getintrf007$InnerInterface2;" }
 };
 
 static iface_info i7[] = {
-    {"Lnsk/jvmti/GetImplementedInterfaces/OuterInterface1;"}
+    { "Lnsk/jvmti/GetImplementedInterfaces/OuterInterface1;" }
 };
 
 static iface_info i8[] = {
-    {"Lnsk/jvmti/GetImplementedInterfaces/OuterInterface1;"}
+    { "Lnsk/jvmti/GetImplementedInterfaces/OuterInterface1;" }
 };
 
 static iface_info i9[] = {
-    {"Lnsk/jvmti/GetImplementedInterfaces/OuterInterface2;"}
+    { "Lnsk/jvmti/GetImplementedInterfaces/OuterInterface2;" }
 };
 
 static class_info classes[] = {
-    {"InnerClass1", 0, NULL},
-    {"InnerInterface1", 0, NULL},
-    {"InnerInterface2", 1, i2},
-    {"InnerClass2", 1, i3},
-    {"OuterClass1", 0, NULL},
-    {"OuterClass2", 0, NULL},
-    {"OuterInterface1", 0, NULL},
-    {"OuterClass3", 1, i7},
-    {"OuterInterface2", 1, i8},
-    {"OuterClass4", 1, i9},
-    {"OuterClass5", 0, NULL}
+    { "InnerClass1", 0, NULL },
+    { "InnerInterface1", 0, NULL },
+    { "InnerInterface2", 1, i2 },
+    { "InnerClass2", 1, i3 },
+    { "OuterClass1", 0, NULL },
+    { "OuterClass2", 0, NULL },
+    { "OuterInterface1", 0, NULL },
+    { "OuterClass3", 1, i7 },
+    { "OuterInterface2", 1, i8 },
+    { "OuterClass4", 1, i9 },
+    { "OuterClass5", 0, NULL }
 };
 
 #ifdef STATIC_BUILD
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetLineNumberTable/linetab001/linetab001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetLineNumberTable/linetab001/linetab001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -42,15 +42,15 @@
 static jvmtiCapabilities caps;
 static jint result = PASSED;
 static jvmtiLineNumberEntry m0[] = {
-    {0, 64}
+    { 0, 64 }
 };
 static jvmtiLineNumberEntry m1[] = {
-    {0, 67},
-    {4, 68},
-    {7, 69},
-    {12,70}
+    { 0, 67 },
+    { 4, 68 },
+    { 7, 69 },
+    { 12,70 }
 };
-static info meth_tab[] = {{1, m0}, {4, m1}};
+static info meth_tab[] = { { 1, m0 }, { 4, m1 } };
 
 void checkMeth(JNIEnv *env, jclass cl, const char *name, const char *sig,
                int stat, int meth_ind) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetLocalVariableTable/localtab001/localtab001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetLocalVariableTable/localtab001/localtab001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -42,53 +42,53 @@
 static jvmtiCapabilities caps;
 static jint result = PASSED;
 static jvmtiLocalVariableEntry m1[] = {
-    {0, 21, (char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab001;", NULL, 0},
-    {4, 17, (char*) "l",    (char*) "J", NULL, 1},
-    {7, 14, (char*) "f",    (char*) "F", NULL, 2},
-    {12, 9, (char*) "d",    (char*) "D", NULL, 3}
+    { 0, 21, (char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab001;", NULL, 0 },
+    { 4, 17, (char*) "l",    (char*) "J", NULL, 1 },
+    { 7, 14, (char*) "f",    (char*) "F", NULL, 2 },
+    { 12, 9, (char*) "d",    (char*) "D", NULL, 3 }
 };
 static jvmtiLocalVariableEntry m2[] = {
-    {0, 32, (char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab001;", NULL, 0},
-    {0, 32, (char*) "step", (char*) "I", NULL, 1},
-    {2, 29, (char*) "i2",   (char*) "S", NULL, 2},
-    {4, 27, (char*) "i3",   (char*) "C", NULL, 3},
-    {7, 24, (char*) "i4",   (char*) "B", NULL, 4},
-    {10,21, (char*) "i5",   (char*) "Z", NULL, 5},
-    {13,18, (char*) "i1",   (char*) "I", NULL, 6}
+    { 0, 32, (char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab001;", NULL, 0 },
+    { 0, 32, (char*) "step", (char*) "I", NULL, 1 },
+    { 2, 29, (char*) "i2",   (char*) "S", NULL, 2 },
+    { 4, 27, (char*) "i3",   (char*) "C", NULL, 3 },
+    { 7, 24, (char*) "i4",   (char*) "B", NULL, 4 },
+    { 10,21, (char*) "i5",   (char*) "Z", NULL, 5 },
+    { 13,18, (char*) "i1",   (char*) "I", NULL, 6 }
 };
 static jvmtiLocalVariableEntry m3[] = {
-    {0, 70, (char*) "ob",  (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab001;", NULL, 0},
-    {2, 67, (char*) "ob1", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab001;", NULL, 1},
-    {56,13, (char*) "ob2", (char*) "[I", NULL, 2},
-    {61, 0, (char*) "i",   (char*) "I", NULL, 3},
-    {64, 5, (char*) "e",   (char*) "Ljava/lang/IndexOutOfBoundsException;", NULL, 4}
+    { 0, 70, (char*) "ob",  (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab001;", NULL, 0 },
+    { 2, 67, (char*) "ob1", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab001;", NULL, 1 },
+    { 56,13, (char*) "ob2", (char*) "[I", NULL, 2 },
+    { 61, 0, (char*) "i",   (char*) "I", NULL, 3 },
+    { 64, 5, (char*) "e",   (char*) "Ljava/lang/IndexOutOfBoundsException;", NULL, 4 }
 };
 static jvmtiLocalVariableEntry m4[] = {
-    {0, 33, (char*) "i1", (char*) "I", NULL, 0},
-    {0, 33, (char*) "l",  (char*) "J", NULL, 1},
-    {0, 33, (char*) "i2", (char*) "S", NULL, 2},
-    {0, 33, (char*) "d",  (char*) "D", NULL, 3},
-    {0, 33, (char*) "i3", (char*) "C", NULL, 4},
-    {0, 33, (char*) "f",  (char*) "F", NULL, 5},
-    {0, 33, (char*) "i4", (char*) "B", NULL, 6},
-    {0, 33, (char*) "b",  (char*) "Z", NULL, 7}
+    { 0, 33, (char*) "i1", (char*) "I", NULL, 0 },
+    { 0, 33, (char*) "l",  (char*) "J", NULL, 1 },
+    { 0, 33, (char*) "i2", (char*) "S", NULL, 2 },
+    { 0, 33, (char*) "d",  (char*) "D", NULL, 3 },
+    { 0, 33, (char*) "i3", (char*) "C", NULL, 4 },
+    { 0, 33, (char*) "f",  (char*) "F", NULL, 5 },
+    { 0, 33, (char*) "i4", (char*) "B", NULL, 6 },
+    { 0, 33, (char*) "b",  (char*) "Z", NULL, 7 }
 };
 static jvmtiLocalVariableEntry m5[] = {
-    {0, 6, (char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab001;", NULL, 0},
-    {0, 6, (char*) "i",    (char*) "I", NULL, 1},
-    {2, 4, (char*) "i12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", (char*) "I", NULL, 2}
+    { 0, 6, (char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab001;", NULL, 0 },
+    { 0, 6, (char*) "i",    (char*) "I", NULL, 1 },
+    { 2, 4, (char*) "i12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", (char*) "I", NULL, 2 }
 };
 static jvmtiLocalVariableEntry m6[] = {
-    {0, 5, (char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab001;", NULL, 0},
+    { 0, 5, (char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab001;", NULL, 0 },
 };
 static info meth_tab[] = {
-    {0, NULL},
-    {4, m1},
-    {7, m2},
-    {5, m3},
-    {8, m4},
-    {3, m5},
-    {1, m6}
+    { 0, NULL },
+    { 4, m1 },
+    { 7, m2 },
+    { 5, m3 },
+    { 8, m4 },
+    { 3, m5 },
+    { 1, m6 }
 };
 
 void checkMeth(JNIEnv *env, jclass cl, const char *name, const char *sig,
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetLocalVariableTable/localtab004/localtab004.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetLocalVariableTable/localtab004/localtab004.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -44,30 +44,30 @@
 
 /* expected local variable info are below */
 static localVar constr_lv[] = { /* constructor's local variables */
-    {(char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab004a;"},
-    {(char*) "constr_i", (char*) "I"},
-    {(char*) "constr_l", (char*) "J"},
-    {(char*) "constr_d", (char*) "D"},
-    {(char*) "constr_f", (char*) "F"},
-    {(char*) "constr_c", (char*) "C"}
+    { (char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab004a;" },
+    { (char*) "constr_i", (char*) "I" },
+    { (char*) "constr_l", (char*) "J" },
+    { (char*) "constr_d", (char*) "D" },
+    { (char*) "constr_f", (char*) "F" },
+    { (char*) "constr_c", (char*) "C" }
 };
 
 static localVar finMeth_lv[] = { /* finMethod()'s local variables */
-    {(char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab004a;"},
-    {(char*) "fin_c", (char*) "C"},
-    {(char*) "fin_i", (char*) "J"},
-    {(char*) "fin_j", (char*) "I"},
-    {(char*) "fin_k", (char*) "J"},
-    {(char*) "fin_l", (char*) "J"},
-    {(char*) "fin_f", (char*) "F"}
+    { (char*) "this", (char*) "Lnsk/jvmti/GetLocalVariableTable/localtab004a;" },
+    { (char*) "fin_c", (char*) "C" },
+    { (char*) "fin_i", (char*) "J" },
+    { (char*) "fin_j", (char*) "I" },
+    { (char*) "fin_k", (char*) "J" },
+    { (char*) "fin_l", (char*) "J" },
+    { (char*) "fin_f", (char*) "F" }
 };
 
 static localVar statMeth_lv[] = { /* statMethod()'s local variables */
-    {(char*) "stat_x", (char*) "I"},
-    {(char*) "stat_y", (char*) "I"},
-    {(char*) "stat_z", (char*) "I"},
-    {(char*) "stat_j", (char*) "D"},
-    {(char*) "stat_i", (char*) "I"}
+    { (char*) "stat_x", (char*) "I" },
+    { (char*) "stat_y", (char*) "I" },
+    { (char*) "stat_z", (char*) "I" },
+    { (char*) "stat_j", (char*) "D" },
+    { (char*) "stat_i", (char*) "I" }
 };
 
 typedef struct {    /* local variables of a method */
@@ -81,9 +81,9 @@
 
 /* list of tested methods */
 static methodInfo methInfo[] = {
-    {1, (char*) "<init>", (char*) "()V", 6, constr_lv, NULL},
-    {1, (char*) "finMethod", (char*) "(CJIJ)V", 7, finMeth_lv, NULL},
-    {0, (char*) "statMethod", (char*) "(III)D", 5, statMeth_lv, NULL}
+    { 1, (char*) "<init>", (char*) "()V", 6, constr_lv, NULL },
+    { 1, (char*) "finMethod", (char*) "(CJIJ)V", 7, finMeth_lv, NULL },
+    { 0, (char*) "statMethod", (char*) "(III)D", 5, statMeth_lv, NULL }
 };
 
 static jvmtiEnv *jvmti = NULL;
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetLocalVariableTable/localtab005/localtab005.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetLocalVariableTable/localtab005/localtab005.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -45,37 +45,37 @@
 
 /* expected local variable info are below */
 static localVar constr_lv[] = { /* constructor's local variables */
-    {"this", "Lnsk/jvmti/GetLocalVariableTable/localtab005a;", "NULL"},
-    {"constr_b", "Lnsk/jvmti/GetLocalVariableTable/localtab005b;",
-        "Lnsk/jvmti/GetLocalVariableTable/localtab005b<Ljava/lang/String;>;"},
-    {"constr_i", "I", "NULL"},
-    {"constr_c", "Lnsk/jvmti/GetLocalVariableTable/localtab005c;",
-        "Lnsk/jvmti/GetLocalVariableTable/localtab005c<Ljava/lang/Boolean;Ljava/lang/Integer;>;"},
-    {"constr_f", "F", "NULL"},
-    {"constr_ch", "C", "NULL"},
-    {"constr_if", "Lnsk/jvmti/GetLocalVariableTable/localtab005if;",
-        "Lnsk/jvmti/GetLocalVariableTable/localtab005if<Ljava/lang/Object;>;"}
+    { "this", "Lnsk/jvmti/GetLocalVariableTable/localtab005a;", "NULL" },
+    { "constr_b", "Lnsk/jvmti/GetLocalVariableTable/localtab005b;",
+      "Lnsk/jvmti/GetLocalVariableTable/localtab005b<Ljava/lang/String;>;" },
+    { "constr_i", "I", "NULL" },
+    { "constr_c", "Lnsk/jvmti/GetLocalVariableTable/localtab005c;",
+      "Lnsk/jvmti/GetLocalVariableTable/localtab005c<Ljava/lang/Boolean;Ljava/lang/Integer;>;" },
+    { "constr_f", "F", "NULL" },
+    { "constr_ch", "C", "NULL" },
+    { "constr_if", "Lnsk/jvmti/GetLocalVariableTable/localtab005if;",
+      "Lnsk/jvmti/GetLocalVariableTable/localtab005if<Ljava/lang/Object;>;" }
 };
 
 static localVar insMeth_lv[] = { /* finMethod()'s local variables */
-    {"this", "Lnsk/jvmti/GetLocalVariableTable/localtab005a;", "NULL"},
-    {"ins_c", "C", "NULL"},
-    {"ins_i", "J", "NULL"},
-    {"ltab005d", "Lnsk/jvmti/GetLocalVariableTable/localtab005d;",
-        "Lnsk/jvmti/GetLocalVariableTable/localtab005d<Ljava/lang/Object;>;"},
-    {"ins_k", "J", "NULL"},
-    {"ins_l", "J", "NULL"},
-    {"ins_g", "Lnsk/jvmti/GetLocalVariableTable/localtab005g;",
-        "Lnsk/jvmti/GetLocalVariableTable/localtab005g<Lnsk/jvmti/GetLocalVariableTable/localtab005f;>;"}
+    { "this", "Lnsk/jvmti/GetLocalVariableTable/localtab005a;", "NULL" },
+    { "ins_c", "C", "NULL" },
+    { "ins_i", "J", "NULL" },
+    { "ltab005d", "Lnsk/jvmti/GetLocalVariableTable/localtab005d;",
+      "Lnsk/jvmti/GetLocalVariableTable/localtab005d<Ljava/lang/Object;>;" },
+    { "ins_k", "J", "NULL" },
+    { "ins_l", "J", "NULL" },
+    { "ins_g", "Lnsk/jvmti/GetLocalVariableTable/localtab005g;",
+      "Lnsk/jvmti/GetLocalVariableTable/localtab005g<Lnsk/jvmti/GetLocalVariableTable/localtab005f;>;" }
 };
 
 static localVar statMeth_lv[] = { /* statMethod()'s local variables */
-    {"stat_x", "I", "NULL"},
-    {"stat_y", "I", "NULL"},
-    {"stat_z", "I", "NULL"},
-    {"stat_j", "D", "NULL"},
-    {"stat_d", "Lnsk/jvmti/GetLocalVariableTable/localtab005d;",
-        "Lnsk/jvmti/GetLocalVariableTable/localtab005d<Ljava/lang/Byte;>;"}
+    { "stat_x", "I", "NULL" },
+    { "stat_y", "I", "NULL" },
+    { "stat_z", "I", "NULL" },
+    { "stat_j", "D", "NULL" },
+    { "stat_d", "Lnsk/jvmti/GetLocalVariableTable/localtab005d;",
+      "Lnsk/jvmti/GetLocalVariableTable/localtab005d<Ljava/lang/Byte;>;" }
 };
 
 typedef struct {    /* local variables of a method */
@@ -89,9 +89,9 @@
 
 /* list of tested methods */
 static methodInfo methInfo[] = {
-    {1, (char*) "<init>", (char*) "()V", 7, constr_lv, NULL},
-    {1, (char*) "insMethod", (char*) "(CJLnsk/jvmti/GetLocalVariableTable/localtab005d;J)V", 7, insMeth_lv, NULL},
-    {0, (char*) "statMethod", (char*) "(III)D", 5, statMeth_lv, NULL}
+    { 1, (char*) "<init>", (char*) "()V", 7, constr_lv, NULL },
+    { 1, (char*) "insMethod", (char*) "(CJLnsk/jvmti/GetLocalVariableTable/localtab005d;J)V", 7, insMeth_lv, NULL },
+    { 0, (char*) "statMethod", (char*) "(III)D", 5, statMeth_lv, NULL }
 };
 
 static jvmtiEnv *jvmti = NULL;
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetMethodLocation/methloc001/methloc001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetMethodLocation/methloc001/methloc001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -39,9 +39,9 @@
 static jvmtiEnv *jvmti;
 static jint result = PASSED;
 static info meth_tab[] = {
-    {0, 4},  /* 0 <init> */
-    {0, 0},  /* 1 meth1 */
-    {0, 5}   /* 2 meth2 */
+    { 0, 4 },  /* 0 <init> */
+    { 0, 0 },  /* 1 meth1 */
+    { 0, 5 }   /* 2 meth2 */
 };
 
 void checkMeth(JNIEnv *env, jclass cl, const char *name, const char *sig,
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr001/getstacktr001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr001/getstacktr001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -43,14 +43,14 @@
 static jint result = PASSED;
 static jboolean printdump = JNI_FALSE;
 static frame_info frames[] = {
-    {"Lnsk/jvmti/GetStackTrace/getstacktr001;", "check",
-     "(Ljava/lang/Thread;)V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr001;", "dummy", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr001;", "chain", "()I"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr001;", "run",
-     "([Ljava/lang/String;Ljava/io/PrintStream;)I"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr001;", "main",
-     "([Ljava/lang/String;)V"}
+    { "Lnsk/jvmti/GetStackTrace/getstacktr001;", "check",
+     "(Ljava/lang/Thread;)V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr001;", "dummy", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr001;", "chain", "()I" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr001;", "run",
+     "([Ljava/lang/String;Ljava/io/PrintStream;)I" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr001;", "main",
+     "([Ljava/lang/String;)V" }
 };
 
 #define NUMBER_OF_STACK_FRAMES ((int) (sizeof(frames)/sizeof(frame_info)))
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr003/getstacktr003.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr003/getstacktr003.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -44,10 +44,10 @@
 static jint result = PASSED;
 static jboolean printdump = JNI_FALSE;
 static frame_info frames[] = {
-    {"Ljava/lang/Object;", "wait", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr003;", "dummy", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr003;", "chain", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr003$TestThread;", "run", "()V"},
+    { "Ljava/lang/Object;", "wait", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr003;", "dummy", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr003;", "chain", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr003$TestThread;", "run", "()V" },
 };
 
 #define NUMBER_OF_STACK_FRAMES ((int) (sizeof(frames)/sizeof(frame_info)))
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr004/getstacktr004.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr004/getstacktr004.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -46,12 +46,12 @@
 static jboolean printdump = JNI_FALSE;
 static jmethodID mid;
 static frame_info frames[] = {
-    {"Lnsk/jvmti/GetStackTrace/getstacktr004$TestThread;", "checkPoint", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr004$TestThread;", "chain4", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr004$TestThread;", "chain3", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr004$TestThread;", "chain2", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr004$TestThread;", "chain1", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr004$TestThread;", "run", "()V"},
+    { "Lnsk/jvmti/GetStackTrace/getstacktr004$TestThread;", "checkPoint", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr004$TestThread;", "chain4", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr004$TestThread;", "chain3", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr004$TestThread;", "chain2", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr004$TestThread;", "chain1", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr004$TestThread;", "run", "()V" },
 };
 
 #define NUMBER_OF_STACK_FRAMES ((int) (sizeof(frames)/sizeof(frame_info)))
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr005/getstacktr005.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr005/getstacktr005.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -46,11 +46,11 @@
 static jboolean printdump = JNI_FALSE;
 static jmethodID mid;
 static frame_info frames[] = {
-    {"Lnsk/jvmti/GetStackTrace/getstacktr005$TestThread;", "chain4", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr005$TestThread;", "chain3", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr005$TestThread;", "chain2", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr005$TestThread;", "chain1", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr005$TestThread;", "run", "()V"},
+    { "Lnsk/jvmti/GetStackTrace/getstacktr005$TestThread;", "chain4", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr005$TestThread;", "chain3", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr005$TestThread;", "chain2", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr005$TestThread;", "chain1", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr005$TestThread;", "run", "()V" },
 };
 
 #define NUMBER_OF_STACK_FRAMES ((int) (sizeof(frames)/sizeof(frame_info)))
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr006/getstacktr006.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr006/getstacktr006.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -46,11 +46,11 @@
 static jboolean printdump = JNI_FALSE;
 static jmethodID mid;
 static frame_info frames[] = {
-    {"Lnsk/jvmti/GetStackTrace/getstacktr006$TestThread;", "chain4", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr006$TestThread;", "chain3", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr006$TestThread;", "chain2", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr006$TestThread;", "chain1", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr006$TestThread;", "run", "()V"},
+    { "Lnsk/jvmti/GetStackTrace/getstacktr006$TestThread;", "chain4", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr006$TestThread;", "chain3", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr006$TestThread;", "chain2", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr006$TestThread;", "chain1", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr006$TestThread;", "run", "()V" },
 };
 
 #define NUMBER_OF_STACK_FRAMES ((int) (sizeof(frames)/sizeof(frame_info)))
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr007/getstacktr007.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr007/getstacktr007.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -47,12 +47,12 @@
 static jmethodID mid;
 static jbyteArray classBytes;
 static frame_info frames[] = {
-    {"Lnsk/jvmti/GetStackTrace/getstacktr007$TestThread;", "checkPoint", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr007$TestThread;", "chain4", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr007$TestThread;", "chain3", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr007$TestThread;", "chain2", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr007$TestThread;", "chain1", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr007$TestThread;", "run", "()V"},
+    { "Lnsk/jvmti/GetStackTrace/getstacktr007$TestThread;", "checkPoint", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr007$TestThread;", "chain4", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr007$TestThread;", "chain3", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr007$TestThread;", "chain2", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr007$TestThread;", "chain1", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr007$TestThread;", "run", "()V" },
 };
 
 #define NUMBER_OF_STACK_FRAMES ((int) (sizeof(frames)/sizeof(frame_info)))
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr008/getstacktr008.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetStackTrace/getstacktr008/getstacktr008.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -49,14 +49,14 @@
 static jmethodID mid_checkPoint, mid_chain4;
 static jbyteArray classBytes;
 static frame_info frames[] = {
-    {"Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "checkPoint", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "chain5", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "chain4", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr008;", "nativeChain", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "chain3", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "chain2", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "chain1", "()V"},
-    {"Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "run", "()V"},
+    { "Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "checkPoint", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "chain5", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "chain4", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr008;", "nativeChain", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "chain3", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "chain2", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "chain1", "()V" },
+    { "Lnsk/jvmti/GetStackTrace/getstacktr008$TestThread;", "run", "()V" },
 };
 
 #define NUMBER_OF_STACK_FRAMES ((int) (sizeof(frames)/sizeof(frame_info)))
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetSystemProperties/getsysprops002/getsysprops002.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetSystemProperties/getsysprops002/getsysprops002.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -42,8 +42,8 @@
 } PropertyDesc;
 
 static PropertyDesc propDescList[PROPERTIES_COUNT] = {
-    {"nsk.jvmti.test.property", "value of nsk.jvmti.test.property", 0},
-    {"nsk.jvmti.test.property.empty", "", 0}
+    { "nsk.jvmti.test.property", "value of nsk.jvmti.test.property", 0 },
+    { "nsk.jvmti.test.property.empty", "", 0 }
 };
 
 /* ============================================================================= */
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetSystemProperty/getsysprop002/getsysprop002.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetSystemProperty/getsysprop002/getsysprop002.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -41,8 +41,8 @@
 } PropertyDesc;
 
 static PropertyDesc propDescList[PROPERTIES_COUNT] = {
-    {"nsk.jvmti.test.property", "value of nsk.jvmti.test.property"},
-    {"nsk.jvmti.test.property.empty", ""}
+    { "nsk.jvmti.test.property", "value of nsk.jvmti.test.property" },
+    { "nsk.jvmti.test.property.empty", "" }
 };
 
 /* ============================================================================= */
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetThreadInfo/thrinfo001/thrinfo001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetThreadInfo/thrinfo001/thrinfo001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -43,9 +43,9 @@
 static jint result = PASSED;
 static jvmtiThreadInfo inf;
 static info threads[] = {
-    {"main", JVMTI_THREAD_NORM_PRIORITY, 0},
-    {"thread1", JVMTI_THREAD_MIN_PRIORITY + 2, 1},
-    {"Thread-", JVMTI_THREAD_MIN_PRIORITY, 1}
+    { "main", JVMTI_THREAD_NORM_PRIORITY, 0 },
+    { "thread1", JVMTI_THREAD_MIN_PRIORITY + 2, 1 },
+    { "Thread-", JVMTI_THREAD_MIN_PRIORITY, 1 }
 };
 
 #ifdef STATIC_BUILD
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/IsMethodSynthetic/issynth001/issynth001.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/IsMethodSynthetic/issynth001/issynth001.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -46,19 +46,19 @@
 static jint result = PASSED;
 static jboolean printdump = JNI_FALSE;
 static method_info methods[] = {
-    {1, "meth_stat", "(ILjava/lang/String;)[F", JNI_TRUE, JNI_FALSE},
-    {1, "meth_1", "(CCC)C", JNI_FALSE, JNI_FALSE},
-    {1, "class$", "(Ljava/lang/String;)Ljava/lang/Class;", JNI_TRUE, JNI_TRUE},
-    {1, "access$000",
-        "(Lnsk/jvmti/IsMethodSynthetic/issynth001a;)I", JNI_TRUE, JNI_TRUE},
-    {1, "nmeth", "()V", JNI_FALSE, JNI_FALSE},
-    {1, "check", "(Ljava/lang/Class;Ljava/lang/Class;)I", JNI_TRUE, JNI_FALSE},
+    { 1, "meth_stat", "(ILjava/lang/String;)[F", JNI_TRUE, JNI_FALSE },
+    { 1, "meth_1", "(CCC)C", JNI_FALSE, JNI_FALSE },
+    { 1, "class$", "(Ljava/lang/String;)Ljava/lang/Class;", JNI_TRUE, JNI_TRUE },
+    { 1, "access$000",
+        "(Lnsk/jvmti/IsMethodSynthetic/issynth001a;)I", JNI_TRUE, JNI_TRUE },
+    { 1, "nmeth", "()V", JNI_FALSE, JNI_FALSE },
+    { 1, "check", "(Ljava/lang/Class;Ljava/lang/Class;)I", JNI_TRUE, JNI_FALSE },
 
-    {2, "<init>", "()V", JNI_FALSE, JNI_FALSE},
-    {2, "run",
-        "([Ljava/lang/String;Ljava/io/PrintStream;)I", JNI_TRUE, JNI_FALSE},
+    { 2, "<init>", "()V", JNI_FALSE, JNI_FALSE },
+    { 2, "run",
+        "([Ljava/lang/String;Ljava/io/PrintStream;)I", JNI_TRUE, JNI_FALSE },
 
-    {3, "meth_inn", "(Ljava/lang/String;J)V", JNI_FALSE, JNI_FALSE},
+    { 3, "meth_inn", "(Ljava/lang/String;J)V", JNI_FALSE, JNI_FALSE },
 };
 
 #ifdef STATIC_BUILD
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/IterateThroughHeap/callbacks/Callbacks.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/IterateThroughHeap/callbacks/Callbacks.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -75,14 +75,14 @@
 #define ARRAY_LENGTH 5
 
 static const wchar_t *STRING = L"I hope you'll find me in the heap!";
-static jboolean BOOLEAN_ARRAY[] = {JNI_TRUE, JNI_TRUE, JNI_FALSE, JNI_TRUE, JNI_FALSE};
-static jbyte BYTE_ARRAY[] = {BYTE, BYTE+1, BYTE+2, BYTE+3, BYTE+4};
-static jchar CHAR_ARRAY[] = {CHAR, CHAR+1, CHAR+2, CHAR+3, CHAR+4};
-static jshort SHORT_ARRAY[] = {SHORT, SHORT+1, SHORT+2, SHORT+3, SHORT+4};
-static jint INT_ARRAY[] = {INT, INT+1, INT+2, INT+3, INT+4};
-static jlong LONG_ARRAY[] = {LONG, LONG+1, LONG+2, LONG+3, LONG+4};
-static jfloat FLOAT_ARRAY[] = {FLOAT, FLOAT+1, FLOAT+2, FLOAT+3, FLOAT+4};
-static jdouble DOUBLE_ARRAY[] = {DOUBLE, DOUBLE+1, DOUBLE+2, DOUBLE+3, DOUBLE+4};
+static jboolean BOOLEAN_ARRAY[] = { JNI_TRUE, JNI_TRUE, JNI_FALSE, JNI_TRUE, JNI_FALSE };
+static jbyte BYTE_ARRAY[] = { BYTE, BYTE+1, BYTE+2, BYTE+3, BYTE+4 };
+static jchar CHAR_ARRAY[] = { CHAR, CHAR+1, CHAR+2, CHAR+3, CHAR+4 };
+static jshort SHORT_ARRAY[] = { SHORT, SHORT+1, SHORT+2, SHORT+3, SHORT+4 };
+static jint INT_ARRAY[] = { INT, INT+1, INT+2, INT+3, INT+4 };
+static jlong LONG_ARRAY[] = { LONG, LONG+1, LONG+2, LONG+3, LONG+4 };
+static jfloat FLOAT_ARRAY[] = { FLOAT, FLOAT+1, FLOAT+2, FLOAT+3, FLOAT+4 };
+static jdouble DOUBLE_ARRAY[] = { DOUBLE, DOUBLE+1, DOUBLE+2, DOUBLE+3, DOUBLE+4 };
 
 static long timeout = 0;
 
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/IterateThroughHeap/filter-tagged/HeapFilter.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/IterateThroughHeap/filter-tagged/HeapFilter.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -61,10 +61,11 @@
 //expected values
 #define INT_ARRAY_LENGTH 2
 
-static jint TAGGED_STATIC_INT_VALUE = 0xC0DE01;
-static jint TAGGED_INT_VALUE = 0xC0DE02;
-static jint UNTAGGED_STATIC_INT_VALUE = 0xC0DE03;
-static jint UNTAGGED_INT_VALUE = 0xC0DE04;
+static jint POISON = 0x1234;
+static jint TAGGED_STATIC_INT_VALUE = 0xC0DE01 + POISON;
+static jint TAGGED_INT_VALUE = 0xC0DE02 + POISON;
+static jint UNTAGGED_STATIC_INT_VALUE = 0xC0DE03 + POISON;
+static jint UNTAGGED_INT_VALUE = 0xC0DE04 + POISON;
 static jint TAGGED_INT_ARRAY_VALUE[] = {0xC0DE01,
                                                  0xC0DE01+1};
 static jint UNTAGGED_INT_ARRAY_VALUE[] = {0xC0DE03,
@@ -352,6 +353,14 @@
       if (is_primitive_type(objects_info[object].fields[field].signature)) {
         objects_info[object].fields[field].primitive = 1;
         is_primitive = 1;
+        // Add POISON to all int fields to make the values opaque to the JIT compiler.
+        if (is_static) {
+          jint value = jni->GetStaticIntField(targetClass, targetFields[field]);
+          jni->SetStaticIntField(targetClass, targetFields[field], value + POISON);
+        } else {
+          jint value = jni->GetIntField(target, targetFields[field]);
+          jni->SetIntField(target, targetFields[field], value + POISON);
+        }
       } else {
         jobject value;
         if (!NSK_JVMTI_VERIFY(jvmti->GetFieldModifiers(
--- a/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/aod/jvmti_aod.cpp	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/aod/jvmti_aod.cpp	Mon Dec 03 10:08:18 2018 +0100
@@ -263,6 +263,7 @@
             error = jvmti->Allocate(size, &classBytes);
             if (error != JVMTI_ERROR_NONE) {
                 NSK_DISPLAY1("Failed to create memory %s\n", TranslateError(error));
+                fclose(bytecode);
                 return NSK_FALSE;
             }
 
--- a/test/jaxp/javax/xml/jaxp/libs/jaxp/library/JAXPTestUtilities.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jaxp/javax/xml/jaxp/libs/jaxp/library/JAXPTestUtilities.java	Mon Dec 03 10:08:18 2018 +0100
@@ -271,7 +271,7 @@
     protected static boolean isCommonURL(String s) {
         if (null == s)
             return false;
-        return Pattern.compile("^(file:|http:|ftp:|gopher:|mailto:|news:|telnet:)")
+        return Pattern.compile("^(file:|http:|ftp:|mailto:|news:|telnet:)")
                 .matcher(s).matches();
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/dom/DocumentTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2018, 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 dom;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.testng.Assert;
+import org.testng.annotations.Listeners;
+import org.testng.annotations.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
+
+/*
+ * @test
+ * @bug 8213117
+ * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
+ * @run testng dom.DocumentTest
+ * @summary Tests functionalities for Document.
+ */
+@Listeners({jaxp.library.BasePolicy.class})
+public class DocumentTest {
+
+    private static final String XML1 = "<root><oldNode oldAttrib1=\"old value 1\" oldAttrib2=\"old value 2\"></oldNode></root>";
+    private static final String XML2 = "<root><newNode newAttrib=\"new value\"></newNode></root>";
+
+    /**
+     * Verifies the adoptNode method. Before a node from a deferred DOM can be
+     * adopted, it needs to be fully expanded.
+     */
+    @Test
+    public void testAdoptNode() throws Exception {
+
+        DocumentBuilder builder = DocumentBuilderFactory.newInstance()
+                .newDocumentBuilder();
+
+        Document doc1 = getDocument(builder, XML1);
+        Document doc2 = getDocument(builder, XML2);
+
+        Element newNode = (Element) doc2.getFirstChild().getFirstChild();
+        Element replacementNode = (Element) doc1.adoptNode(newNode);
+
+        Node oldNode = doc1.getFirstChild().getFirstChild();
+        doc1.getDocumentElement().replaceChild(replacementNode, oldNode);
+
+        String attrValue = doc1.getFirstChild().getFirstChild().getAttributes()
+                .getNamedItem("newAttrib").getNodeValue();
+        Assert.assertEquals(attrValue, "new value");
+    }
+
+    private static Document getDocument(DocumentBuilder builder, String xml) throws SAXException, IOException {
+        InputStream a = new ByteArrayInputStream(xml.getBytes());
+        Document out = builder.parse(a);
+        return out;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/sax/SAXParserTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2018, 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 sax;
+
+import static jaxp.library.JAXPTestUtilities.getSystemProperty;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import org.testng.annotations.Listeners;
+import org.testng.annotations.Test;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/*
+ * @test
+ * @bug 8213734
+ * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
+ * @run testng sax.SAXParserTest
+ * @summary Tests functionalities for SAXParser.
+ */
+@Listeners({ jaxp.library.BasePolicy.class })
+public class SAXParserTest {
+
+    /*
+     * @bug 8213734
+     * Verifies that files opened by the SAXParser is closed when Exception
+     * occurs.
+     */
+    @Test
+    public void testCloseReaders() throws Exception {
+        if (!getSystemProperty("os.name").contains("Windows")) {
+            System.out.println("This test only needs to be run on Windows.");
+            return;
+        }
+        Path testFile = createTestFile(null, "Test");
+        System.out.println("Test file: " + testFile.toString());
+        SAXParserFactory factory = SAXParserFactory.newDefaultInstance();
+        SAXParser parser = factory.newSAXParser();
+        try {
+            parser.parse(testFile.toFile(), new DefaultHandler() {
+                @Override
+                public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+                    throw new SAXException("Stop the parser.");
+                }
+            });
+        } catch (SAXException e) {
+            // Do nothing
+        }
+
+        // deletion failes on Windows when the file is not closed
+        Files.deleteIfExists(testFile);
+    }
+
+    private static Path createTestFile(Path dir, String name) throws IOException {
+        Path path = Files.createTempFile(name, ".xml");
+            byte[] bytes = "<?xml version=\"1.0\"?><test a1=\"x\" a2=\"y\"/>"
+        .getBytes(StandardCharsets.UTF_8);
+
+        Files.write(path, bytes);
+        return path;
+    }
+}
--- a/test/jdk/ProblemList.txt	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/ProblemList.txt	Mon Dec 03 10:08:18 2018 +0100
@@ -186,7 +186,6 @@
 java/awt/event/MouseEvent/MouseButtonsAndKeyMasksTest/MouseButtonsAndKeyMasksTest.java 8129778 generic-all
 
 java/awt/dnd/URIListToFileListBetweenJVMsTest/URIListToFileListBetweenJVMsTest.html 8194947 generic-all
-java/awt/dnd/ImageTransferTest/ImageTransferTest.java 8176556 generic-all
 java/awt/Frame/SetMaximizedBounds/SetMaximizedBounds.java 8196006 windows-all
 java/awt/Frame/FramesGC/FramesGC.java 8079069 macosx-all
 java/awt/FullScreen/AltTabCrashTest/AltTabCrashTest.java 8047218 generic-all
@@ -252,7 +251,6 @@
 java/awt/print/PrinterJob/PSQuestionMark.java 7003378 generic-all
 java/awt/print/PrinterJob/GlyphPositions.java 7003378 generic-all
 java/awt/Choice/PopupPosTest/PopupPosTest.html 8192930 windows-all
-java/awt/Choice/ChoiceKeyEventReaction/ChoiceKeyEventReaction.html 6849922 macosx-all
 java/awt/Choice/ChoiceMouseWheelTest/ChoiceMouseWheelTest.java 7100044 macosx-all,linux-all
 java/awt/Component/CreateImage/CreateImage.java 8198334  windows-all
 java/awt/Component/GetScreenLocTest/GetScreenLocTest.java 4753654 generic-all
@@ -718,7 +716,7 @@
 com/sun/java/swing/plaf/windows/Test8173145.java 8198334 windows-all
 
 javax/swing/border/Test6981576.java 8198339 generic-all
-javax/swing/border/TestTitledBorderLeak.java: 8213531 linux-all
+javax/swing/border/TestTitledBorderLeak.java 8213531 linux-all
 javax/swing/JComponent/7154030/bug7154030.java 7190978 generic-all
 javax/swing/JComboBox/ConsumedKeyTest/ConsumedKeyTest.java 8067986 generic-all
 javax/swing/JComponent/6683775/bug6683775.java 8172337 generic-all
@@ -817,7 +815,6 @@
 javax/swing/JPopupMenu/6583251/bug6583251.java 8213564 linux-all
 javax/swing/dnd/8139050/NativeErrorsInTableDnD.java 8202765  macosx-all,linux-all
 javax/swing/Popup/TaskbarPositionTest.java 8065097 macosx-all,linux-all
-javax/swing/GraphicsConfigNotifier/StalePreferredSize.java 8213121 macosx-all,linux-all
 javax/swing/JButton/4368790/bug4368790.java 8213123 macosx-all
 javax/swing/JEditorPane/6917744/bug6917744.java 8213124 macosx-all
 javax/swing/JTable/6263446/bug6263446.java 8169959 macosx-all
--- a/test/jdk/com/sun/jdi/ProcessAttachTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/com/sun/jdi/ProcessAttachTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -38,11 +38,10 @@
  * @bug 4527279
  * @summary Unit test for ProcessAttachingConnector
  *
- * @library /lib/testlibrary
  * @library /test/lib
  * @modules java.management
  *          jdk.jdi
- * @build jdk.testlibrary.* ProcessAttachTest
+ * @build ProcessAttachTest
  * @run driver ProcessAttachTest
  */
 
--- a/test/jdk/com/sun/tools/attach/BasicTests.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/com/sun/tools/attach/BasicTests.java	Mon Dec 03 10:08:18 2018 +0100
@@ -44,13 +44,12 @@
  * @summary Basic unit tests for the VM attach mechanism. This test will perform
  * a number of basic attach tests.
  *
- * @library /lib/testlibrary
  * @library /test/lib
  * @modules java.instrument
  *          jdk.attach
  *          jdk.jartool/sun.tools.jar
  *
- * @run build jdk.testlibrary.* Agent BadAgent RedefineAgent Application RedefineDummy RunnerUtil
+ * @run build Agent BadAgent RedefineAgent Application RedefineDummy RunnerUtil
  * @run main BasicTests
  */
 public class BasicTests {
--- a/test/jdk/com/sun/tools/attach/PermissionTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/com/sun/tools/attach/PermissionTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,12 +34,11 @@
  * @summary Basic unit tests for the VM attach mechanism. Unit test for Attach
  * API - this checks that a SecurityException is thrown as expected.
  *
- * @library /lib/testlibrary
  * @library /test/lib
  * @modules jdk.attach
  *          jdk.jartool/sun.tools.jar
  *
- * @run build jdk.testlibrary.* Application
+ * @run build Application
  * @run main PermissionTest
  */
 public class PermissionTest {
--- a/test/jdk/com/sun/tools/attach/ProviderTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/com/sun/tools/attach/ProviderTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -33,12 +33,11 @@
  * @summary Basic unit tests for the VM attach mechanism. The test will attach
  * and detach to/from the running Application.
  *
- * @library /lib/testlibrary
  * @library /test/lib
  * @modules jdk.attach
  *          jdk.jartool/sun.tools.jar
  *
- * @run build jdk.testlibrary.* SimpleProvider
+ * @run build SimpleProvider
  * @run main ProviderTest
  */
 public class ProviderTest {
--- a/test/jdk/com/sun/tools/attach/TempDirTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/com/sun/tools/attach/TempDirTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -38,12 +38,11 @@
  * @bug 8033104
  * @summary Test to make sure attach and jvmstat works correctly when java.io.tmpdir is set
  *
- * @library /lib/testlibrary
  * @library /test/lib
  * @modules jdk.attach
  *          jdk.jartool/sun.tools.jar
  *
- * @run build jdk.testlibrary.* Application RunnerUtil
+ * @run build Application RunnerUtil
  * @run main/timeout=200 TempDirTest
  */
 
--- a/test/jdk/java/awt/Choice/ChoiceKeyEventReaction/ChoiceKeyEventReaction.html	Mon Nov 26 19:05:55 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-<!--
- Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- This code is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License version 2 only, as
- published by the Free Software Foundation.
-
- This code is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- version 2 for more details (a copy is included in the LICENSE file that
- accompanied this code).
-
- You should have received a copy of the GNU General Public License version
- 2 along with this work; if not, write to the Free Software Foundation,
- Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-
- Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- or visit www.oracle.com if you need additional information or have any
- questions.
--->
-
-<html>
-<!--  
-  @test
-  @key headful
-  @bug 6252982
-  @summary PIT: Keyboard FocusTraversal not working when choice's drop-down is visible, on XToolkit
-  @author andrei.dmitriev : area=awt.choice
-  @library ../../regtesthelpers
-  @build Util
-  @run applet ChoiceKeyEventReaction.html
-  -->
-<head>
-<title>  </title>
-</head>
-<body>
-
-<h1>ChoiceKeyEventReaction<br>Bug ID: 6252982 </h1>
-
-<p> This is an AUTOMATIC test, simply wait for completion </p>
-
-<APPLET CODE="ChoiceKeyEventReaction.class" WIDTH=200 HEIGHT=200></APPLET>
-</body>
-</html>
-
--- a/test/jdk/java/awt/Choice/ChoiceKeyEventReaction/ChoiceKeyEventReaction.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Choice/ChoiceKeyEventReaction/ChoiceKeyEventReaction.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,121 +22,126 @@
  */
 
 /*
-  test
-  @bug 6252982
-  @summary PIT: Keyboard FocusTraversal not working when choice's drop-down is visible, on XToolkit
-  @author andrei.dmitriev : area=awt.choice
-  @run applet ChoiceKeyEventReaction.html
-*/
+ * @test
+ * @bug 6252982
+ * @key headful
+ * @summary PIT: Keyboard FocusTraversal not working when choice's drop-down is visible, on XToolkit
+ * @author andrei.dmitriev : area=awt.choice
+ * @run main ChoiceKeyEventReaction
+ */
 
-import java.applet.Applet;
-import java.awt.*;
-import java.awt.event.*;
-import test.java.awt.regtesthelpers.Util;
+import java.awt.Robot;
+import java.awt.Choice;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.awt.TextField;
+import java.awt.FlowLayout;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.KeyAdapter;
+import java.awt.event.ItemListener;
+import java.awt.Frame;
 
-public class ChoiceKeyEventReaction extends Applet
+public class ChoiceKeyEventReaction
 {
-    Robot robot;
-    Choice choice1 = new Choice();
-    Point pt;
-    TextField tf = new TextField("Hi");
+    private static Robot robot;
+    private static Choice choice1 = new Choice();
+    private static Point pt;
+    private static TextField tf = new TextField("Hi");
+    private static boolean keyTypedOnTextField = false;
+    private static boolean itemChanged = false;
+    private static Frame frame;
+    private static String toolkit;
+
+    public static void main(String[] args) {
+        createAndShowGUI();
 
-    boolean keyTypedOnTextField = false;
-    boolean itemChanged = false;
-    String toolkit;
+        try {
+            robot = new Robot();
+            robot.setAutoDelay(100);
 
-    public void init()
-    {
+            moveFocusToTextField();
+            testKeyOnChoice(InputEvent.BUTTON1_MASK, KeyEvent.VK_UP);
+        } catch (Exception e) {
+            throw new RuntimeException("Test failed. Exception thrown: "+e);
+        } finally {
+            if (frame != null) {
+                frame.dispose();
+            }
+        }
+    }
+
+    private static void createAndShowGUI() {
+        frame = new Frame();
         toolkit = Toolkit.getDefaultToolkit().getClass().getName();
         System.out.println("Current toolkit is :" +toolkit);
         for (int i = 1; i<20; i++){
             choice1.add("item-0"+i);
         }
+
         tf.addKeyListener(new KeyAdapter(){
-                public void keyPressed(KeyEvent ke) {
-                    keyTypedOnTextField = true;
-                    System.out.println(ke);
-                }
-            });
-
+            public void keyPressed(KeyEvent ke) {
+                keyTypedOnTextField = true;
+                System.out.println(ke);
+            }
+        });
 
         choice1.addItemListener(new ItemListener() {
-                public void itemStateChanged(ItemEvent e) {
-                    itemChanged = true;
-                    System.out.println(e);
-                }
-            });
-
+            public void itemStateChanged(ItemEvent e) {
+                itemChanged = true;
+                System.out.println(e);
+            }
+        });
         choice1.setFocusable(false);
-        add(tf);
-        add(choice1);
-        setLayout (new FlowLayout());
-    }//End  init()
 
-    public void start ()
-    {
-        setSize (200,200);
-        setVisible(true);
-        validate();
-        try{
-            robot = new Robot();
-            Util.waitForIdle(robot);
-            moveFocusToTextField();
-            testKeyOnChoice(InputEvent.BUTTON1_MASK, KeyEvent.VK_UP);
-        } catch (Throwable e) {
-            throw new RuntimeException("Test failed. Exception thrown: "+e);
-        }
-    }// start()
+        frame.add(tf);
+        frame.add(choice1);
+        frame.setLayout (new FlowLayout());
+        frame.setSize (200,200);
+        frame.setVisible(true);
+    }
 
-    public void testKeyOnChoice(int button, int key){
+    private static void testKeyOnChoice(int button, int key) {
         pt = choice1.getLocationOnScreen();
         robot.mouseMove(pt.x + choice1.getWidth()/2, pt.y + choice1.getHeight()/2);
-        Util.waitForIdle(robot);
+
         robot.mousePress(button);
-        robot.delay(10);
         robot.mouseRelease(button);
-        Util.waitForIdle(robot);
 
         robot.keyPress(key);
         robot.keyRelease(key);
 
-        Util.waitForIdle(robot);
-
         System.out.println("keyTypedOnTextField = "+keyTypedOnTextField +": itemChanged = " + itemChanged);
-
-        if (itemChanged){
-                throw new RuntimeException("Test failed. ItemChanged event occur on Choice.");
+        if (itemChanged) {
+            throw new RuntimeException("Test failed. ItemChanged event occur on Choice.");
         }
 
-        // We may just write
-        // if (toolkit.equals("sun.awt.windows.WToolkit") == keyTypedOnTextField) {fail;}
-        // but  must report differently in these cases so put two separate if statements for simplicity.
-        if (toolkit.equals("sun.awt.windows.WToolkit") &&
-            !keyTypedOnTextField)
-        {
-            throw new RuntimeException("Test failed. (Win32) KeyEvent wasn't addressed to TextField. ");
-        }
+       // We may just write
+       // if (toolkit.equals("sun.awt.windows.WToolkit") == keyTypedOnTextField) {fail;}
+       // but  must report differently in these cases so put two separate if statements for simplicity.
+       if (toolkit.equals("sun.awt.windows.WToolkit") &&
+           !keyTypedOnTextField) {
+           throw new RuntimeException("Test failed. (Win32) KeyEvent wasn't addressed to TextField. ");
+       }
 
-        if (!toolkit.equals("sun.awt.windows.WToolkit") &&
-            keyTypedOnTextField)
-        {
-            throw new RuntimeException("Test failed. (XToolkit/MToolkit). KeyEvent was addressed to TextField.");
+       if (!toolkit.equals("sun.awt.windows.WToolkit") &&
+          keyTypedOnTextField) {
+           throw new RuntimeException("Test failed. (XToolkit/MToolkit). KeyEvent was addressed to TextField.");
         }
 
         System.out.println("Test passed. Unfocusable Choice doesn't react on keys.");
+
         //close opened choice
         robot.keyPress(KeyEvent.VK_ESCAPE);
         robot.keyRelease(KeyEvent.VK_ESCAPE);
-        Util.waitForIdle(robot);
     }
 
-    public void moveFocusToTextField(){
+    public static void moveFocusToTextField() {
         pt = tf.getLocationOnScreen();
         robot.mouseMove(pt.x + tf.getWidth()/2, pt.y + tf.getHeight()/2);
-        Util.waitForIdle(robot);
+
         robot.mousePress(InputEvent.BUTTON1_MASK);
-        robot.delay(10);
         robot.mouseRelease(InputEvent.BUTTON1_MASK);
-        Util.waitForIdle(robot);
     }
-}//:~
+}
--- a/test/jdk/java/awt/Component/PaintAll/PaintAll.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Component/PaintAll/PaintAll.java	Mon Dec 03 10:08:18 2018 +0100
@@ -47,7 +47,7 @@
   @bug 6596915
   @summary Test Component.paintAll() method
   @author sergey.bylokhov@oracle.com: area=awt.component
-  @library ../../../../lib/testlibrary/
+  @library /lib/client/
   @build ExtendedRobot
   @run main PaintAll
 */
--- a/test/jdk/java/awt/Frame/DecoratedExceptions/DecoratedExceptions.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Frame/DecoratedExceptions/DecoratedExceptions.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary An attempt to set non-trivial background, shape, or translucency
  *          to a decorated toplevel should end with an exception.
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main DecoratedExceptions
  */
--- a/test/jdk/java/awt/Frame/DisposeParentGC/DisposeParentGC.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Frame/DisposeParentGC/DisposeParentGC.java	Mon Dec 03 10:08:18 2018 +0100
@@ -35,7 +35,7 @@
  *          added to it & each components are setted with different cursors types.
  *          Dispose the parent & collect GC. Garbage collection should happen
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main/othervm -Xmx20m DisposeParentGC
  */
--- a/test/jdk/java/awt/Frame/FramesGC/FramesGC.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Frame/FramesGC/FramesGC.java	Mon Dec 03 10:08:18 2018 +0100
@@ -33,7 +33,7 @@
  * @key headful
  * @summary Verify that disposed frames are collected with GC
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main/othervm -Xmx20m FramesGC
  */
--- a/test/jdk/java/awt/Frame/MaximizedUndecorated/MaximizedUndecorated.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Frame/MaximizedUndecorated/MaximizedUndecorated.java	Mon Dec 03 10:08:18 2018 +0100
@@ -36,7 +36,7 @@
  * @summary Set extendedState Frame.MAXIMIZED_BOTH for undecorated Frame and JFrame.
  *          Check if resulted size is equal to GraphicsEnvironment.getMaximumWindowBounds().
  *
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main MaximizedUndecorated
  */
--- a/test/jdk/java/awt/Frame/MiscUndecorated/ActiveAWTWindowTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Frame/MiscUndecorated/ActiveAWTWindowTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -27,7 +27,7 @@
  * @summary To check proper WINDOW_EVENTS are triggered when Frame gains or losses the focus
  * @author Jitender(jitender.singh@eng.sun.com) area=AWT
  * @author yan
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main ActiveAWTWindowTest
  */
--- a/test/jdk/java/awt/Frame/MiscUndecorated/ActiveSwingWindowTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Frame/MiscUndecorated/ActiveSwingWindowTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -27,7 +27,7 @@
  * @summary To check proper WINDOW_EVENTS are triggered when JFrame gains or losses the focus
  * @author Jitender(jitender.singh@eng.sun.com) area=AWT
  * @author yan
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main ActiveSwingWindowTest
  */
--- a/test/jdk/java/awt/Frame/MiscUndecorated/FrameCloseTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Frame/MiscUndecorated/FrameCloseTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -27,7 +27,7 @@
  * @summary To make sure Undecorated Frame triggers correct windows events while closing
  * @author Jitender(jitender.singh@eng.sun.com) area=AWT*
  * @author yan
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main FrameCloseTest
  */
--- a/test/jdk/java/awt/Frame/MiscUndecorated/RepaintTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Frame/MiscUndecorated/RepaintTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,7 @@
  *          all the components on it are repainted correctly
  * @author Jitender(jitender.singh@eng.sun.com) area=AWT
  * @author yan
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main RepaintTest
  */
--- a/test/jdk/java/awt/GraphicsDevice/IncorrectDisplayModeExitFullscreen.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/GraphicsDevice/IncorrectDisplayModeExitFullscreen.java	Mon Dec 03 10:08:18 2018 +0100
@@ -33,7 +33,7 @@
  * @key headful
  * @bug 8019587
  * @author Sergey Bylokhov
- * @library ../../../lib/testlibrary/
+ * @library /lib/client/
  * @build ExtendedRobot
  * @run main IncorrectDisplayModeExitFullscreen
  */
--- a/test/jdk/java/awt/List/SetBackgroundTest/SetBackgroundTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/List/SetBackgroundTest/SetBackgroundTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,7 @@
   @requires (os.family == "linux") | (os.family == "solaris")
   @summary List does not honor user specified background, foreground colors on XToolkit
   @author Dmitry Cherepanov  area=awt.list
-  @library ../../../../lib/testlibrary
+  @library /lib/client
   @build ExtendedRobot
   @run main SetBackgroundTest
 */
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogAppModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogAppModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a null Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogAppModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogAppModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a null Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogAppModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogAppModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a hidden Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogAppModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogAppModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a hidden Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogAppModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogAppModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a visible Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogAppModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogAppModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a visible Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a null Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a null Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a hidden Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a hidden Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a visible Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a visible Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal7Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogDocModal7Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @bug 8054359 7186009
  * @summary Check whether a FileDialog set to document modality behaves as expected.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          created with a null Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          created with a null Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          created with a hidden Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          created with a hidden Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          created with a visible Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          created with a visible Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          created with a null Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          created with a null Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          created with a hidden Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          created with a hidden Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          created with a visible Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          created with a visible Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal7Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogNonModal7Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @bug 8054359
  * @summary Check whether a modeless FileDialog behaves as expected.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a null Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a null Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a hidden Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a hidden Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a visible Frame constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          created with a visible Dialog constructor. Also check if other
  *          windows are blocked by the FileDialog too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal7Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/FileDialog/FileDialogTKModal7Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @bug 8054359 7186009
  * @summary Check whether a FileDialog set to toolkit modality behaves as expected.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDDAppModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDDAppModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also the correctness
  *          of blocking behavior for the parent Dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDDDocModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDDDocModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also the correctness
  *          of blocking behavior for the parent Dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDDModelessTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDDModelessTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also the correctness
  *          of blocking behavior for the parent Dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDDNonModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDDNonModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          and respond to key events. Check also the correctness
  *          of blocking behavior for the parent Dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDDSetModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDDSetModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events. Check also the correctness
  *          of blocking behavior for the parent Dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDDToolkitModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDDToolkitModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also the correctness
  *          of blocking behavior for the parent Dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFAppModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFAppModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also the correctness
  *          of blocking behavior for the parent Frame.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFSetModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFSetModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also the correctness
  *          of blocking behavior for the parent Frame.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFToolkitModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFToolkitModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also the correctness
  *          of blocking behavior for the parent Frame.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFWModeless1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFWModeless1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also if the other windows
  *          receive mouse and key events.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFWModeless2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFWModeless2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also if the other windows
  *          receive mouse and key events.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFWNonModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFWNonModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events. Check also if the other windows
  *          receive mouse and key events.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFWNonModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDFWNonModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events. Check also if the other windows
  *          receive mouse and key events.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDocModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingDocModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,7 +34,7 @@
  *          whether all the windows lying down the document root
  *          (Frame) get blocked.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDAppModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDAppModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also the correctness
  *          of the blocking behavior for the parent Frame.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDDocModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDDocModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also the correctness
  *          of the blocking behavior for the parent Frame.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDModelessTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDModelessTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also the correctness
  *          of the blocking behavior for the parent Frame.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDNonModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDNonModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events. Check also the correctness
  *          of the blocking behavior for the parent Frame.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDSetModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDSetModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events. Check also the correctness
  *          of the blocking behavior for the parent Frame.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDToolkitModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDToolkitModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events. Check also the correctness
  *          of the blocking behavior for the parent Frame.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWDocModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWDocModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Check also the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWDocModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWDocModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Check also the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWDocModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWDocModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Check also the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWDocModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWDocModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Check also the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWModeless1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWModeless1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Check also the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWModeless2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWModeless2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Check also the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWModeless3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWModeless3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Check also the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWModeless4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWModeless4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Check also the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWNonModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWNonModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Check also the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWNonModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWNonModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Check also the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWNonModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWNonModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Check also the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWNonModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingFDWNonModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Check also the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsDocModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsDocModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsDocModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsDocModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          and respond to key events, when there are other windows shown.
  *          Also check the correctness of blocking behavior for other windows shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/UnblockedDialogAppModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/UnblockedDialogAppModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether an application modal Dialog receives focus; check
  *          if its components receive focus and respond to key events
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/UnblockedDialogDocModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/UnblockedDialogDocModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a document modal Dialog receives focus; check
  *          if its components receive focus and respond to key events
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/UnblockedDialogModelessTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/UnblockedDialogModelessTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modeless Dialog receives focus; check
  *          if its components receive focus and respond to key events
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/UnblockedDialogNonModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/UnblockedDialogNonModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check whether a non-modal Dialog receives focus; check
  *          if its components receive focus and respond to key events
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/UnblockedDialogSetModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/UnblockedDialogSetModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check whether a modal Dialog receives focus; check
  *          if its components receive focus and respond to key events
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalBlockingTests/UnblockedDialogToolkitModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalBlockingTests/UnblockedDialogToolkitModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a toolkit modal Dialog receives focus; check
  *          if its components receive focus and respond to key events
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalDialogOrderingTest/ModalDialogOrderingTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalDialogOrderingTest/ModalDialogOrderingTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -35,7 +35,7 @@
  * @bug 8008728
  * @summary [macosx] Swing. JDialog. Modal dialog goes to background
  * @author Alexandr Scherbatiy
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main ModalDialogOrderingTest
  */
--- a/test/jdk/java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogFileTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogFileTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          (it shouldn't). Checks also whether setting a parent dialog to be
  *          modality excluded excludes its children from being blocked too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogPageSetupTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogPageSetupTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          (it shouldn't). Checks also whether setting a parent dialog to be
  *          modality excluded excludes its children from being blocked too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogPrintSetupTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogPrintSetupTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          (it shouldn't). Checks also whether setting a parent dialog to be
  *          modality excluded excludes its children from being blocked too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalExclusionTests/ApplicationExcludeFrameFileTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalExclusionTests/ApplicationExcludeFrameFileTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          (it shouldn't). Checks also whether setting a parent frame to be
  *          modality excluded excludes its children from being blocked too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalExclusionTests/ApplicationExcludeFramePageSetupTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalExclusionTests/ApplicationExcludeFramePageSetupTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          (it shouldn't). Checks also whether setting a parent frame to be
  *          modality excluded excludes its children from being blocked too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalExclusionTests/ApplicationExcludeFramePrintSetupTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalExclusionTests/ApplicationExcludeFramePrintSetupTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          (it shouldn't). Checks also whether setting a parent frame to be
  *          modality excluded excludes its children from being blocked too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalExclusionTests/ToolkitExcludeDialogFileTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalExclusionTests/ToolkitExcludeDialogFileTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          (it shouldn't). Checks also whether setting a parent dialog to be
  *          modality excluded excludes its children from being blocked too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalExclusionTests/ToolkitExcludeDialogPageSetupTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalExclusionTests/ToolkitExcludeDialogPageSetupTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          (it shouldn't). Checks also whether setting a parent dialog to be
  *          modality excluded excludes its children from being blocked too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalExclusionTests/ToolkitExcludeDialogPrintSetupTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalExclusionTests/ToolkitExcludeDialogPrintSetupTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          (it shouldn't). Checks also whether setting a parent dialog to be
  *          modality excluded excludes its children from being blocked too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalExclusionTests/ToolkitExcludeFrameFileTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalExclusionTests/ToolkitExcludeFrameFileTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          (it shouldn't). Checks also whether setting a parent frame to be
  *          modality excluded excludes its children from being blocked too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalExclusionTests/ToolkitExcludeFramePageSetupTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalExclusionTests/ToolkitExcludeFramePageSetupTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          (it shouldn't). Checks also whether setting a parent frame to be
  *          modality excluded excludes its children from being blocked too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalExclusionTests/ToolkitExcludeFramePrintSetupTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalExclusionTests/ToolkitExcludeFramePrintSetupTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          (it shouldn't). Checks also whether setting a parent frame to be
  *          modality excluded excludes its children from being blocked too.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFAppModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFAppModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          happens: an application modal dialog (D) having null frame owner is shown;
  *          a window having D as owner is shown; a frame is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFDocModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFDocModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          following happens: a document modal dialog (D) having null frame owner is shown;
  *          a window having D as owner is shown; a frame is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFModelessTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFModelessTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          following happens: a modeless dialog (D) having null frame owner is shown;
  *          a window having D as owner is shown; a frame is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFNonModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFNonModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          happens: a non-modal dialog (D) having null frame owner is shown; a window having D
  *          as owner is shown; a frame is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsAppModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsAppModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          frame owner is shown; a dialog (D2) having D1 owner is shown; a dialog
  *          with a hidden frame owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsDocModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsDocModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          frame owner is shown; a dialog (D2) having D1 owner is shown; a dialog
  *          with a hidden frame owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsModelessTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsModelessTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          frame owner is shown; a dialog (D2) having D1 owner is shown; a dialog
  *          with a hidden frame owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsNonModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsNonModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          frame owner is shown; a dialog (D2) having D1 owner is shown; a dialog
  *          with a hidden frame owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFDWAppModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFDWAppModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          the following happens: a frame is shown; an application modal dialog (D)
  *          having a null frame owner is shown; a window having D as owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFDWDocModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFDWDocModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          the following happens: a frame is shown; a document modal dialog (D)
  *          having a null frame owner is shown; a window having D as owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFDWModelessTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFDWModelessTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          the following happens: a frame is shown; a modeless dialog (D)
  *          having a null frame owner is shown; a window having D as owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFDWNonModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFDWNonModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          the following happens: a frame is shown; a non-modal dialog (D)
  *          having a null frame owner is shown; a window having D as owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDAppModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDAppModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; an application modal dialog having
  *          a hidden dialog owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDAppModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDAppModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; an application modal dialog having
  *          a hidden frame owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDAppModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDAppModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; an application modal dialog having
  *          a null dialog owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDAppModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDAppModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; an application modal dialog having
  *          a null frame owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDDocModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDDocModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; a document modal dialog having
  *          a hidden dialog owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDDocModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDDocModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; a document modal dialog having
  *          a hidden frame owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDDocModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDDocModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; a document modal dialog having
  *          a null dialog owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDDocModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDDocModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; a document modal dialog having
  *          a null frame owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDModeless1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDModeless1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; a modeless dialog having
  *          a hidden dialog owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDModeless2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDModeless2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; a modeless dialog having
  *          a hidden frame owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDModeless3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDModeless3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; a modeless dialog having
  *          a null dialog owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDModeless4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDModeless4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; a modeless dialog having
  *          a null frame owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDNonModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDNonModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; a non-modal dialog having
  *          a hidden dialog owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDNonModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDNonModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; a non-modal dialog having
  *          a hidden frame owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDNonModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDNonModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; a non-modal dialog having
  *          a null dialog owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDNonModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDNonModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          a frame (F) is shown; a window having F as owner is shown; a non-modal dialog having
  *          a null frame owner is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFAppModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFAppModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          the following happens: a window having a hidden frame owner is shown;
  *          an application modal dialog having a frame (F) owner is shown; F is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFAppModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFAppModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          an application modal dialog having a null dialog owner is shown;
  *          a frame is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFAppModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFAppModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          an application modal dialog having F owner is shown; F is shown.
  *
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFDocModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFDocModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          the following happens: a window having a hidden frame owner is shown;
  *          a document modal dialog with a frame (F) owner is shown; F is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFDocModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFDocModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          a document modal dialog having a null dialog owner is shown;
  *          a frame is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFDocModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFDocModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          the following happens: a window having a frame (F) owner is shown;
  *          a document modal dialog having F owner is shown; F is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFModeless1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFModeless1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          the following happens: a window having a hidden frame owner is shown;
  *          a modeless dialog having a frame (F) owner is shown; F is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFModeless2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFModeless2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          a modeless dialog having a null dialog owner is shown;
  *          a frame is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFModeless3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFModeless3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          the following happens: a window having a frame (F) owner is shown;
  *          a modeless dialog having F owner is shown; F is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFNonModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFNonModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          the following happens: a window having a hidden frame owner is shown;
  *          a non-modal dialog having a frame (F) owner is shown; F is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFNonModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFNonModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          a non-modal dialog having a null dialog owner is shown;
  *          a frame is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFNonModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFNonModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          the following happens: a window having a frame (F) owner is shown;
  *          a non-modal dialog having F owner is shown; F is shown.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/MultipleDialogs/MultipleDialogs1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/MultipleDialogs/MultipleDialogs1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  *          parent has a proper modal blocking behavior. Also show a document modal
  *          dialog and check if it blocks the document properly.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/MultipleDialogs/MultipleDialogs2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/MultipleDialogs/MultipleDialogs2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  *          parent has a proper modal blocking behavior. Also show a document modal
  *          dialog and check if it blocks the document properly.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/MultipleDialogs/MultipleDialogs3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/MultipleDialogs/MultipleDialogs3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,7 @@
  * @summary Check correctness of modal blocking behavior for a chain of Dialogs
  *          having different modality types with a Frame as a document root.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/MultipleDialogs/MultipleDialogs4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/MultipleDialogs/MultipleDialogs4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  *          work properly. Also check whether the blocking dialogs are
  *          opening on top of the windows they block.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/MultipleDialogs/MultipleDialogs5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/MultipleDialogs/MultipleDialogs5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,7 @@
  * @summary This is a simple check if a chain of dialogs having different
  *          modality types block each other properly.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/NullModalityDialogTest/NullModalityDialogTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/NullModalityDialogTest/NullModalityDialogTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,7 +34,7 @@
  * @summary Check whether a Dialog set with null modality type
  *          behaves like a modeless dialog
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopAppModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopAppModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether an application modal Dialog created with null Frame
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopAppModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopAppModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether an application modal Dialog created with null Dialog
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopAppModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopAppModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether an application modal Dialog created with hidden Frame
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopAppModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopAppModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether an application modal Dialog created with hidden Dialog
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopAppModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopAppModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether an application modal Dialog created with visible Frame
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopAppModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopAppModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether an application modal Dialog created with visible
  *          Dialog constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopDocModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopDocModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a document modal Dialog created with null Frame
  *          constructor follows normal Z order.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopDocModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopDocModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a document modal Dialog created with null Dialog
  *          constructor follows normal Z order.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopDocModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopDocModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a document modal Dialog created with hidden Frame
  *          constructor follows normal Z order.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopDocModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopDocModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a document modal Dialog created with hidden Dialog
  *          constructor follows normal Z order.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopDocModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopDocModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a document modal Dialog created with visible Frame
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopDocModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopDocModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a document modal Dialog created with visible
  *          Dialog constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modal Dialog created with null Frame
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modal Dialog created with null Dialog
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modal Dialog created with hidden Frame
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modal Dialog created with hidden Dialog
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modal Dialog created with visible Frame
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modal Dialog created with visible Dialog
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopModeless1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopModeless1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modeless Dialog created with a
  *          null Frame constructor follows normal Z Order.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopModeless2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopModeless2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modeless Dialog created with a
  *          null Dialog constructor follows normal Z Order.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopModeless3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopModeless3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modeless Dialog created with a
  *          hidden Frame constructor follows normal Z Order.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopModeless4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopModeless4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modeless Dialog created with a
  *          hidden Dialog constructor follows normal Z Order.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopModeless5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopModeless5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modeless Dialog created with a
  *          visible Frame constructor follows normal Z Order.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopModeless6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopModeless6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modeless Dialog created with a visible Dialog
  *          constructor follows a normal Z order.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopTKModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopTKModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a toolkit modal Dialog created with null Frame
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopTKModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopTKModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a toolkit modal Dialog created with null Dialog
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopTKModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopTKModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a toolkit modal Dialog created with hidden Frame
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopTKModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopTKModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a toolkit modal Dialog created with hidden Dialog
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopTKModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopTKModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a toolkit modal Dialog created with visible Frame
  *          constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/OnTop/OnTopTKModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/OnTop/OnTopTKModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a toolkit modal Dialog created with visible
  *          Dialog constructor stays on top of the windows it blocks.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackAppModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackAppModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackAppModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackAppModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackAppModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackAppModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackAppModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackAppModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackAppModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackAppModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackAppModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackAppModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackDocModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackDocModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check if toBack method works correctly for
  *          a document modal dialog with null Frame parent.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackDocModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackDocModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check if toBack method works correctly for
  *          a document modal dialog with null Dialog parent.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackDocModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackDocModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check if toBack method works correctly for
  *          a document modal dialog with hidden Frame parent.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackDocModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackDocModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check if toBack method works correctly for
  *          a document modal dialog with hidden Dialog parent.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackDocModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackDocModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackDocModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackDocModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackModeless1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackModeless1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modeless dialog having a null Frame constructor
  *          goes behind other windows when toBack is called for it.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackModeless2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackModeless2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modeless dialog having a null Dialog constructor
  *          goes behind other windows when toBack is called for it.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackModeless3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackModeless3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modeless dialog having a hidden Frame constructor
  *          goes behind other windows when toBack is called for it.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackModeless4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackModeless4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check whether a modeless dialog having a hidden Dialog constructor
  *          goes behind other windows when toBack is called for it.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackModeless5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackModeless5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check if toBack method works correctly for a modeless dialog
  *          having a visible Frame constructor.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackModeless6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackModeless6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Check if toBack method works correctly for a modeless dialog
  *          having a visible Dialog constructor.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackNonModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackNonModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check whether a non-modal dialog having a null Frame constructor
  *          goes behind other windows when toBack is called for it.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackNonModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackNonModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check whether a non-modal dialog having a null Dialog constructor
  *          goes behind other windows when toBack is called for it.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackNonModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackNonModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check whether a non-modal dialog having a hidden Frame constructor
  *          goes behind other windows when toBack is called for it.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackNonModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackNonModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check whether a non-modal dialog having a hidden Dialog constructor
  *          goes behind other windows when toBack is called for it.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackNonModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackNonModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check if toBack method works correctly for a non-modal dialog
  *          having a visible Frame constructor.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackNonModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackNonModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check if toBack method works correctly for a non-modal dialog
  *          having a visible Dialog constructor.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackTKModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackTKModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackTKModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackTKModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackTKModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackTKModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackTKModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackTKModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackTKModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackTKModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToBack/ToBackTKModal6Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToBack/ToBackTKModal6Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          constructor still stays on top of the blocked windows even
  *          after calling toBack for the dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/DialogToFrontAppModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/DialogToFrontAppModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking application modal dialog does not bring it to the top
  *          of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/DialogToFrontDocModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/DialogToFrontDocModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking document modal dialog does not bring it to the top
  *          of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/DialogToFrontModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/DialogToFrontModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  *          blocking modal dialog does not bring it to the top
  *          of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/DialogToFrontModeless1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/DialogToFrontModeless1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,7 @@
  * @summary Check that calling toFront method does not bring a dialog to the top
  *          of a child modeless dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/DialogToFrontNonModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/DialogToFrontNonModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,7 @@
  * @summary Check that calling toFront method does not bring a dialog to the top
  *          of a non-modal child dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/DialogToFrontTKModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/DialogToFrontTKModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking toolkit modal dialog does not bring it to the top
  *          of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontAppModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontAppModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking application modal dialog having a null Frame parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontAppModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontAppModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking application modal dialog having a null Dialog parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontAppModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontAppModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking application modal dialog having a hidden Frame parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontAppModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontAppModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking application modal dialog having a hidden Dialog parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontAppModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontAppModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking application modal dialog having a visible Frame parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontDocModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontDocModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking document modal dialog having a visible Frame parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontDocModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontDocModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @bug 8050885
  * @summary Check if toFront method works correctly for a document modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          blocking modal dialog having a null Frame parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          blocking modal dialog having a null Dialog parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          blocking modal dialog having a hidden Frame parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          blocking modal dialog having a hidden Dialog parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  *          blocking modal dialog having a visible Frame parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontModeless1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontModeless1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check that calling toFront method does not bring a frame to the top of
  *          a modeless child dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontNonModalTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontNonModalTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check that calling toFront method does not bring a frame to the top
  *          of a non-modal child dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontTKModal1Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontTKModal1Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking modal toolkit dialog having a null Frame parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontTKModal2Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontTKModal2Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking toolkit modal dialog having a null Dialog parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontTKModal3Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontTKModal3Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking toolkit modal dialog having a hidden Frame parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontTKModal4Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontTKModal4Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking toolkit modal dialog having a hidden Dialog parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Modal/ToFront/FrameToFrontTKModal5Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Modal/ToFront/FrameToFrontTKModal5Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  *          blocking toolkit modal dialog having a visible Frame parent
  *          does not bring the frame to the top of the modal dialog.
  *
- * @library ../helpers /lib/testlibrary/
+ * @library ../helpers /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @build Flag
--- a/test/jdk/java/awt/Paint/ExposeOnEDT.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Paint/ExposeOnEDT.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @key headful
  * @bug 7090424
  * @author Sergey Bylokhov
- * @library ../../../lib/testlibrary/
+ * @library /lib/client/
  * @build ExtendedRobot
  * @run main ExposeOnEDT
  */
--- a/test/jdk/java/awt/Paint/PaintNativeOnUpdate.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Paint/PaintNativeOnUpdate.java	Mon Dec 03 10:08:18 2018 +0100
@@ -33,7 +33,7 @@
  * @test
  * @key headful
  * @bug 7157680
- * @library ../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @author Sergey Bylokhov
  * @run main PaintNativeOnUpdate
--- a/test/jdk/java/awt/Robot/ModifierRobotKey/ModifierRobotEnhancedKeyTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Robot/ModifierRobotKey/ModifierRobotEnhancedKeyTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -53,7 +53,7 @@
  *
  * @summary Make sure that modifier key mask is set when robot press
  *          some key with one or more modifiers.
- * @library /lib/testlibrary/
+ * @library /lib/client/
  * @library /test/lib
  * @build ExtendedRobot
  * @key headful
--- a/test/jdk/java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
  * @key headful
  * @summary Make sure that modifier key mask is set when robot press
  *          some key with one or more modifiers.
- * @library /lib/testlibrary
+ * @library /lib/client
  * @library /test/lib
  * @build ExtendedRobot
  * @run main ModifierRobotKeyTest
--- a/test/jdk/java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  * @key headful
  * @bug 7124213
  * @author Sergey Bylokhov
- * @library ../../../../lib/testlibrary/
+ * @library /lib/client/
  * @build ExtendedRobot
  * @run main ScrollPanePreferredSize
  */
--- a/test/jdk/java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
   @key headful
   @summary verify LOCK buttons toogle
   @author Yuri.Nesterenko, Dmitriy.Ermashov
-  @library ../../../../lib/testlibrary
+  @library /lib/client
   @build ExtendedRobot
   @run main LockingKeyStateTest
 */
--- a/test/jdk/java/awt/TrayIcon/ActionCommand/ActionCommand.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/ActionCommand/ActionCommand.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          (single clicked, on Mac)
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
  * @modules java.desktop/java.awt:open
- * @library ../../../../lib/testlibrary ../
+ * @library /lib/client ../
  * @library /java/awt/patchlib
  * @build java.desktop/java.awt.Helper
  * @build ExtendedRobot SystemTrayIconHelper
--- a/test/jdk/java/awt/TrayIcon/ActionEventMask/ActionEventMask.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/ActionEventMask/ActionEventMask.java	Mon Dec 03 10:08:18 2018 +0100
@@ -36,7 +36,7 @@
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
  * @modules java.desktop/java.awt:open
  * @library /java/awt/patchlib
- * @library ../../../../lib/testlibrary ../
+ * @library /lib/client ../
  * @build java.desktop/java.awt.Helper
  * @build ExtendedRobot SystemTrayIconHelper
  * @run main ActionEventMask
--- a/test/jdk/java/awt/TrayIcon/ActionEventTest/ActionEventTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/ActionEventTest/ActionEventTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,7 @@
  * @summary Verify that ActionEvent is received with correct modifiers set.
  * @modules java.desktop/java.awt:open
  * @modules java.desktop/java.awt.peer
- * @library ../../../../lib/testlibrary ../
+ * @library /lib/client ../
  * @library /java/awt/patchlib
  * @build java.desktop/java.awt.Helper
  * @build ExtendedRobot SystemTrayIconHelper
--- a/test/jdk/java/awt/TrayIcon/ModalityTest/ModalityTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/ModalityTest/ModalityTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
  * @modules java.desktop/java.awt:open
  * @library /java/awt/patchlib
- * @library ../../../../lib/testlibrary ../
+ * @library /lib/client ../
  * @build ExtendedRobot SystemTrayIconHelper
  * @build java.desktop/java.awt.Helper
  * @run main ModalityTest
--- a/test/jdk/java/awt/TrayIcon/MouseEventMask/MouseEventMaskTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/MouseEventMask/MouseEventMaskTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -35,7 +35,7 @@
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
  * @modules java.desktop/java.awt:open
  * @library /java/awt/patchlib
- * @library ../../../../lib/testlibrary ../
+ * @library /lib/client ../
  * @build java.desktop/java.awt.Helper
  * @build ExtendedRobot SystemTrayIconHelper
  * @run main MouseEventMaskTest
--- a/test/jdk/java/awt/TrayIcon/MouseMovedTest/MouseMovedTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/MouseMovedTest/MouseMovedTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
  * @bug 7153700
  * @summary Check for mouseMoved event for java.awt.TrayIcon
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary ../
+ * @library /lib/client ../
  * @build ExtendedRobot SystemTrayIconHelper
  * @run main MouseMovedTest
  */
--- a/test/jdk/java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -27,7 +27,7 @@
   @bug 8007220 8039081
   @summary Reference to the popup leaks after the TrayIcon is removed.
   @requires os.family != "windows"
-  @library ../../../../lib/testlibrary/
+  @library /lib/client/
   @build ExtendedRobot
   @run main/othervm -Xmx50m PopupMenuLeakTest
  */
--- a/test/jdk/java/awt/TrayIcon/RightClickWhenBalloonDisplayed/RightClickWhenBalloonDisplayed.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/RightClickWhenBalloonDisplayed/RightClickWhenBalloonDisplayed.java	Mon Dec 03 10:08:18 2018 +0100
@@ -39,7 +39,7 @@
  * @summary Right clicking on TrayIcon shouldn't trigger ActionEvent when balloon is displayed.
  * @modules java.desktop/java.awt:open
  * @library /java/awt/patchlib
- * @library ../../../../lib/testlibrary ../
+ * @library /lib/client ../
  * @build java.desktop/java.awt.Helper
  * @build ExtendedRobot SystemTrayIconHelper
  * @run main RightClickWhenBalloonDisplayed
--- a/test/jdk/java/awt/TrayIcon/SecurityCheck/FunctionalityCheck/FunctionalityCheck.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/SecurityCheck/FunctionalityCheck/FunctionalityCheck.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
  * @modules java.desktop/java.awt:open
  * @library /java/awt/patchlib
- * @library ../../../../../lib/testlibrary ../../
+ * @library /lib/client ../../
  * @build java.desktop/java.awt.Helper
  * @build ExtendedRobot SystemTrayIconHelper
  * @run main/othervm/policy=tray.policy -Djava.security.manager FunctionalityCheck
--- a/test/jdk/java/awt/TrayIcon/SystemTrayIconHelper.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/SystemTrayIconHelper.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,7 +34,7 @@
 /*
  * @summary This is a helper class to find the location of a system tray icon,
  *          and skip some OS specific cases in tests.
- * @library ../../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot SystemTrayIconHelper
  */
 public class SystemTrayIconHelper {
--- a/test/jdk/java/awt/TrayIcon/TrayIconEventModifiers/TrayIconEventModifiersTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/TrayIconEventModifiers/TrayIconEventModifiersTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
  *          TrayIcon is clicked pressing the modifier keys
  * @modules java.desktop/java.awt:open
  * @library /java/awt/patchlib
- * @library ../../../../lib/testlibrary ../
+ * @library /lib/client ../
  * @build java.desktop/java.awt.Helper
  * @build ExtendedRobot SystemTrayIconHelper
  * @run main TrayIconEventModifiersTest
--- a/test/jdk/java/awt/TrayIcon/TrayIconEvents/TrayIconEventsTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/TrayIconEvents/TrayIconEventsTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -33,7 +33,7 @@
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
  * @modules java.desktop/java.awt:open
  * @library /java/awt/patchlib
- * @library ../../../../lib/testlibrary ../
+ * @library /lib/client ../
  * @build java.desktop/java.awt.Helper
  * @build ExtendedRobot SystemTrayIconHelper
  * @run main TrayIconEventsTest
--- a/test/jdk/java/awt/TrayIcon/TrayIconMouseTest/TrayIconMouseTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/TrayIconMouseTest/TrayIconMouseTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -38,7 +38,7 @@
  *          or single clicked with button 1 on rest.
  * @modules java.desktop/java.awt:open
  * @library /java/awt/patchlib
- * @library ../../../../lib/testlibrary ../
+ * @library /lib/client ../
  * @build java.desktop/java.awt.Helper
  * @build ExtendedRobot SystemTrayIconHelper
  * @run main TrayIconMouseTest
--- a/test/jdk/java/awt/TrayIcon/TrayIconPopup/TrayIconPopupClickTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/TrayIconPopup/TrayIconPopupClickTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -40,7 +40,7 @@
  * @author Shashidhara Veerabhadraiah (shashidhara.veerabhadraiah@oracle.com)
  * @modules java.desktop/java.awt:open
  * @library /java/awt/patchlib
- * @library ../../../../lib/testlibrary ../
+ * @library /lib/client ../
  * @build java.desktop/java.awt.Helper
  * @build ExtendedRobot SystemTrayIconHelper
  * @run main TrayIconPopupClickTest
--- a/test/jdk/java/awt/TrayIcon/TrayIconPopup/TrayIconPopupTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/TrayIcon/TrayIconPopup/TrayIconPopupTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
  * @modules java.desktop/java.awt:open
  * @library /java/awt/patchlib
- * @library ../../../../lib/testlibrary ../
+ * @library /lib/client ../
  * @build java.desktop/java.awt.Helper
  * @build ExtendedRobot SystemTrayIconHelper
  * @run main TrayIconPopupTest
--- a/test/jdk/java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java	Mon Dec 03 10:08:18 2018 +0100
@@ -35,7 +35,7 @@
  * @bug 8001472
  * @summary Background of the window should not depend from the paint()/update()
  * @author Sergey Bylokhov
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main BackgroundIsNotUpdated
  */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/awt/Window/FullWindowContentTest/FullWindowContentTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+/**
+ * @test
+ * @key headful
+ * @bug 8211301
+ * @summary [macosx] support full window content options
+ * @author Alan Snyder
+ * @run main FullWindowContentTest
+ * @requires (os.family == "mac")
+*/
+
+import java.awt.AWTException;
+import java.awt.Color;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.image.BufferedImage;
+import java.lang.reflect.InvocationTargetException;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JRootPane;
+import javax.swing.SwingUtilities;
+
+public class FullWindowContentTest
+{
+    static FullWindowContentTest theTest;
+    private Robot robot;
+    private JFrame frame;
+    private JRootPane rootPane;
+    static boolean isTransparentSupported = getOSVersion() >= 1010;
+
+    private int DELAY = 1000;
+
+    public FullWindowContentTest() {
+        try {
+            robot = new Robot();
+        } catch (AWTException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public void performTest() {
+
+        runSwing(() -> {
+            frame = new JFrame("Test");
+            frame.setBounds(200, 200, 300, 100);
+            rootPane = frame.getRootPane();
+            JComponent contentPane = (JComponent) frame.getContentPane();
+            contentPane.setBackground(Color.RED);
+            rootPane.putClientProperty("apple.awt.fullWindowContent", true);
+            rootPane.putClientProperty("apple.awt.transparentTitleBar", true);
+            frame.setVisible(true);
+        });
+
+        robot.delay(DELAY);
+        checkTransparent();
+
+        runSwing(() -> rootPane.putClientProperty("apple.awt.transparentTitleBar", false));
+
+        robot.delay(DELAY);
+        checkTranslucent();
+
+        runSwing(() -> rootPane.putClientProperty("apple.awt.fullWindowContent", false));
+
+        robot.delay(DELAY);
+        checkNormal();
+
+        runSwing(() -> rootPane.putClientProperty("apple.awt.fullWindowContent", true));
+
+        robot.delay(DELAY);
+        checkTranslucent();
+
+        runSwing(() -> rootPane.putClientProperty("apple.awt.transparentTitleBar", true));
+
+        robot.delay(DELAY);
+        checkTransparent();
+
+        runSwing(() -> frame.dispose());
+
+        frame = null;
+        rootPane = null;
+    }
+
+    private void checkTransparent() {
+        if (isTransparentSupported) {
+            Color c = getTestPixel();
+            int delta = c.getRed() - c.getBlue();
+            if (delta < 200) {
+                throw new RuntimeException("Test failed: did not find transparent title bar color");
+            }
+            checkContent();
+        } else {
+            checkTranslucent();
+        }
+    }
+
+    private void checkTranslucent() {
+        Color c = getTestPixel();
+        int delta = c.getRed() - c.getBlue();
+        if (delta < 50 || delta > 150) {
+            throw new RuntimeException("Test failed: did not find translucent title bar color");
+        }
+        checkContent();
+    }
+
+    private void checkNormal() {
+        Color c = getTestPixel();
+        int delta = c.getRed() - c.getBlue();
+        if (delta < -50 || delta > 50) {
+            throw new RuntimeException("Test failed: did not find normal title bar color");
+        }
+        checkContent();
+    }
+
+    private void checkContent() {
+        // Check the bottom of the content area to make sure the insets were changed.
+        Color c = getContentPixel();
+        int delta = c.getRed() - c.getBlue();
+        if (delta < 200) {
+            throw new RuntimeException("Test failed: did not find content color");
+        }
+    }
+
+    private Color getContentPixel() {
+        Rectangle bounds = frame.getBounds();
+        Color c = robot.getPixelColor(bounds.x + 80, bounds.y + bounds.height - 10);
+        return c;
+    }
+
+    private Color getTestPixel() {
+        Rectangle bounds = frame.getBounds();
+        BufferedImage screenImage = robot.createScreenCapture(bounds);
+        int rgb = screenImage.getRGB(80, 10);
+        int red = (rgb >> 16) & 0xFF;
+        int green = (rgb >> 8) & 0xFF;
+        int blue = rgb & 0xFF;
+        Color c = new Color(red, green, blue);
+
+        // Note: the following code returns significantly wrong values.
+        // For example, it returns 42 24 24 for a translucent red that should be more like 243 151 151.
+
+//        Color c = robot.getPixelColor(bounds.x + 80, bounds.y + 10);
+
+        return c;
+    }
+
+    public void dispose() {
+        if (frame != null) {
+            frame.dispose();
+            frame = null;
+        }
+    }
+
+    private static int getOSVersion() {
+        String s = System.getProperty("os.version");
+        int p = s.indexOf('.');
+        int major = Integer.parseInt(s.substring(0, p));
+        s = s.substring(p+1);
+        p = s.indexOf('.');
+        int minor = Integer.parseInt(p >= 0 ? s.substring(0, p) : s);
+        return major * 100 + minor;
+    }
+
+    private static void runSwing(Runnable r) {
+        try {
+            SwingUtilities.invokeAndWait(r);
+        } catch (InterruptedException e) {
+        } catch (InvocationTargetException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public static void main(String[] args) {
+        if (!System.getProperty("os.name").contains("OS X")) {
+            System.out.println("This test is for MacOS only. Automatically passed on other platforms.");
+            return;
+        }
+
+        try {
+            runSwing(() -> theTest = new FullWindowContentTest());
+            theTest.performTest();
+            ;
+        } finally {
+            if (theTest != null) {
+                runSwing(() -> theTest.dispose());
+            }
+        }
+    }
+}
--- a/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/FocusAWTTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/FocusAWTTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -50,7 +50,7 @@
  *
  * @author mrkam
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main FocusAWTTest
  */
--- a/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/SetShape.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/SetShape.java	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
  *
  * @author mrkam
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main SetShape
  */
--- a/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/SetShapeAndClick.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/SetShapeAndClick.java	Mon Dec 03 10:08:18 2018 +0100
@@ -49,7 +49,7 @@
  *
  * @author mrkam
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main SetShapeAndClick
  */
--- a/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/SetShapeDynamicallyAndClick.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/SetShapeDynamicallyAndClick.java	Mon Dec 03 10:08:18 2018 +0100
@@ -48,7 +48,7 @@
  *
  * @author mrkam
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main SetShapeDynamicallyAndClick
  */
--- a/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/Shaped.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/Shaped.java	Mon Dec 03 10:08:18 2018 +0100
@@ -44,7 +44,7 @@
  *
  * @author mrkam
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main Shaped
  */
--- a/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/ShapedByAPI.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/ShapedByAPI.java	Mon Dec 03 10:08:18 2018 +0100
@@ -43,7 +43,7 @@
  *
  * @author mrkam
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @run main ShapedByAPI
  */
 public class ShapedByAPI extends Common {
--- a/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/ShapedTranslucent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/ShapedTranslucent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -43,7 +43,7 @@
  *
  * @author mrkam
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main ShapedTranslucent
  */
--- a/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/ShapedTranslucentWindowClick.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/ShapedTranslucentWindowClick.java	Mon Dec 03 10:08:18 2018 +0100
@@ -45,7 +45,7 @@
  *
  * @author mrkam
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main ShapedTranslucentWindowClick
  */
--- a/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/StaticallyShaped.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/StaticallyShaped.java	Mon Dec 03 10:08:18 2018 +0100
@@ -43,7 +43,7 @@
  *
  * @author mrkam
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main StaticallyShaped
  */
--- a/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/Translucent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/Translucent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
  *
  * @author mrkam
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main Translucent
  */
--- a/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/TranslucentChoice.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/TranslucentChoice.java	Mon Dec 03 10:08:18 2018 +0100
@@ -43,7 +43,7 @@
  *
  * @author mrkam
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main TranslucentChoice
  */
--- a/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/TranslucentWindowClick.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/ShapedAndTranslucentWindows/TranslucentWindowClick.java	Mon Dec 03 10:08:18 2018 +0100
@@ -40,7 +40,7 @@
  *
  * @author mrkam
  * @author Dmitriy Ermashov (dmitriy.ermashov@oracle.com)
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main TranslucentWindowClick
  */
--- a/test/jdk/java/awt/Window/setLocRelativeTo/SetLocationRelativeToTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/Window/setLocRelativeTo/SetLocationRelativeToTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          so that their centers coincide
  *          or, if the component is hidden, centered on the screen.
  * @bug 8036915
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main/timeout=1200 SetLocationRelativeToTest
  */
--- a/test/jdk/java/awt/datatransfer/ImageTransfer/ImageTransferTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/datatransfer/ImageTransfer/ImageTransferTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -36,7 +36,7 @@
  *          system clipboard
  * @author Jitender(jitender.singh@eng.sun.com) area=AWT
  * @author dmitriy.ermashov@oracle.com
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main ImageTransferTest
  */
--- a/test/jdk/java/awt/datatransfer/Independence/IndependenceAWTTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/datatransfer/Independence/IndependenceAWTTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,7 +34,7 @@
  * @summary To make sure that System & Primary clipboards should behave independently
  * @author Jitender(jitender.singh@eng.sun.com) area=AWT
  * @author dmitriy.ermashov@oracle.com
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main IndependenceAWTTest
  */
--- a/test/jdk/java/awt/datatransfer/Independence/IndependenceSwingTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/datatransfer/Independence/IndependenceSwingTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
  * @summary To make sure that System & Primary clipboards should behave independently
  * @author Jitender(jitender.singh@eng.sun.com) area=AWT
  * @author dmitriy.ermashov@oracle.com
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main IndependenceSwingTest
  */
--- a/test/jdk/java/awt/datatransfer/SystemSelection/SystemSelectionAWTTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/datatransfer/SystemSelection/SystemSelectionAWTTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -38,7 +38,7 @@
  * @summary To check the functionality of newly added API getSystemSelection & make sure
  *          that it's mapped to primary clipboard
  * @author Jitender(jitender.singh@eng.sun.com) area=AWT
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main SystemSelectionAWTTest
  */
--- a/test/jdk/java/awt/datatransfer/SystemSelection/SystemSelectionSwingTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/datatransfer/SystemSelection/SystemSelectionSwingTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -39,7 +39,7 @@
  * @summary To check the functionality of newly added API getSystemSelection & make sure
  *          that it's mapped to primary clipboard
  * @author Jitender(jitender.singh@eng.sun.com) area=AWT
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main SystemSelectionSwingTest
  */
--- a/test/jdk/java/awt/dnd/ImageTransferTest/ImageTransferTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/dnd/ImageTransferTest/ImageTransferTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -24,7 +24,7 @@
 /*
  * @test
  * @key headful
- * @bug 4397404 4720930 8197926
+ * @bug 4397404 4720930 8197926 8176556
  * @summary tests that images of all supported native image formats are
  * transferred properly
  * @library /test/lib
@@ -134,21 +134,29 @@
 
 abstract class ImageTransferer {
     Image image;
+    Image imageForJpeg;
     String[] formats;
     int fi; // current format index
     Frame frame = new Frame();
 
 
     ImageTransferer() {
-        image = createImage();
+        image = createImage(false);
+        imageForJpeg = createImage(true);
         frame.setSize(100, 100);
     }
 
-    private static Image createImage() {
+    private static Image createImage(boolean forJpeg) {
         int w = 100;
         int h = 100;
         int[] pix = new int[w * h];
 
+        BufferedImage img;
+        if (!forJpeg) {
+            img = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+        } else {
+            img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
+        }
         int index = 0;
         for (int y = 0; y < h; y++) {
             for (int x = 0; x < w; x++) {
@@ -160,12 +168,18 @@
                     alpha = 0;
                     red = 0;
                 }
-                pix[index++] =
-                        (alpha << 24) | (red << 16) | (green << 8) | blue;
+                if (!forJpeg) {
+                    pix[index] =
+                        (alpha <<24) | (red << 16) | (green << 8) | blue;
+                } else {
+                    pix[index] =
+                        (red << 16) | (green << 8) | blue;
+                }
+                img.setRGB(x, y, pix[index]);
+                index++;
             }
         }
-        return Toolkit.getDefaultToolkit().
-                createImage(new MemoryImageSource(w, h, pix, 0, w));
+        return (Image)img;
     }
 
 
@@ -193,7 +207,7 @@
 
     boolean areImagesIdentical(Image im1, Image im2) {
         if (formats[fi].equals("JFIF") || formats[fi].equals("image/jpeg") ||
-        formats[fi].equals("GIF") || formats[fi].equals("image/gif")) {
+            formats[fi].equals("GIF") || formats[fi].equals("image/gif")) {
             // JFIF and GIF are lossy formats
             return true;
         }
@@ -205,8 +219,8 @@
         }
 
         if (formats[fi].equals("PNG") ||
-        formats[fi].equals("image/png") ||
-        formats[fi].equals("image/x-png")) {
+            formats[fi].equals("image/png") ||
+            formats[fi].equals("image/x-png")) {
             // check alpha as well
             for (int i = 0; i < ib1.length; i++) {
                 if (ib1[i] != ib2[i]) {
@@ -268,7 +282,13 @@
 
         new DragSource().createDefaultDragGestureRecognizer(frame,
         DnDConstants.ACTION_COPY,
-        dge -> dge.startDrag(null, new ImageSelection(image), dsl));
+        dge -> {
+            if (formats[fi].equals("JFIF") || formats[fi].equals("image/jpeg")) {
+                dge.startDrag(null, new ImageSelection(imageForJpeg), dsl);
+            } else {
+                dge.startDrag(null, new ImageSelection(image), dsl);
+            }
+        });
         leaveFormat(formats[fi]);
     }
 
@@ -314,6 +334,14 @@
                 return;
             }
 
+            /*
+             * We are using RGB source image for jpeg
+             * because there is no support for alpha channel.
+             * Also we are not verifying pixel data for jpeg
+             * in areImagesIdentical() since it is a lossy format.
+             * So after image drop we are not handling any needed
+             * special cases for jpeg.
+             */
             if (im == null) {
                 System.err.println("getTransferData returned null");
                 dtde.dropComplete(false);
--- a/test/jdk/java/awt/event/KeyEvent/ExtendedKeyCode/ExtendedKeyCodeTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/event/KeyEvent/ExtendedKeyCode/ExtendedKeyCodeTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  * @bug 8007156 8025126
  * @summary Extended key code is not set for a key event
  * @author Alexandr Scherbatiy
- * @library ../../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main ExtendedKeyCodeTest
  */
--- a/test/jdk/java/awt/event/KeyEvent/ExtendedModifiersTest/ExtendedModifiersTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/event/KeyEvent/ExtendedModifiersTest/ExtendedModifiersTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *          2. InputEvent.getModifiersExText() returns
  *             correct extended modifier keys description
  *
- * @library /lib/testlibrary/ ../../helpers/lwcomponents/
+ * @library /lib/client/ ../../helpers/lwcomponents/
  * @library /test/lib
  * @build LWComponent
  * @build LWButton
--- a/test/jdk/java/awt/event/KeyEvent/KeyMaskTest/KeyMaskTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/event/KeyEvent/KeyMaskTest/KeyMaskTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check whether KeyEvent.getModifiers() returns correct modifiers
  *          when Ctrl, Alt or Shift keys are pressed.
  *
- * @library /lib/testlibrary/ ../../helpers/lwcomponents/
+ * @library /lib/client/ ../../helpers/lwcomponents/
  * @library /test/lib
  * @build LWComponent
  * @build LWButton
--- a/test/jdk/java/awt/event/MouseEvent/MouseButtonsAndKeyMasksTest/MouseButtonsAndKeyMasksTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/event/MouseEvent/MouseButtonsAndKeyMasksTest/MouseButtonsAndKeyMasksTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -46,7 +46,7 @@
  *          and KeyEvent.getModifiers() return correct modifiers when pressing
  *          keys Ctrl, Alt, Shift, Meta and mouse buttons sequentially
  *
- * @library /lib/testlibrary/ ../../helpers/lwcomponents/
+ * @library /lib/client/ ../../helpers/lwcomponents/
  * @library /test/lib
  * @build LWComponent
  * @build LWButton
--- a/test/jdk/java/awt/event/MouseEvent/MouseButtonsTest/MouseButtonsTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/event/MouseEvent/MouseButtonsTest/MouseButtonsTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -44,7 +44,7 @@
  *          number when the mouse buttons are pressed and getModifiers()
  *          returns correct modifiers
  *
- * @library /lib/testlibrary/ ../../helpers/lwcomponents/
+ * @library /lib/client/ ../../helpers/lwcomponents/
  * @library /test/lib
  * @build LWComponent
  * @build LWButton
--- a/test/jdk/java/awt/event/MouseEvent/MultipleMouseButtonsTest/MultipleMouseButtonsTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/event/MouseEvent/MultipleMouseButtonsTest/MultipleMouseButtonsTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -37,7 +37,7 @@
  * @summary Check whether correct modifiers set when multiple mouse buttons were pressed;
  *          check number of received events.
  *
- * @library /lib/testlibrary/ ../../helpers/lwcomponents/
+ * @library /lib/client/ ../../helpers/lwcomponents/
  * @library /test/lib
  * @build LWComponent
  * @build LWButton
--- a/test/jdk/java/awt/image/multiresolution/Corrupted2XImageTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/image/multiresolution/Corrupted2XImageTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -32,7 +32,7 @@
  *
  * @requires (os.family == "mac")
  *
- * @library ../../../../lib/testlibrary/
+ * @library /lib/client/
  * @build ExtendedRobot
  * @run main Corrupted2XImageTest
  */
--- a/test/jdk/java/awt/image/multiresolution/MenuMultiresolutionIconTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/image/multiresolution/MenuMultiresolutionIconTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check that correct resolution variants are chosen for menu icons
  *          when multiresolution image is used for their construction.
  *
- * @library ../../../../lib/testlibrary/
+ * @library /lib/client/
  * @build ExtendedRobot
  * @run main/othervm -Dsun.java2d.uiScale=1 MenuMultiresolutionIconTest
  * @run main/othervm -Dsun.java2d.uiScale=2 MenuMultiresolutionIconTest
--- a/test/jdk/java/awt/image/multiresolution/MultiResolutionJOptionPaneIconTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/image/multiresolution/MultiResolutionJOptionPaneIconTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,7 @@
   @author a.stepanov
   @summary Check if correct resolution variant is used
            for JOptionPane dialog / internal frame icons.
-  @library ../../../../lib/testlibrary/
+  @library /lib/client/
   @build ExtendedRobot
   @run main/othervm/timeout=300 -Dsun.java2d.uiScale=1 MultiResolutionJOptionPaneIconTest
   @run main/othervm/timeout=300 -Dsun.java2d.uiScale=2 MultiResolutionJOptionPaneIconTest
--- a/test/jdk/java/awt/image/multiresolution/MultiresolutionIconTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/image/multiresolution/MultiresolutionIconTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @summary Check that correct resolution variants are chosen for icons
  *          when multiresolution image is used for their construction.
  *
- * @library ../../../../lib/testlibrary/
+ * @library /lib/client/
  * @build ExtendedRobot
  * @run main/othervm/timeout=240 -Dsun.java2d.uiScale=1 MultiresolutionIconTest
  * @run main/othervm/timeout=240 -Dsun.java2d.uiScale=2 MultiresolutionIconTest
--- a/test/jdk/java/awt/keyboard/AltPlusNumberKeyCombinationsTest/AltPlusNumberKeyCombinationsTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/awt/keyboard/AltPlusNumberKeyCombinationsTest/AltPlusNumberKeyCombinationsTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @key headful
  * @summary Test that it is possible to type "Alt code" on Windows.
  * @requires (os.family == "windows")
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main AltPlusNumberKeyCombinationsTest
  */
--- a/test/jdk/java/lang/Character/UnicodeBlock/OptimalMapSize.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/lang/Character/UnicodeBlock/OptimalMapSize.java	Mon Dec 03 10:08:18 2018 +0100
@@ -25,14 +25,14 @@
  * @test
  * @bug 8080535 8191410
  * @summary Expected size of Character.UnicodeBlock.map is not optimal
- * @library /lib/testlibrary
+ * @library /test/lib
  * @modules java.base/java.lang:open
  *          java.base/java.util:open
- * @build jdk.testlibrary.OptimalCapacity
+ * @build jdk.test.lib.util.OptimalCapacity
  * @run main OptimalMapSize
  */
 
-import jdk.testlibrary.OptimalCapacity;
+import jdk.test.lib.util.OptimalCapacity;
 
 // What will be the number of the Unicode blocks in the future.
 //
--- a/test/jdk/java/lang/Enum/ConstantDirectoryOptimalCapacity.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/lang/Enum/ConstantDirectoryOptimalCapacity.java	Mon Dec 03 10:08:18 2018 +0100
@@ -25,14 +25,14 @@
  * @test
  * @bug 8200696
  * @summary Initial capacity of Class.enumConstantDirectory is not optimal
- * @library /lib/testlibrary
+ * @library /test/lib
  * @modules java.base/java.lang:open
  *          java.base/java.util:open
- * @build jdk.testlibrary.OptimalCapacity
+ * @build jdk.test.lib.util.OptimalCapacity
  * @run main ConstantDirectoryOptimalCapacity
  */
 
-import jdk.testlibrary.OptimalCapacity;
+import jdk.test.lib.util.OptimalCapacity;
 
 public class ConstantDirectoryOptimalCapacity {
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/System/VerifyRawIndexesTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2018, 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.internal.util.SystemProps.Raw;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+
+
+/*
+ * @test
+ * @summary Test to verify that the SystemProps.Raw _xxx_NDX indices are unique and without gaps.
+ * @modules java.base/jdk.internal.util:+open
+ * @run testng VerifyRawIndexesTest
+ */
+
+@Test
+public class VerifyRawIndexesTest {
+
+    /**
+     * Check that the Raw._*_NDX indexes are sequential and followed by
+     * the FIXED_LENGTH value.
+     * It verifies there there are no gaps or duplication in the declarations.
+     */
+    @Test
+    void verifyIndexes() {
+        Field[] fields = Raw.class.getDeclaredFields();
+        int expectedModifiers = Modifier.PRIVATE | Modifier.STATIC | Modifier.FINAL;
+
+        int next = 0;       // indexes start at zero
+        int fixedLength = -1;
+        for (Field f : fields) {
+            try {
+                int mods = f.getModifiers();
+                String name = f.getName();
+                if (((mods & expectedModifiers) == expectedModifiers) &&
+                    (name.endsWith("_NDX") || name.equals("FIXED_LENGTH"))) {
+                    f.setAccessible(true);
+                    int ndx = f.getInt(null);
+                    System.out.printf("%s: %s%n", name, ndx);
+                    Assert.assertEquals(ndx, next, "index value wrong");
+                    if (name.equals("FIXED_LENGTH")) {
+                        fixedLength = next;     // remember for final check
+                    }
+                    next++;
+                } else {
+                    System.out.printf("Ignoring field: " + f);
+                }
+            } catch (IllegalAccessException iae) {
+                Assert.fail("unexpected exception", iae);
+            }
+        }
+        Assert.assertEquals(next - 1, fixedLength,
+                "FIXED_LENGTH should be 1 greater than max of _NDX indexes");
+    }
+}
--- a/test/jdk/java/lang/Thread/ThreadStateTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/lang/Thread/ThreadStateTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,9 +30,7 @@
  *          Thread.getState().
  *
  * @author  Mandy Chung
- * @library /lib/testlibrary
  * @library /test/lib
- * @build jdk.testlibrary.*
  * @build jdk.test.lib.LockFreeLogger
  * @build ThreadStateTest ThreadStateController
  * @run main/othervm -Xmixed ThreadStateTest
--- a/test/jdk/java/lang/invoke/VarHandle/AccessMode/OptimalMapSize.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/lang/invoke/VarHandle/AccessMode/OptimalMapSize.java	Mon Dec 03 10:08:18 2018 +0100
@@ -25,15 +25,15 @@
  * @test
  * @bug 8200788
  * @summary Optimal initial capacity of AccessMode.methodNameToAccessMode
- * @library /lib/testlibrary
+ * @library /test/lib
  * @modules java.base/java.lang.invoke:open
  *          java.base/java.util:open
- * @build jdk.testlibrary.OptimalCapacity
+ * @build jdk.test.lib.util.OptimalCapacity
  * @run main OptimalMapSize
  */
 
 import java.lang.invoke.VarHandle.AccessMode;
-import jdk.testlibrary.OptimalCapacity;
+import jdk.test.lib.util.OptimalCapacity;
 
 public class OptimalMapSize {
     public static void main(String[] args) throws Throwable {
--- a/test/jdk/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,9 +30,9 @@
  *
  * @author  Mandy Chung
  *
- * @library /lib/testlibrary/ /test/lib
+ * @library /test/lib
  * @modules jdk.management
- * @build jdk.testlibrary.* CollectionUsageThreshold MemoryUtil RunUtil
+ * @build CollectionUsageThreshold MemoryUtil RunUtil
  * @requires vm.opt.ExplicitGCInvokesConcurrent == "false" | vm.opt.ExplicitGCInvokesConcurrent == "null"
  * @build sun.hotspot.WhiteBox
  * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
--- a/test/jdk/java/lang/management/MemoryMXBean/ResetPeakMemoryUsage.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/lang/management/MemoryMXBean/ResetPeakMemoryUsage.java	Mon Dec 03 10:08:18 2018 +0100
@@ -34,10 +34,10 @@
  *
  * @requires vm.opt.ExplicitGCInvokesConcurrent != "true"
  * @requires vm.opt.DisableExplicitGC != "true"
- * @library /lib/testlibrary/ /test/lib
+ * @library /test/lib
  * @modules jdk.management
  *
- * @build jdk.testlibrary.* ResetPeakMemoryUsage MemoryUtil RunUtil
+ * @build ResetPeakMemoryUsage MemoryUtil RunUtil
  * @build sun.hotspot.WhiteBox
  * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
  * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. ResetPeakMemoryUsage
--- a/test/jdk/java/lang/management/ThreadMXBean/ThreadMXBeanStateTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/lang/management/ThreadMXBean/ThreadMXBeanStateTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,10 +30,8 @@
  * @author  Mandy Chung
  *
  * @library ../../Thread
- * @library /lib/testlibrary
  * @library /test/lib
  *
- * @build jdk.testlibrary.*
  * @build ThreadMXBeanStateTest ThreadStateController
  * @run main ThreadMXBeanStateTest
  */
--- a/test/jdk/java/lang/reflect/Nestmates/TestReflectionAPI.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/lang/reflect/Nestmates/TestReflectionAPI.java	Mon Dec 03 10:08:18 2018 +0100
@@ -196,10 +196,10 @@
             "declares a different nest host of HostOfMemberNoHost$MemberNoHost",
             "Unable to load nest-host class (NestHost) of " +
             "HostOfMemberMissingHost$MemberMissingHost",
-            "Type HostOfMemberNotOurHost$MemberNotOurHost is not a nest member " +
-            "of InvalidNestHost: current type is not listed as a nest member",
-            "Type HostOfMemberNotInstanceHost$MemberNotInstanceHost is not a nest " +
-            "member of [LInvalidNestHost;: current type is not listed as a nest member",
+            "Type HostOfMemberNotOurHost$MemberNotOurHost (loader: 'app') is not a nest member " +
+            "of InvalidNestHost (loader: 'app'): current type is not listed as a nest member",
+            "Type HostOfMemberNotInstanceHost$MemberNotInstanceHost (loader: 'app') is not a nest " +
+            "member of [LInvalidNestHost; (loader: 'app'): current type is not listed as a nest member",
             "Incompatible magic value 3735928559 in class file MalformedHost",
         };
         for (int i = 0; i < bad.length; i++) {
--- a/test/jdk/java/math/BigInteger/PrimitiveConversionTests.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/math/BigInteger/PrimitiveConversionTests.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, 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
@@ -63,6 +63,7 @@
     }
 
     public static int testDoubleValue() {
+        System.out.println("--- testDoubleValue ---");
         int failures = 0;
         for (BigInteger big : ALL_BIGINTEGER_CANDIDATES) {
             double expected = Double.parseDouble(big.toString());
@@ -71,7 +72,8 @@
             // should be bitwise identical
             if (Double.doubleToRawLongBits(expected) != Double
                     .doubleToRawLongBits(actual)) {
-                System.out.println(big);
+                System.out.format("big: %s, expected: %f, actual: %f%n",
+                    big, expected, actual);
                 failures++;
             }
         }
@@ -79,6 +81,7 @@
     }
 
     public static int testFloatValue() {
+        System.out.println("--- testFloatValue ---");
         int failures = 0;
         for (BigInteger big : ALL_BIGINTEGER_CANDIDATES) {
             float expected = Float.parseFloat(big.toString());
@@ -87,7 +90,8 @@
             // should be bitwise identical
             if (Float.floatToRawIntBits(expected) != Float
                     .floatToRawIntBits(actual)) {
-                System.out.println(big + " " + expected + " " + actual);
+                System.out.format("big: %s, expected: %f, actual: %f%n",
+                    big, expected, actual);
                 failures++;
             }
         }
--- a/test/jdk/java/net/ProxySelector/SystemProxies.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/net/ProxySelector/SystemProxies.java	Mon Dec 03 10:08:18 2018 +0100
@@ -53,7 +53,6 @@
         printProxies("https://");
         printProxies("ftp://");
         printProxies("none://");
-        printProxies("gopher://");
         printProxies("rtsp://");
         printProxies("socket://");
     }
--- a/test/jdk/java/net/URI/Test.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/net/URI/Test.java	Mon Dec 03 10:08:18 2018 +0100
@@ -682,10 +682,6 @@
         test("ftp://ftp.is.co.za/rfc/rfc1808.txt")
             .s("ftp").h("ftp.is.co.za").p("/rfc/rfc1808.txt").z();
 
-        test("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles")
-            .s("gopher").h("spinaltap.micro.umn.edu")
-            .p("/00/Weather/California/Los%20Angeles").z();
-
         test("http://www.math.uio.no/faq/compression-faq/part1.html")
             .s("http").h("www.math.uio.no").p("/faq/compression-faq/part1.html").z();
 
--- a/test/jdk/java/net/URL/HandlerLoop.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/net/URL/HandlerLoop.java	Mon Dec 03 10:08:18 2018 +0100
@@ -21,16 +21,19 @@
  * questions.
  */
 
-import java.io.*;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URL;
+import java.net.URLStreamHandler;
+import java.net.URLStreamHandlerFactory;
+
 /*
  * @test
  * @bug 4135031
- * @summary Test boostrap problem when a URLStreamHandlerFactory is loaded
+ * @summary Test bootstrap problem when a URLStreamHandlerFactory is loaded
  *          by the application class loader.
- *
+ * @modules java.base/sun.net.www.protocol.file
+ * @run main HandlerLoop
  */
-import java.net.*;
-
 public class HandlerLoop {
 
     public static void main(String args[]) throws Exception {
@@ -57,13 +60,13 @@
             // shares the same stream handler factory.
             new Dummy();
             try {
-                Class c = Class.forName(name);
-                return (URLStreamHandler)c.newInstance();
-            } catch (ClassNotFoundException e) {
-                e.printStackTrace();
-            } catch (IllegalAccessException e) {
-                e.printStackTrace();
-            } catch (InstantiationException e) {
+                Class<?> c = Class.forName(name);
+                return (URLStreamHandler)c.getDeclaredConstructor().newInstance();
+            } catch (ClassNotFoundException |
+                    IllegalAccessException |
+                    InstantiationException |
+                    NoSuchMethodException |
+                    InvocationTargetException e) {
                 e.printStackTrace();
             }
             return null;
--- a/test/jdk/java/net/httpclient/RequestBuilderTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/net/httpclient/RequestBuilderTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -107,7 +107,6 @@
                 URI.create("ws://foo.com"),
                 URI.create("wss://foo.com"),
                 URI.create("ftp://foo.com"),
-                URI.create("gopher://foo.com"),
                 URI.create("mailto:a@b.com"),
                 URI.create("scheme:example.com"),
                 URI.create("scheme:example.com"),
--- a/test/jdk/java/nio/channels/spi/SelectorProvider/inheritedChannel/InheritedChannelTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/nio/channels/spi/SelectorProvider/inheritedChannel/InheritedChannelTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 4673940 4930794
+ * @bug 4673940 4930794 8211842
  * @summary Unit tests for inetd feature
  * @requires (os.family == "linux" | os.family == "solaris")
  * @library /test/lib
@@ -33,7 +33,7 @@
  *        jdk.test.lib.JDKToolLauncher
  *        jdk.test.lib.Platform
  *        jdk.test.lib.process.*
- *        StateTest StateTestService EchoTest EchoService CloseTest Launcher Util
+ *        UnixSocketTest StateTest StateTestService EchoTest EchoService CloseTest Launcher Util
  * @run testng/othervm/native InheritedChannelTest
  * @key intermittent
  */
@@ -73,6 +73,7 @@
     @DataProvider
     public Object[][] testCases() {
         return new Object[][]{
+            { "UnixSocketTest", List.of(UnixSocketTest.class.getName())},
             { "StateTest", List.of(StateTest.class.getName()) },
             { "EchoTest",  List.of(EchoTest.class.getName())  },
             { "CloseTest", List.of(CloseTest.class.getName()) },
--- a/test/jdk/java/nio/channels/spi/SelectorProvider/inheritedChannel/Launcher.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/nio/channels/spi/SelectorProvider/inheritedChannel/Launcher.java	Mon Dec 03 10:08:18 2018 +0100
@@ -62,6 +62,19 @@
         launch0(cmdarray, fd);
     }
 
+
+    /**
+     * Launch 'java' with specified class using a UnixDomainSocket pair linking calling
+     * process to the child VM. UnixDomainSocket is a simplified interface to PF_UNIX sockets
+     * which supports byte a time reads and writes.
+     */
+    public static UnixDomainSocket launchWithUnixDomainSocket(String className) throws IOException {
+        UnixDomainSocket[] socks = UnixDomainSocket.socketpair();
+        launch(className, null, null, socks[0].fd());
+        socks[0].close();
+        return socks[1];
+    }
+
     /*
      * Launch 'java' with specified class with the specified arguments (may be null).
      * The launched process will inherit a connected TCP socket. The remote endpoint
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/nio/channels/spi/SelectorProvider/inheritedChannel/UnixDomainSocket.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+/**
+ * A simplified Unix domain socket which can read and write bytes at a time
+ * used for simulating external launchers which use UNIX sockets to talk
+ * the VM.
+ */
+
+import java.io.IOException;
+
+public class UnixDomainSocket {
+
+    static {
+        System.loadLibrary("InheritedChannel");
+        init();
+    }
+
+    private final int fd;
+
+    public UnixDomainSocket(int fd) {
+        this.fd = fd;
+    }
+
+    public int read() throws IOException {
+        return read0(fd);
+    }
+
+    public void write(int w) throws IOException {
+        write0(fd, w);
+    }
+
+    public void close() {
+        close0(fd);
+    }
+
+    public int fd() {
+        return fd;
+    }
+
+    public String toString() {
+        return "UnixDomainSocket: fd=" + Integer.toString(fd);
+    }
+
+    /* read and write bytes with UNIX domain sockets */
+
+    private static native int read0(int fd) throws IOException;
+    private static native void write0(int fd, int w) throws IOException;
+    private static native void close0(int fd);
+    private static native void init();
+    public static native UnixDomainSocket[] socketpair();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/nio/channels/spi/SelectorProvider/inheritedChannel/UnixSocketTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+/*
+ * If the platform has IPv6 we spawn a child process simulating the
+ * effect of being launched from node.js. We check that IPv6 is available in the child
+ * and report back as appropriate.
+ */
+
+import jdk.test.lib.Utils;
+import java.io.*;
+import java.net.InetAddress;
+import java.net.Inet6Address;
+import java.net.NetworkInterface;
+import java.util.Collections;
+import java.util.Enumeration;
+
+public class UnixSocketTest {
+
+    static boolean hasIPv6() throws Exception {
+        Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
+        for (NetworkInterface netint : Collections.list(nets)) {
+            Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
+            for (InetAddress inetAddress : Collections.list(inetAddresses)) {
+                if (inetAddress instanceof Inet6Address) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    public static class Child {
+        public static void main(String[] args) throws Exception {
+            System.out.write('X');
+            System.out.flush();
+            if (hasIPv6()) {
+                System.out.println("Y"); // GOOD
+            } else
+                System.out.println("N"); // BAD
+        }
+    }
+
+    public static void main(String args[]) throws Exception {
+
+        if (!hasIPv6()) {
+            return; // can only test if IPv6 is present
+        }
+        UnixDomainSocket sock = Launcher.launchWithUnixDomainSocket("UnixSocketTest$Child");
+        if (sock.read() != 'X') {
+            System.exit(-2);
+        }
+        if (sock.read() != 'Y') {
+            System.exit(-2);
+        }
+    }
+}
--- a/test/jdk/java/nio/channels/spi/SelectorProvider/inheritedChannel/libInheritedChannel.c	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/nio/channels/spi/SelectorProvider/inheritedChannel/libInheritedChannel.c	Mon Dec 03 10:08:18 2018 +0100
@@ -36,6 +36,11 @@
 
 #include "jni.h"
 
+#define CHECK(X) if ((X) == 0) {printf("JNI init error line %d\n", __LINE__); _exit(1);}
+
+static jclass unixSocketClass;
+static jmethodID unixSocketCtor;
+
 /*
  * Throws the exception of the given class name and detail message
  */
@@ -182,3 +187,63 @@
     execvp(cmdv[0], cmdv);
     _exit(-1);
 }
+
+JNIEXPORT void JNICALL Java_UnixDomainSocket_init(JNIEnv *env, jclass cls) {
+    CHECK(unixSocketClass = (*env)->FindClass(env, "UnixDomainSocket"));
+    CHECK(unixSocketClass = (*env)->NewGlobalRef(env, unixSocketClass));
+    CHECK(unixSocketCtor = (*env)->GetMethodID(env, unixSocketClass, "<init>", "(I)V"));
+}
+
+/*
+ * Class:     UnixDomainSocket
+ * Method:    socketpair
+ * Signature: ()[LUnixDomainSocket
+ */
+JNIEXPORT jobjectArray JNICALL Java_UnixDomainSocket_socketpair
+  (JNIEnv *env, jclass cls)
+{
+    int fds[2];
+    jobject socket;
+    jobjectArray result = (*env)->NewObjectArray(env, 2, unixSocketClass, 0);
+    if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) < 0) {
+        perror("socketpair");
+        return result;
+    }
+    socket = (*env)->NewObject(env, unixSocketClass, unixSocketCtor, fds[0]);
+    (*env)->SetObjectArrayElement(env, result, 0, socket);
+    socket = (*env)->NewObject(env, unixSocketClass, unixSocketCtor, fds[1]);
+    (*env)->SetObjectArrayElement(env, result, 1, socket);
+    return result;
+}
+
+JNIEXPORT jint JNICALL Java_UnixDomainSocket_read0
+  (JNIEnv *env, jclass cls, jint fd)
+{
+    int ret;
+    unsigned char res;
+    ret = read(fd, &res, 1);
+    if (ret == 0)
+        return -1; /* EOF */
+    else if (ret < 0) {
+        ThrowException(env, "java/io/IOException", "read error");
+        return -1;
+    }
+    return res;
+}
+
+JNIEXPORT void JNICALL Java_UnixDomainSocket_write0
+  (JNIEnv *env, jclass cls, jint fd, jint byte)
+{
+    int ret;
+    unsigned char w = (unsigned char)byte;
+    ret = write(fd, &w, 1);
+    if (ret < 0) {
+        ThrowException(env, "java/io/IOException", "write error");
+    }
+}
+
+JNIEXPORT void JNICALL Java_UnixDomainSocket_close0
+  (JNIEnv *env, jclass cls, jint fd)
+{
+    close(fd);
+}
--- a/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,6 +35,7 @@
         callGetBundle("AbstractRB", InstantiationException.class);
         callGetBundle("BadStaticInitRB", ExceptionInInitializerError.class);
         callGetBundle("UnreadableRB", IOException.class);
+        callGetBundle("NoNoArgConstructorRB", InstantiationException.class);
     }
 
     private static void callGetBundle(String baseName,
--- a/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTest.sh	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTest.sh	Mon Dec 03 10:08:18 2018 +0100
@@ -1,5 +1,5 @@
 # 
-# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2018, 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,30 +28,29 @@
 # shared with other test cases.)
 # @build MissingResourceCauseTest
 # @build NonResourceBundle PrivateConstructorRB AbstractRB BadStaticInitRB
+#   NoNoArgConstructorRB
 # @run shell MissingResourceCauseTest.sh
 
 case "`uname`" in
-Windows*)
-    DEL=";";
+Windows* | CYGWIN*)
+    exit 0;
     ;;
 *)
     DEL=":";
+    PS="/";
     ;;
 esac
 
 #
 # Create an unreadble properties file
 #
-UNREADABLE=UnreadableRB.properties
+UNREADABLE=${TESTCLASSPATH}${PS}UnreadableRB.properties
 rm -f $UNREADABLE
 echo "type=unreadable" >$UNREADABLE
 chmod 000 $UNREADABLE
 
-: ${TESTCLASS:=.}
-: ${TESTSRC:=.}
-
-${TESTJAVA}/bin/java ${TESTVMOPTS} -esa -cp ${TESTCLASS}${DEL}${TESTSRC} MissingResourceCauseTest
+${TESTJAVA}/bin/java ${TESTVMOPTS} -esa -cp ${TESTCLASSES}${DEL}${TESTSRC} MissingResourceCauseTest
 STATUS=$?
 chmod 666 $UNREADABLE
 rm -f $UNREADABLE
-exit $?
+exit $STATUS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/ResourceBundle/Control/NoNoArgConstructorRB.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018, 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.util.*;
+
+public class NoNoArgConstructorRB extends ListResourceBundle {
+    public NoNoArgConstructorRB(Object o) {
+    }
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "type", "class (no no-arg constructor)" }
+        };
+    }
+}
--- a/test/jdk/java/util/concurrent/atomic/LongAdderDemo.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/util/concurrent/atomic/LongAdderDemo.java	Mon Dec 03 10:08:18 2018 +0100
@@ -93,14 +93,14 @@
         report(nthreads, incs, timeTasks(phaser), a.sum());
     }
 
-    static void report(int nthreads, int incs, long time, long sum) {
+    static void report(int nthreads, int incs, long elapsedNanos, long sum) {
         long total = (long)nthreads * incs;
         if (sum != total)
             throw new Error(sum + " != " + total);
-        double secs = (double)time / (1000L * 1000 * 1000);
-        long rate = total * (1000L) / time;
+        double elapsedSecs = (double)elapsedNanos / (1000L * 1000 * 1000);
+        long rate = total * 1000L / elapsedNanos;
         System.out.printf("threads:%3d  Time: %7.3fsec  Incs per microsec: %4d\n",
-                          nthreads, secs, rate);
+                          nthreads, elapsedSecs, rate);
     }
 
     static long timeTasks(Phaser phaser) {
--- a/test/jdk/java/util/concurrent/tck/CompletableFutureTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/CompletableFutureTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -953,17 +953,19 @@
         for (boolean createIncomplete : new boolean[] { true, false })
         for (Integer v1 : new Integer[] { 1, null })
     {
+        final AtomicInteger ran = new AtomicInteger(0);
         final CompletableFuture<Integer> f = new CompletableFuture<>();
         if (!createIncomplete) assertTrue(f.complete(v1));
         final CompletableFuture<Integer> g = m.exceptionally
             (f, (Throwable t) -> {
-                threadFail("should not be called");
-                return null;            // unreached
+                ran.getAndIncrement();
+                throw new AssertionError("should not be called");
             });
         if (createIncomplete) assertTrue(f.complete(v1));
 
         checkCompletedNormally(g, v1);
         checkCompletedNormally(f, v1);
+        assertEquals(0, ran.get());
     }}
 
     /**
@@ -975,21 +977,21 @@
         for (boolean createIncomplete : new boolean[] { true, false })
         for (Integer v1 : new Integer[] { 1, null })
     {
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         final CFException ex = new CFException();
         final CompletableFuture<Integer> f = new CompletableFuture<>();
         if (!createIncomplete) f.completeExceptionally(ex);
         final CompletableFuture<Integer> g = m.exceptionally
             (f, (Throwable t) -> {
                 m.checkExecutionMode();
-                threadAssertSame(t, ex);
-                a.getAndIncrement();
+                assertSame(t, ex);
+                ran.getAndIncrement();
                 return v1;
             });
         if (createIncomplete) f.completeExceptionally(ex);
 
         checkCompletedNormally(g, v1);
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -1000,7 +1002,7 @@
         for (ExecutionMode m : ExecutionMode.values())
         for (boolean createIncomplete : new boolean[] { true, false })
     {
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         final CFException ex1 = new CFException();
         final CFException ex2 = new CFException();
         final CompletableFuture<Integer> f = new CompletableFuture<>();
@@ -1008,15 +1010,15 @@
         final CompletableFuture<Integer> g = m.exceptionally
             (f, (Throwable t) -> {
                 m.checkExecutionMode();
-                threadAssertSame(t, ex1);
-                a.getAndIncrement();
+                assertSame(t, ex1);
+                ran.getAndIncrement();
                 throw ex2;
             });
         if (createIncomplete) f.completeExceptionally(ex1);
 
         checkCompletedWithWrappedException(g, ex2);
         checkCompletedExceptionally(f, ex1);
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -1028,22 +1030,22 @@
         for (boolean createIncomplete : new boolean[] { true, false })
         for (Integer v1 : new Integer[] { 1, null })
     {
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         final CompletableFuture<Integer> f = new CompletableFuture<>();
         if (!createIncomplete) assertTrue(f.complete(v1));
         final CompletableFuture<Integer> g = m.whenComplete
             (f,
              (Integer result, Throwable t) -> {
                 m.checkExecutionMode();
-                threadAssertSame(result, v1);
-                threadAssertNull(t);
-                a.getAndIncrement();
+                assertSame(result, v1);
+                assertNull(t);
+                ran.getAndIncrement();
             });
         if (createIncomplete) assertTrue(f.complete(v1));
 
         checkCompletedNormally(g, v1);
         checkCompletedNormally(f, v1);
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -1054,7 +1056,7 @@
         for (ExecutionMode m : ExecutionMode.values())
         for (boolean createIncomplete : new boolean[] { true, false })
     {
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         final CFException ex = new CFException();
         final CompletableFuture<Integer> f = new CompletableFuture<>();
         if (!createIncomplete) f.completeExceptionally(ex);
@@ -1062,15 +1064,15 @@
             (f,
              (Integer result, Throwable t) -> {
                 m.checkExecutionMode();
-                threadAssertNull(result);
-                threadAssertSame(t, ex);
-                a.getAndIncrement();
+                assertNull(result);
+                assertSame(t, ex);
+                ran.getAndIncrement();
             });
         if (createIncomplete) f.completeExceptionally(ex);
 
         checkCompletedWithWrappedException(g, ex);
         checkCompletedExceptionally(f, ex);
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -1082,22 +1084,22 @@
         for (boolean mayInterruptIfRunning : new boolean[] { true, false })
         for (boolean createIncomplete : new boolean[] { true, false })
     {
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         final CompletableFuture<Integer> f = new CompletableFuture<>();
         if (!createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning));
         final CompletableFuture<Integer> g = m.whenComplete
             (f,
              (Integer result, Throwable t) -> {
                 m.checkExecutionMode();
-                threadAssertNull(result);
-                threadAssertTrue(t instanceof CancellationException);
-                a.getAndIncrement();
+                assertNull(result);
+                assertTrue(t instanceof CancellationException);
+                ran.getAndIncrement();
             });
         if (createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning));
 
         checkCompletedWithWrappedCancellationException(g);
         checkCancelled(f);
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -1109,7 +1111,7 @@
         for (ExecutionMode m : ExecutionMode.values())
         for (Integer v1 : new Integer[] { 1, null })
     {
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         final CFException ex = new CFException();
         final CompletableFuture<Integer> f = new CompletableFuture<>();
         if (!createIncomplete) assertTrue(f.complete(v1));
@@ -1117,16 +1119,16 @@
             (f,
              (Integer result, Throwable t) -> {
                 m.checkExecutionMode();
-                threadAssertSame(result, v1);
-                threadAssertNull(t);
-                a.getAndIncrement();
+                assertSame(result, v1);
+                assertNull(t);
+                ran.getAndIncrement();
                 throw ex;
             });
         if (createIncomplete) assertTrue(f.complete(v1));
 
         checkCompletedWithWrappedException(g, ex);
         checkCompletedNormally(f, v1);
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -1138,7 +1140,7 @@
         for (boolean createIncomplete : new boolean[] { true, false })
         for (ExecutionMode m : ExecutionMode.values())
     {
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         final CFException ex1 = new CFException();
         final CFException ex2 = new CFException();
         final CompletableFuture<Integer> f = new CompletableFuture<>();
@@ -1148,9 +1150,9 @@
             (f,
              (Integer result, Throwable t) -> {
                 m.checkExecutionMode();
-                threadAssertSame(t, ex1);
-                threadAssertNull(result);
-                a.getAndIncrement();
+                assertSame(t, ex1);
+                assertNull(result);
+                ran.getAndIncrement();
                 throw ex2;
             });
         if (createIncomplete) f.completeExceptionally(ex1);
@@ -1161,7 +1163,7 @@
             assertEquals(1, ex1.getSuppressed().length);
             assertSame(ex2, ex1.getSuppressed()[0]);
         }
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -1174,22 +1176,22 @@
         for (Integer v1 : new Integer[] { 1, null })
     {
         final CompletableFuture<Integer> f = new CompletableFuture<>();
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         if (!createIncomplete) assertTrue(f.complete(v1));
         final CompletableFuture<Integer> g = m.handle
             (f,
              (Integer result, Throwable t) -> {
                 m.checkExecutionMode();
-                threadAssertSame(result, v1);
-                threadAssertNull(t);
-                a.getAndIncrement();
+                assertSame(result, v1);
+                assertNull(t);
+                ran.getAndIncrement();
                 return inc(v1);
             });
         if (createIncomplete) assertTrue(f.complete(v1));
 
         checkCompletedNormally(g, inc(v1));
         checkCompletedNormally(f, v1);
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -1202,23 +1204,23 @@
         for (Integer v1 : new Integer[] { 1, null })
     {
         final CompletableFuture<Integer> f = new CompletableFuture<>();
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         final CFException ex = new CFException();
         if (!createIncomplete) f.completeExceptionally(ex);
         final CompletableFuture<Integer> g = m.handle
             (f,
              (Integer result, Throwable t) -> {
                 m.checkExecutionMode();
-                threadAssertNull(result);
-                threadAssertSame(t, ex);
-                a.getAndIncrement();
+                assertNull(result);
+                assertSame(t, ex);
+                ran.getAndIncrement();
                 return v1;
             });
         if (createIncomplete) f.completeExceptionally(ex);
 
         checkCompletedNormally(g, v1);
         checkCompletedExceptionally(f, ex);
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -1232,22 +1234,22 @@
         for (Integer v1 : new Integer[] { 1, null })
     {
         final CompletableFuture<Integer> f = new CompletableFuture<>();
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         if (!createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning));
         final CompletableFuture<Integer> g = m.handle
             (f,
              (Integer result, Throwable t) -> {
                 m.checkExecutionMode();
-                threadAssertNull(result);
-                threadAssertTrue(t instanceof CancellationException);
-                a.getAndIncrement();
+                assertNull(result);
+                assertTrue(t instanceof CancellationException);
+                ran.getAndIncrement();
                 return v1;
             });
         if (createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning));
 
         checkCompletedNormally(g, v1);
         checkCancelled(f);
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -1260,23 +1262,23 @@
         for (Integer v1 : new Integer[] { 1, null })
     {
         final CompletableFuture<Integer> f = new CompletableFuture<>();
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         final CFException ex = new CFException();
         if (!createIncomplete) assertTrue(f.complete(v1));
         final CompletableFuture<Integer> g = m.handle
             (f,
              (Integer result, Throwable t) -> {
                 m.checkExecutionMode();
-                threadAssertSame(result, v1);
-                threadAssertNull(t);
-                a.getAndIncrement();
+                assertSame(result, v1);
+                assertNull(t);
+                ran.getAndIncrement();
                 throw ex;
             });
         if (createIncomplete) assertTrue(f.complete(v1));
 
         checkCompletedWithWrappedException(g, ex);
         checkCompletedNormally(f, v1);
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -1288,7 +1290,7 @@
         for (boolean createIncomplete : new boolean[] { true, false })
         for (ExecutionMode m : ExecutionMode.values())
     {
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         final CFException ex1 = new CFException();
         final CFException ex2 = new CFException();
         final CompletableFuture<Integer> f = new CompletableFuture<>();
@@ -1298,16 +1300,16 @@
             (f,
              (Integer result, Throwable t) -> {
                 m.checkExecutionMode();
-                threadAssertNull(result);
-                threadAssertSame(ex1, t);
-                a.getAndIncrement();
+                assertNull(result);
+                assertSame(ex1, t);
+                ran.getAndIncrement();
                 throw ex2;
             });
         if (createIncomplete) f.completeExceptionally(ex1);
 
         checkCompletedWithWrappedException(g, ex2);
         checkCompletedExceptionally(f, ex1);
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -3143,30 +3145,30 @@
         case 0:
             assertTrue(f.complete(v1));
             assertTrue(g.completeExceptionally(ex));
-            h = m.thenCompose(f, (x -> g));
+            h = m.thenCompose(f, x -> g);
             break;
         case 1:
             assertTrue(f.complete(v1));
-            h = m.thenCompose(f, (x -> g));
+            h = m.thenCompose(f, x -> g);
             assertTrue(g.completeExceptionally(ex));
             break;
         case 2:
             assertTrue(g.completeExceptionally(ex));
             assertTrue(f.complete(v1));
-            h = m.thenCompose(f, (x -> g));
+            h = m.thenCompose(f, x -> g);
             break;
         case 3:
             assertTrue(g.completeExceptionally(ex));
-            h = m.thenCompose(f, (x -> g));
+            h = m.thenCompose(f, x -> g);
             assertTrue(f.complete(v1));
             break;
         case 4:
-            h = m.thenCompose(f, (x -> g));
+            h = m.thenCompose(f, x -> g);
             assertTrue(f.complete(v1));
             assertTrue(g.completeExceptionally(ex));
             break;
         case 5:
-            h = m.thenCompose(f, (x -> g));
+            h = m.thenCompose(f, x -> g);
             assertTrue(f.complete(v1));
             assertTrue(g.completeExceptionally(ex));
             break;
@@ -3258,30 +3260,30 @@
         case 0:
             assertTrue(f.completeExceptionally(ex0));
             assertTrue(g.completeExceptionally(ex));
-            h = m.exceptionallyCompose(f, (x -> g));
+            h = m.exceptionallyCompose(f, x -> g);
             break;
         case 1:
             assertTrue(f.completeExceptionally(ex0));
-            h = m.exceptionallyCompose(f, (x -> g));
+            h = m.exceptionallyCompose(f, x -> g);
             assertTrue(g.completeExceptionally(ex));
             break;
         case 2:
             assertTrue(g.completeExceptionally(ex));
             assertTrue(f.completeExceptionally(ex0));
-            h = m.exceptionallyCompose(f, (x -> g));
+            h = m.exceptionallyCompose(f, x -> g);
             break;
         case 3:
             assertTrue(g.completeExceptionally(ex));
-            h = m.exceptionallyCompose(f, (x -> g));
+            h = m.exceptionallyCompose(f, x -> g);
             assertTrue(f.completeExceptionally(ex0));
             break;
         case 4:
-            h = m.exceptionallyCompose(f, (x -> g));
+            h = m.exceptionallyCompose(f, x -> g);
             assertTrue(f.completeExceptionally(ex0));
             assertTrue(g.completeExceptionally(ex));
             break;
         case 5:
-            h = m.exceptionallyCompose(f, (x -> g));
+            h = m.exceptionallyCompose(f, x -> g);
             assertTrue(f.completeExceptionally(ex0));
             assertTrue(g.completeExceptionally(ex));
             break;
@@ -3672,12 +3674,6 @@
         final CompletableFuture<Integer> complete = CompletableFuture.completedFuture(v);
         final CompletableFuture<Integer> incomplete = new CompletableFuture<>();
 
-        List<CompletableFuture<?>> futures = new ArrayList<>();
-
-        List<CompletableFuture<Integer>> srcs = new ArrayList<>();
-        srcs.add(complete);
-        srcs.add(incomplete);
-
         List<CompletableFuture<?>> fs = new ArrayList<>();
         fs.add(incomplete.thenRunAsync(() -> {}, e));
         fs.add(incomplete.thenAcceptAsync(z -> {}, e));
@@ -4862,18 +4858,21 @@
         for (boolean createIncomplete : new boolean[] { true, false })
         for (Integer v1 : new Integer[] { 1, null })
     {
+        final AtomicInteger ran = new AtomicInteger(0);
         final CompletableFuture<Integer> f = new CompletableFuture<>();
         final DelegatedCompletionStage<Integer> d =
             new DelegatedCompletionStage<Integer>(f);
         if (!createIncomplete) assertTrue(f.complete(v1));
         final CompletionStage<Integer> g = d.exceptionallyAsync
             ((Throwable t) -> {
-                threadFail("should not be called");
-                return null;            // unreached
+                ran.getAndIncrement();
+                throw new AssertionError("should not be called");
             });
         if (createIncomplete) assertTrue(f.complete(v1));
 
         checkCompletedNormally(g.toCompletableFuture(), v1);
+        checkCompletedNormally(f, v1);
+        assertEquals(0, ran.get());
     }}
 
     /**
@@ -4884,7 +4883,7 @@
         for (boolean createIncomplete : new boolean[] { true, false })
         for (Integer v1 : new Integer[] { 1, null })
     {
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         final CFException ex = new CFException();
         final CompletableFuture<Integer> f = new CompletableFuture<>();
         final DelegatedCompletionStage<Integer> d =
@@ -4892,14 +4891,15 @@
         if (!createIncomplete) f.completeExceptionally(ex);
         final CompletionStage<Integer> g = d.exceptionallyAsync
             ((Throwable t) -> {
-                threadAssertSame(t, ex);
-                a.getAndIncrement();
+                assertSame(t, ex);
+                ran.getAndIncrement();
                 return v1;
             });
         if (createIncomplete) f.completeExceptionally(ex);
 
         checkCompletedNormally(g.toCompletableFuture(), v1);
-        assertEquals(1, a.get());
+        checkCompletedExceptionally(f, ex);
+        assertEquals(1, ran.get());
     }}
 
     /**
@@ -4910,7 +4910,7 @@
     public void testDefaultExceptionallyAsync_exceptionalCompletionActionFailed() {
         for (boolean createIncomplete : new boolean[] { true, false })
     {
-        final AtomicInteger a = new AtomicInteger(0);
+        final AtomicInteger ran = new AtomicInteger(0);
         final CFException ex1 = new CFException();
         final CFException ex2 = new CFException();
         final CompletableFuture<Integer> f = new CompletableFuture<>();
@@ -4919,8 +4919,8 @@
         if (!createIncomplete) f.completeExceptionally(ex1);
         final CompletionStage<Integer> g = d.exceptionallyAsync
             ((Throwable t) -> {
-                threadAssertSame(t, ex1);
-                a.getAndIncrement();
+                assertSame(t, ex1);
+                ran.getAndIncrement();
                 throw ex2;
             });
         if (createIncomplete) f.completeExceptionally(ex1);
@@ -4928,7 +4928,7 @@
         checkCompletedWithWrappedException(g.toCompletableFuture(), ex2);
         checkCompletedExceptionally(f, ex1);
         checkCompletedExceptionally(d.toCompletableFuture(), ex1);
-        assertEquals(1, a.get());
+        assertEquals(1, ran.get());
     }}
 
     /**
--- a/test/jdk/java/util/concurrent/tck/ConcurrentHashMapTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ConcurrentHashMapTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -865,4 +865,20 @@
         assertEquals(mapSize, map.size());
     }
 
+    public void testReentrantComputeIfAbsent() {
+        ConcurrentHashMap<Integer, Integer> map = new ConcurrentHashMap<>(16);
+        try {
+            for (int i = 0; i < 100; i++) { // force a resize
+                map.computeIfAbsent(i, key -> findValue(map, key));
+            }
+            fail("recursive computeIfAbsent should throw IllegalStateException");
+        } catch (IllegalStateException success) {}
+    }
+
+    private Integer findValue(ConcurrentHashMap<Integer, Integer> map,
+                              Integer key) {
+        return (key % 5 == 0) ?  key :
+            map.computeIfAbsent(key + 1, k -> findValue(map, k));
+    }
+
 }
--- a/test/jdk/java/util/concurrent/tck/ForkJoinPoolTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ForkJoinPoolTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -136,7 +136,7 @@
                 return n;
             FibTask f1 = new FibTask(n - 1);
             f1.fork();
-            return (new FibTask(n - 2)).compute() + f1.join();
+            return new FibTask(n - 2).compute() + f1.join();
         }
     }
 
--- a/test/jdk/java/util/concurrent/tck/JSR166TestCase.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/JSR166TestCase.java	Mon Dec 03 10:08:18 2018 +0100
@@ -144,13 +144,21 @@
  *
  * <ol>
  *
- * <li>All assertions in code running in generated threads must use
- * the forms {@link #threadFail}, {@link #threadAssertTrue}, {@link
- * #threadAssertEquals}, or {@link #threadAssertNull}, (not
- * {@code fail}, {@code assertTrue}, etc.) It is OK (but not
- * particularly recommended) for other code to use these forms too.
- * Only the most typically used JUnit assertion methods are defined
- * this way, but enough to live with.
+ * <li>All code not running in the main test thread (manually spawned threads
+ * or the common fork join pool) must be checked for failure (and completion!).
+ * Mechanisms that can be used to ensure this are:
+ *   <ol>
+ *   <li>Signalling via a synchronizer like AtomicInteger or CountDownLatch
+ *    that the task completed normally, which is checked before returning from
+ *    the test method in the main thread.
+ *   <li>Using the forms {@link #threadFail}, {@link #threadAssertTrue},
+ *    or {@link #threadAssertNull}, (not {@code fail}, {@code assertTrue}, etc.)
+ *    Only the most typically used JUnit assertion methods are defined
+ *    this way, but enough to live with.
+ *   <li>Recording failure explicitly using {@link #threadUnexpectedException}
+ *    or {@link #threadRecordFailure}.
+ *   <li>Using a wrapper like CheckedRunnable that uses one the mechanisms above.
+ *   </ol>
  *
  * <li>If you override {@link #setUp} or {@link #tearDown}, make sure
  * to invoke {@code super.setUp} and {@code super.tearDown} within
@@ -1318,22 +1326,33 @@
     /**
      * Spin-waits up to the specified number of milliseconds for the given
      * thread to enter a wait state: BLOCKED, WAITING, or TIMED_WAITING.
+     * @param waitingForGodot if non-null, an additional condition to satisfy
      */
-    void waitForThreadToEnterWaitState(Thread thread, long timeoutMillis) {
-        long startTime = 0L;
-        for (;;) {
-            Thread.State s = thread.getState();
-            if (s == Thread.State.BLOCKED ||
-                s == Thread.State.WAITING ||
-                s == Thread.State.TIMED_WAITING)
-                return;
-            else if (s == Thread.State.TERMINATED)
+    void waitForThreadToEnterWaitState(Thread thread, long timeoutMillis,
+                                       Callable<Boolean> waitingForGodot) {
+        for (long startTime = 0L;;) {
+            switch (thread.getState()) {
+            default: break;
+            case BLOCKED: case WAITING: case TIMED_WAITING:
+                try {
+                    if (waitingForGodot == null || waitingForGodot.call())
+                        return;
+                } catch (Throwable fail) { threadUnexpectedException(fail); }
+                break;
+            case TERMINATED:
                 fail("Unexpected thread termination");
-            else if (startTime == 0L)
+            }
+
+            if (startTime == 0L)
                 startTime = System.nanoTime();
             else if (millisElapsedSince(startTime) > timeoutMillis) {
-                threadAssertTrue(thread.isAlive());
-                fail("timed out waiting for thread to enter wait state");
+                assertTrue(thread.isAlive());
+                if (waitingForGodot == null
+                    || thread.getState() == Thread.State.RUNNABLE)
+                    fail("timed out waiting for thread to enter wait state");
+                else
+                    fail("timed out waiting for condition, thread state="
+                         + thread.getState());
             }
             Thread.yield();
         }
@@ -1341,32 +1360,10 @@
 
     /**
      * Spin-waits up to the specified number of milliseconds for the given
-     * thread to enter a wait state: BLOCKED, WAITING, or TIMED_WAITING,
-     * and additionally satisfy the given condition.
+     * thread to enter a wait state: BLOCKED, WAITING, or TIMED_WAITING.
      */
-    void waitForThreadToEnterWaitState(
-        Thread thread, long timeoutMillis, Callable<Boolean> waitingForGodot) {
-        long startTime = 0L;
-        for (;;) {
-            Thread.State s = thread.getState();
-            if (s == Thread.State.BLOCKED ||
-                s == Thread.State.WAITING ||
-                s == Thread.State.TIMED_WAITING) {
-                try {
-                    if (waitingForGodot.call())
-                        return;
-                } catch (Throwable fail) { threadUnexpectedException(fail); }
-            }
-            else if (s == Thread.State.TERMINATED)
-                fail("Unexpected thread termination");
-            else if (startTime == 0L)
-                startTime = System.nanoTime();
-            else if (millisElapsedSince(startTime) > timeoutMillis) {
-                threadAssertTrue(thread.isAlive());
-                fail("timed out waiting for thread to enter wait state");
-            }
-            Thread.yield();
-        }
+    void waitForThreadToEnterWaitState(Thread thread, long timeoutMillis) {
+        waitForThreadToEnterWaitState(thread, timeoutMillis, null);
     }
 
     /**
@@ -1374,7 +1371,7 @@
      * enter a wait state: BLOCKED, WAITING, or TIMED_WAITING.
      */
     void waitForThreadToEnterWaitState(Thread thread) {
-        waitForThreadToEnterWaitState(thread, LONG_DELAY_MS);
+        waitForThreadToEnterWaitState(thread, LONG_DELAY_MS, null);
     }
 
     /**
@@ -1382,8 +1379,8 @@
      * enter a wait state: BLOCKED, WAITING, or TIMED_WAITING,
      * and additionally satisfy the given condition.
      */
-    void waitForThreadToEnterWaitState(
-        Thread thread, Callable<Boolean> waitingForGodot) {
+    void waitForThreadToEnterWaitState(Thread thread,
+                                       Callable<Boolean> waitingForGodot) {
         waitForThreadToEnterWaitState(thread, LONG_DELAY_MS, waitingForGodot);
     }
 
@@ -1491,11 +1488,12 @@
         public final void run() {
             try {
                 realRun();
-                threadShouldThrow(exceptionClass.getSimpleName());
             } catch (Throwable t) {
                 if (! exceptionClass.isInstance(t))
                     threadUnexpectedException(t);
+                return;
             }
+            threadShouldThrow(exceptionClass.getSimpleName());
         }
     }
 
@@ -1505,12 +1503,13 @@
         public final void run() {
             try {
                 realRun();
-                threadShouldThrow("InterruptedException");
             } catch (InterruptedException success) {
                 threadAssertFalse(Thread.interrupted());
+                return;
             } catch (Throwable fail) {
                 threadUnexpectedException(fail);
             }
+            threadShouldThrow("InterruptedException");
         }
     }
 
@@ -1522,26 +1521,8 @@
                 return realCall();
             } catch (Throwable fail) {
                 threadUnexpectedException(fail);
-                return null;
             }
-        }
-    }
-
-    public abstract class CheckedInterruptedCallable<T>
-        implements Callable<T> {
-        protected abstract T realCall() throws Throwable;
-
-        public final T call() {
-            try {
-                T result = realCall();
-                threadShouldThrow("InterruptedException");
-                return result;
-            } catch (InterruptedException success) {
-                threadAssertFalse(Thread.interrupted());
-            } catch (Throwable fail) {
-                threadUnexpectedException(fail);
-            }
-            return null;
+            throw new AssertionError("unreached");
         }
     }
 
@@ -1656,14 +1637,6 @@
         public String call() { throw new NullPointerException(); }
     }
 
-    public class SmallPossiblyInterruptedRunnable extends CheckedRunnable {
-        protected void realRun() {
-            try {
-                delay(SMALL_DELAY_MS);
-            } catch (InterruptedException ok) {}
-        }
-    }
-
     public Runnable possiblyInterruptedRunnable(final long timeoutMillis) {
         return new CheckedRunnable() {
             protected void realRun() {
@@ -1719,8 +1692,8 @@
                 return realCompute();
             } catch (Throwable fail) {
                 threadUnexpectedException(fail);
-                return null;
             }
+            throw new AssertionError("unreached");
         }
     }
 
--- a/test/jdk/java/util/concurrent/tck/RecursiveTaskTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/RecursiveTaskTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -225,7 +225,7 @@
                 return n;
             FibTask f1 = new FibTask(n - 1);
             f1.fork();
-            return (new FibTask(n - 2)).compute() + f1.join();
+            return new FibTask(n - 2).compute() + f1.join();
         }
 
         public void publicSetRawResult(Integer result) {
@@ -244,7 +244,7 @@
                 throw new FJException();
             FailingFibTask f1 = new FailingFibTask(n - 1);
             f1.fork();
-            return (new FibTask(n - 2)).compute() + f1.join();
+            return new FibTask(n - 2).compute() + f1.join();
         }
     }
 
--- a/test/jdk/java/util/concurrent/tck/ScheduledExecutorSubclassTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ScheduledExecutorSubclassTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -676,7 +676,7 @@
         final CustomExecutor p = new CustomExecutor(1);
         try (PoolCleaner cleaner = cleaner(p, releaser)) {
             for (int i = 0; i < tasks.length; i++)
-                tasks[i] = p.schedule(new SmallPossiblyInterruptedRunnable(),
+                tasks[i] = p.schedule(possiblyInterruptedRunnable(SMALL_DELAY_MS),
                                       LONG_DELAY_MS, MILLISECONDS);
             int max = tasks.length;
             if (tasks[4].cancel(true)) --max;
--- a/test/jdk/java/util/concurrent/tck/ScheduledExecutorTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ScheduledExecutorTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -634,7 +634,7 @@
         final ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1);
         try (PoolCleaner cleaner = cleaner(p, releaser)) {
             for (int i = 0; i < tasks.length; i++)
-                tasks[i] = p.schedule(new SmallPossiblyInterruptedRunnable(),
+                tasks[i] = p.schedule(possiblyInterruptedRunnable(SMALL_DELAY_MS),
                                       LONG_DELAY_MS, MILLISECONDS);
             int max = tasks.length;
             if (tasks[4].cancel(true)) --max;
--- a/test/jdk/java/util/concurrent/tck/SubmissionPublisherTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/SubmissionPublisherTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -1011,7 +1011,11 @@
      */
     public void testMissedSignal_8187947() throws Exception {
         if (!atLeastJava9()) return; // backport to jdk8 too hard
-        final int N = expensiveTests ? (1 << 20) : (1 << 10);
+        final int N =
+            ((ForkJoinPool.getCommonPoolParallelism() < 2) // JDK-8212899
+             ? (1 << 5)
+             : (1 << 10))
+            * (expensiveTests ? (1 << 10) : 1);
         final CountDownLatch finished = new CountDownLatch(1);
         final SubmissionPublisher<Boolean> pub = new SubmissionPublisher<>();
         class Sub implements Subscriber<Boolean> {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/javax/imageio/plugins/png/PNGCorruptCRCForIENDChunkTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2018, 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     8211422
+ * @summary Test verifies that PNGImageReader does not throw
+ *          IIOException when IEND chunk has corrupt CRC chunk.
+ * @run     main PNGCorruptCRCForIENDChunkTest
+ */
+
+import java.io.ByteArrayInputStream;
+import java.util.Base64;
+import javax.imageio.ImageIO;
+import java.util.Iterator;
+import javax.imageio.ImageReader;
+import javax.imageio.stream.ImageInputStream;
+import java.awt.image.BufferedImage;
+
+public class PNGCorruptCRCForIENDChunkTest {
+
+    // PNG image stream having corrupt CRC for IEND chunk
+    private static String inputImageBase64 = "iVBORw0KGgoAAAANSUhEUgAAAA" +
+            "8AAAAQCAYAAADJViUEAAAAIElEQVR4XmNQllf4Ty5mABHkgFHNJIJRzSSCo" +
+            "a6ZXAwA26ElUIYphtYAAAAASUVORK5C";
+
+    public static void main(String[] args) throws Exception {
+
+        byte[] inputBytes = Base64.getDecoder().decode(inputImageBase64);
+        ByteArrayInputStream bais = new ByteArrayInputStream(inputBytes);
+        ImageInputStream input = ImageIO.createImageInputStream(bais);
+        Iterator iter = ImageIO.getImageReaders(input);
+        ImageReader reader = (ImageReader) iter.next();
+        reader.setInput(input, false, false);
+        BufferedImage image = reader.read(0, reader.getDefaultReadParam());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/javax/imageio/plugins/png/ReadPNGWithNoTextInTEXTChunk.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2018, 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     8212116
+ * @summary Test verifies that PNGImageReader doesn't throw IIOException
+ *          when reading a tEXt chunk having no text.
+ * @run     main ReadPNGWithNoTextInTEXTChunk
+ */
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.awt.Color;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Iterator;
+import javax.imageio.ImageTypeSpecifier;
+import javax.imageio.ImageWriter;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageReader;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.metadata.IIOInvalidTreeException;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.metadata.IIOMetadataNode;
+import javax.imageio.stream.ImageOutputStream;
+import javax.imageio.stream.ImageInputStream;
+import javax.imageio.IIOImage;
+
+public class ReadPNGWithNoTextInTEXTChunk {
+
+    private static BufferedImage img;
+    private static ImageWriter writer;
+    private static ImageWriteParam param;
+    private static IIOMetadata metadata;
+    private static byte[] imageByteArray;
+
+    private static void initialize(int type) {
+        int width = 1;
+        int height = 1;
+        img = new BufferedImage(width, height, type);
+        Graphics2D g2D = img.createGraphics();
+        g2D.setColor(new Color(255, 255, 255));
+        g2D.fillRect(0, 0, width, width);
+        g2D.dispose();
+
+        Iterator<ImageWriter> iterWriter =
+                ImageIO.getImageWritersBySuffix("png");
+        writer = iterWriter.next();
+
+        param = writer.getDefaultWriteParam();
+        ImageTypeSpecifier specifier =
+                ImageTypeSpecifier.
+                        createFromBufferedImageType(type);
+        metadata = writer.getDefaultImageMetadata(specifier, param);
+    }
+
+    private static void createTEXTNode()
+            throws IIOInvalidTreeException {
+        IIOMetadataNode tEXt_Entry = new IIOMetadataNode("tEXtEntry");
+        tEXt_Entry.setAttribute("keyword", "Author");
+        tEXt_Entry.setAttribute("value", "");
+
+        IIOMetadataNode tEXt = new IIOMetadataNode("tEXt");
+        tEXt.appendChild(tEXt_Entry);
+        IIOMetadataNode root = new IIOMetadataNode("javax_imageio_png_1.0");
+        root.appendChild(tEXt);
+        metadata.mergeTree("javax_imageio_png_1.0", root);
+    }
+
+    private static void writeImage() throws IOException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
+        writer.setOutput(ios);
+        writer.write(metadata, new IIOImage(img, null, metadata), param);
+        writer.dispose();
+
+        baos.flush();
+        imageByteArray = baos.toByteArray();
+        baos.close();
+    }
+
+    private static void readPNGTEXTChunk() throws IOException {
+        initialize(BufferedImage.TYPE_BYTE_GRAY);
+        // Create tEXt node with text length 0
+        createTEXTNode();
+
+        writeImage();
+
+        ByteArrayInputStream bais = new ByteArrayInputStream( imageByteArray );
+        ImageInputStream input= ImageIO.createImageInputStream(bais);
+        Iterator iter = ImageIO.getImageReaders(input);
+        ImageReader reader = (ImageReader) iter.next();
+        reader.setInput(input, false, false);
+        BufferedImage image = reader.read(0, reader.getDefaultReadParam());
+        input.close();
+        bais.close();
+    }
+
+    public static void main(String[] args) throws IOException {
+
+        // read PNG image where tEXt chunk's text length is 0
+        readPNGTEXTChunk();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/javax/imageio/plugins/png/VerifyBitDepthScalingWithTRNSChunk.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2018, 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     8211795
+ * @summary Test verifies that PNGImageReader maintains proper
+ *          number of bands for scale array when PNG image
+ *          has tRNS chunk.
+ * @run     main VerifyBitDepthScalingWithTRNSChunk
+ */
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.awt.Color;
+import java.awt.image.IndexColorModel;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+import javax.imageio.ImageTypeSpecifier;
+import javax.imageio.ImageWriter;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.metadata.IIOInvalidTreeException;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.metadata.IIOMetadataNode;
+import javax.imageio.stream.ImageOutputStream;
+import javax.imageio.IIOImage;
+
+public class VerifyBitDepthScalingWithTRNSChunk {
+
+    private static BufferedImage img;
+    private static ImageWriter writer;
+    private static ImageWriteParam param;
+    private static IIOMetadata metadata;
+    private static byte[] imageByteArray;
+
+    private static void initialize(int type) {
+        int width = 1;
+        int height = 1;
+        // create Palette & IndexColorModel for bitdepth 1
+        int size = 2;
+        int bitDepth = 1;
+        byte[] r = new byte[size];
+        byte[] g = new byte[size];
+        byte[] b = new byte[size];
+
+        r[0] = g[0] = b[0] = 0;
+        r[1] = g[1] = b[1] = (byte)255;
+
+        IndexColorModel cm = new IndexColorModel(bitDepth, size, r, g, b);
+        img = new BufferedImage(width, height, type, cm);
+        Graphics2D g2D = img.createGraphics();
+        g2D.setColor(new Color(255, 255, 255));
+        g2D.fillRect(0, 0, width, height);
+
+        Iterator<ImageWriter> iterWriter =
+                ImageIO.getImageWritersBySuffix("png");
+        writer = iterWriter.next();
+
+        param = writer.getDefaultWriteParam();
+        ImageTypeSpecifier specifier =
+                ImageTypeSpecifier.
+                        createFromBufferedImageType(type);
+        metadata = writer.getDefaultImageMetadata(specifier, param);
+    }
+
+    private static void createTRNSNode(String tRNS_value)
+            throws IIOInvalidTreeException {
+        IIOMetadataNode tRNS_gray = new IIOMetadataNode("tRNS_Grayscale");
+        tRNS_gray.setAttribute("gray", tRNS_value);
+
+        IIOMetadataNode tRNS = new IIOMetadataNode("tRNS");
+        tRNS.appendChild(tRNS_gray);
+        IIOMetadataNode root = new IIOMetadataNode("javax_imageio_png_1.0");
+        root.appendChild(tRNS);
+        metadata.mergeTree("javax_imageio_png_1.0", root);
+    }
+
+    private static void writeImage() throws IOException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
+        writer.setOutput(ios);
+        writer.write(metadata, new IIOImage(img, null, metadata), param);
+        writer.dispose();
+
+        baos.flush();
+        imageByteArray = baos.toByteArray();
+        baos.close();
+    }
+
+    private static void verifyBitDepthScalingWithTRNSChunk()
+        throws IOException {
+        initialize(BufferedImage.TYPE_BYTE_BINARY);
+        // Create tRNS node with some value and merge it with default metadata
+        createTRNSNode("255");
+
+        writeImage();
+
+        InputStream input= new ByteArrayInputStream(imageByteArray);
+        /*
+         * Read 1 bit PNG Gray image with tRNS chunk.
+         * Since bitDepth is 1 there will be scaling of each channel,
+         * and it has tRNS chunk for which we will add extra alpha channel.
+         * This will result in creation of scale array in PNGImageReader.
+         */
+        ImageIO.read(input);
+        input.close();
+    }
+
+    public static void main(String[] args) throws IOException {
+        verifyBitDepthScalingWithTRNSChunk();
+    }
+}
+
--- a/test/jdk/javax/swing/GraphicsConfigNotifier/StalePreferredSize.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/GraphicsConfigNotifier/StalePreferredSize.java	Mon Dec 03 10:08:18 2018 +0100
@@ -59,7 +59,7 @@
 /**
  * @test
  * @key headful
- * @bug 8201552
+ * @bug 8201552 8213843
  * @summary Initial layout of the component should use correct graphics config.
  *          It is checked by SwingUtilities.updateComponentTreeUI(), if layout
  *          was correct the call to updateComponentTreeUI() will be no-op.
--- a/test/jdk/javax/swing/JButton/JButtonPaintNPE/JButtonPaintNPE.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JButton/JButtonPaintNPE/JButtonPaintNPE.java	Mon Dec 03 10:08:18 2018 +0100
@@ -36,7 +36,7 @@
  * @key headful
  * @bug 8009919
  * @author Sergey Bylokhov
- * @library ../../../../lib/testlibrary/
+ * @library /lib/client/
  * @build ExtendedRobot
  * @run main JButtonPaintNPE
  */
--- a/test/jdk/javax/swing/JComboBox/4523758/bug4523758.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JComboBox/4523758/bug4523758.java	Mon Dec 03 10:08:18 2018 +0100
@@ -26,7 +26,7 @@
  * @key headful
  * @bug 4523758
  * @summary Directly check that torn-off combo works
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main bug4523758
  */
--- a/test/jdk/javax/swing/JComboBox/6559152/bug6559152.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JComboBox/6559152/bug6559152.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,7 @@
  * @summary Checks that you can select an item in JComboBox with keyboard
  *          when it is a JTable cell editor.
  * @author Mikhail Lapshin
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main bug6559152
  */
--- a/test/jdk/javax/swing/JComboBox/8015300/Test8015300.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JComboBox/8015300/Test8015300.java	Mon Dec 03 10:08:18 2018 +0100
@@ -42,7 +42,7 @@
    @requires (os.family == "windows")
  * @summary Tests that editable combobox selects all text.
  * @author Sergey Malenkov
- * @library ../../../../lib/testlibrary/
+ * @library /lib/client/
  * @modules java.desktop/com.sun.java.swing.plaf.windows
  * @build ExtendedRobot
  * @run main Test8015300
--- a/test/jdk/javax/swing/JComboBox/ConsumedKeyTest/ConsumedKeyTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JComboBox/ConsumedKeyTest/ConsumedKeyTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
   @bug 8031485 8058193
   @summary Combo box consuming escape and enter key events
   @author Petr Pchelko
-  @library ../../../../lib/testlibrary/
+  @library /lib/client/
   @build ExtendedRobot
   @run main ConsumedKeyTest
 */
--- a/test/jdk/javax/swing/JComponent/7154030/bug7154030.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JComponent/7154030/bug7154030.java	Mon Dec 03 10:08:18 2018 +0100
@@ -47,7 +47,7 @@
  * @summary Swing components fail to hide after calling hide()
  * @author Jonathan Lu
  * @library ../../regtesthelpers/
- * @library ../../../../lib/testlibrary/
+ * @library /lib/client/
  * @build Util
  * @build ExtendedRobot
  * @run main bug7154030
--- a/test/jdk/javax/swing/JInternalFrame/6647340/bug6647340.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JInternalFrame/6647340/bug6647340.java	Mon Dec 03 10:08:18 2018 +0100
@@ -27,7 +27,7 @@
  * @summary Checks that iconified internal frame follows
  *          the main frame borders properly.
  * @author Mikhail Lapshin
- * @library ../../../../lib/testlibrary/
+ * @library /lib/client/
  * @build ExtendedRobot
  * @run main bug6647340
  */
--- a/test/jdk/javax/swing/JInternalFrame/6725409/bug6725409.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JInternalFrame/6725409/bug6725409.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,7 @@
  * @summary Checks that JInternalFrame's system menu
  *          can be localized during run-time
  * @author Mikhail Lapshin
- * @library ../../../../lib/testlibrary/
+ * @library /lib/client/
  * @modules java.desktop/com.sun.java.swing.plaf.windows
  * @build ExtendedRobot
  * @run main bug6725409
--- a/test/jdk/javax/swing/JLayer/6824395/bug6824395.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JLayer/6824395/bug6824395.java	Mon Dec 03 10:08:18 2018 +0100
@@ -26,7 +26,7 @@
  * @key headful
  * @summary Checks that JLayer inside JViewport works is correctly laid out
  * @author Alexander Potochkin
- * @library ../../../../lib/testlibrary/
+ * @library /lib/client/
  * @build ExtendedRobot
  * @run main bug6824395
  */
--- a/test/jdk/javax/swing/JMenu/4417601/bug4417601.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JMenu/4417601/bug4417601.java	Mon Dec 03 10:08:18 2018 +0100
@@ -27,7 +27,7 @@
  * @bug 4417601
  * @summary JMenus with no items paint a tiny menu.
  * @author Alexander Potochkin
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main bug4417601
  */
--- a/test/jdk/javax/swing/JMenu/6359669/bug6359669.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JMenu/6359669/bug6359669.java	Mon Dec 03 10:08:18 2018 +0100
@@ -26,7 +26,7 @@
  * @bug 6359669
  * @summary REGRESSION: Submenu does not work if populated in PopupMenuListener.popupMenuWillBecomeVisible
  * @author Alexander Potochkin
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main bug6359669
  */
--- a/test/jdk/javax/swing/JMenu/6538132/bug6538132.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JMenu/6538132/bug6538132.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,7 @@
  * @summary Regression: Pressing Escape key don't close the menu items from jdk7.0 b07 onwards
  * @author Alexander Potochkin
  * @requires (os.family == "windows")
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main bug6538132
  */
--- a/test/jdk/javax/swing/JMenuItem/6249972/bug6249972.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JMenuItem/6249972/bug6249972.java	Mon Dec 03 10:08:18 2018 +0100
@@ -26,7 +26,7 @@
  * @key headful
  * @bug 6249972
  * @summary Tests that JMenuItem(String,int) handles lower-case mnemonics properly.
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @author Mikhail Lapshin
  * @run main bug6249972
--- a/test/jdk/javax/swing/JOptionPane/6428694/bug6428694.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JOptionPane/6428694/bug6428694.java	Mon Dec 03 10:08:18 2018 +0100
@@ -25,7 +25,7 @@
  * @key headful
  * @bug 6428694
  * @summary Checks that double click closes JOptionPane's input dialog.
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @author Mikhail Lapshin
  * @run main bug6428694
--- a/test/jdk/javax/swing/JPopupMenu/4634626/bug4634626.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JPopupMenu/4634626/bug4634626.java	Mon Dec 03 10:08:18 2018 +0100
@@ -27,7 +27,7 @@
  * @bug 4634626
  * @summary Implement context popup menus for components
  * @author Alexander Zuev
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run applet bug4634626.html
  */
--- a/test/jdk/javax/swing/JPopupMenu/6217905/bug6217905.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JPopupMenu/6217905/bug6217905.java	Mon Dec 03 10:08:18 2018 +0100
@@ -28,7 +28,7 @@
  * @summary JPopupMenu keyboard navigation stops working
  * @author Alexander Potochkin
  * @requires (os.family == "windows")
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main bug6217905
  */
--- a/test/jdk/javax/swing/JPopupMenu/6415145/bug6415145.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JPopupMenu/6415145/bug6415145.java	Mon Dec 03 10:08:18 2018 +0100
@@ -25,7 +25,7 @@
  * @key headful
  * @bug 6415145
  * @summary REGRESSION: Selected item is not being updated while dragging above popup menu
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @author Mikhail Lapshin
  * @run main bug6415145
--- a/test/jdk/javax/swing/JPopupMenu/6515446/bug6515446.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JPopupMenu/6515446/bug6515446.java	Mon Dec 03 10:08:18 2018 +0100
@@ -26,7 +26,7 @@
  * @bug 6515446
  * @summary JMenuItems in JPopupMenus not receiving ActionEvents - incompat with 1.5
  * @author Alexander Potochkin
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main bug6515446
  */
--- a/test/jdk/javax/swing/JPopupMenu/6544309/bug6544309.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JPopupMenu/6544309/bug6544309.java	Mon Dec 03 10:08:18 2018 +0100
@@ -27,7 +27,7 @@
    @summary Checks that 'Select Input Method' popup menu allows to select
             items with keyboard.
    @author Mikhail Lapshin
-   @library ../../../../lib/testlibrary
+   @library /lib/client
    @build ExtendedRobot
    @run main bug6544309
 */
--- a/test/jdk/javax/swing/JPopupMenu/6580930/bug6580930.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JPopupMenu/6580930/bug6580930.java	Mon Dec 03 10:08:18 2018 +0100
@@ -26,7 +26,7 @@
  * @bug 6580930 7184956
  * @summary Swing Popups should overlap taskbar
  * @author Alexander Potochkin
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main bug6580930
  */
--- a/test/jdk/javax/swing/JSlider/6401380/bug6401380.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JSlider/6401380/bug6401380.java	Mon Dec 03 10:08:18 2018 +0100
@@ -26,7 +26,7 @@
  * @key headful
  * @bug 6401380
  * @summary JSlider - mouse click ont the left side of the knob is ignored.
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @author Alexander Potochkin
  * @run main bug6401380
--- a/test/jdk/javax/swing/JTabbedPane/7024235/Test7024235.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JTabbedPane/7024235/Test7024235.java	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
  * @key headful
  * @bug 7024235
  * @summary Tests JFrame.pack() with the JTabbedPane
- * @library ../../../../lib/testlibrary/
+ * @library /lib/client/
  * @build ExtendedRobot
  * @author Sergey Malenkov
  * @run main Test7024235
--- a/test/jdk/javax/swing/JTabbedPane/7170310/bug7170310.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JTabbedPane/7170310/bug7170310.java	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
  * @bug 7170310
  * @author Alexey Ivanov
  * @summary Selected tab should be scrolled into view.
- * @library ../../../../lib/testlibrary/
+ * @library /lib/client/
  * @build ExtendedRobot
  * @run main bug7170310
  */
--- a/test/jdk/javax/swing/JTree/8003400/Test8003400.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JTree/8003400/Test8003400.java	Mon Dec 03 10:08:18 2018 +0100
@@ -27,7 +27,7 @@
  * @bug 8003400
  * @summary Tests that JTree shows the last row
  * @author Sergey Malenkov
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main/othervm Test8003400
  * @run main/othervm Test8003400 reverse
--- a/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -40,7 +40,7 @@
  *      window should appear with the translucency. Only window background
  *      should be translucent, all the controls should be opaque.
  * @author mrkam
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main PerPixelTranslucent
  * @run main/othervm -Dsun.java2d.uiScale=1.5 PerPixelTranslucent
--- a/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @key headful
  * @summary Check if a per-pixel translucent window shows up with correct translucency
  * @author mrkam
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main PerPixelTranslucentCanvas
  * @run main/othervm -Dsun.java2d.uiScale=1.5 PerPixelTranslucentCanvas
--- a/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentGradient.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentGradient.java	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
  *      the window should appear as specified with the translucency. Only window
  *      background should be translucent, all the controls should be opaque.
  * @author mrkam
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main PerPixelTranslucentGradient
  * @run main/othervm -Dsun.java2d.uiScale=1.5 PerPixelTranslucentGradient
--- a/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java	Mon Dec 03 10:08:18 2018 +0100
@@ -38,7 +38,7 @@
  * Expected Result: Only the components present in the window must be shown. Other
  *      areas of the window must be transparent so that the background shows
  * @author mrkam
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main PerPixelTranslucentSwing
  * @run main/othervm -Dsun.java2d.uiScale=1.5 PerPixelTranslucentSwing
--- a/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/SetShapeAndClickSwing.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/SetShapeAndClickSwing.java	Mon Dec 03 10:08:18 2018 +0100
@@ -47,7 +47,7 @@
  *      on clipped region should deliver the event to the background (it should be
  *      another Window behind the test window)
  * @author mrkam
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main SetShapeAndClickSwing
  */
--- a/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java	Mon Dec 03 10:08:18 2018 +0100
@@ -45,7 +45,7 @@
  *      translucent gradient in parts that are not clipped by shape, all the
  *      controls should be opaque.
  * @author mrkam
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main ShapedPerPixelTranslucentGradient
  * @run main/othervm -Dsun.java2d.uiScale=1.5 ShapedPerPixelTranslucentGradient
--- a/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java	Mon Dec 03 10:08:18 2018 +0100
@@ -46,7 +46,7 @@
  *      translucent gradient in parts that are not clipped by shape, all the
  *      controls should be equally translucent.
  * @author mrkam
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main ShapedTranslucentPerPixelTranslucentGradient
  * @run main/othervm -Dsun.java2d.uiScale=1.5 ShapedTranslucentPerPixelTranslucentGradient
--- a/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java	Mon Dec 03 10:08:18 2018 +0100
@@ -36,7 +36,7 @@
  * Expected Result: If TRANSLUCENT Translucency type is supported, the drop down
  *      should appear translucent.
  * @author mrkam
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main TranslucentJComboBox
  */
--- a/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentPerPixelTranslucentGradient.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentPerPixelTranslucentGradient.java	Mon Dec 03 10:08:18 2018 +0100
@@ -43,7 +43,7 @@
  *      Both window background and all the controls should be translucent but
  *      background should have a gradient in translucency while controls - not.
  * @author mrkam
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main TranslucentPerPixelTranslucentGradient
  * @run main/othervm -Dsun.java2d.uiScale=1.5 TranslucentPerPixelTranslucentGradient
--- a/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentWindowClickSwing.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentWindowClickSwing.java	Mon Dec 03 10:08:18 2018 +0100
@@ -39,7 +39,7 @@
  *      should appear translucent showing the background. They should trigger events
  *      correctly
  * @author mrkam
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build Common ExtendedRobot
  * @run main TranslucentWindowClickSwing
  */
--- a/test/jdk/javax/swing/dnd/8139050/NativeErrorsInTableDnD.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/dnd/8139050/NativeErrorsInTableDnD.java	Mon Dec 03 10:08:18 2018 +0100
@@ -41,7 +41,7 @@
  * @test
  * @bug 8139050 8153871
  * @key headful
- * @library ../../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main/othervm/timeout=360 -Xcheck:jni NativeErrorsInTableDnD
  */
--- a/test/jdk/javax/swing/reliability/TaskUndJFrameProperties.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/reliability/TaskUndJFrameProperties.java	Mon Dec 03 10:08:18 2018 +0100
@@ -30,7 +30,7 @@
  * @summary Construct a Undecorated JFrame, try to change the properties
  *          using setVisible() method.
  * @author Aruna Samji
- * @library ../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main TaskUndJFrameProperties
  */
--- a/test/jdk/javax/swing/reliability/TaskZoomJFrameChangeState.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/reliability/TaskZoomJFrameChangeState.java	Mon Dec 03 10:08:18 2018 +0100
@@ -33,7 +33,7 @@
  *          check the zoomed size is same as the screen size. Check the
  *          location of the jframe after restoration from zoom or icon.
  * @author Aruna Samji
- * @library ../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main TaskZoomJFrameChangeState
  */
--- a/test/jdk/javax/swing/reliability/TaskZoomJFrameRepaint.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/reliability/TaskZoomJFrameRepaint.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,7 +29,7 @@
  * @key headful
  * @summary Construct a jframe with some components and zoom the frame and bring it back to normal state.
  * @author Aruna Samji
- * @library ../../../lib/testlibrary
+ * @library /lib/client
  * @build ExtendedRobot
  * @run main TaskZoomJFrameRepaint
  */
--- a/test/jdk/javax/swing/text/AbstractDocument/6968363/Test6968363.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/javax/swing/text/AbstractDocument/6968363/Test6968363.java	Mon Dec 03 10:08:18 2018 +0100
@@ -46,7 +46,7 @@
  * @bug 6968363
  * @summary Ensures that a custom document may not extend AbstractDocument
  * @author Sergey Malenkov
- * @library ../../../../../lib/testlibrary/
+ * @library /lib/client/
  * @build ExtendedRobot
  * @run main Test6968363
  */
--- a/test/jdk/jdk/jfr/event/compiler/TestCompilerConfig.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/jdk/jfr/event/compiler/TestCompilerConfig.java	Mon Dec 03 10:08:18 2018 +0100
@@ -40,7 +40,7 @@
  * @run main/othervm jdk.jfr.event.compiler.TestCompilerConfig
  */
 public class TestCompilerConfig {
-    private final static String EVENT_NAME = EventNames.CompilerConfig;
+    private final static String EVENT_NAME = EventNames.CompilerConfiguration;
 
     public static void main(String[] args) throws Exception {
         Recording recording = new Recording();
--- a/test/jdk/jdk/jfr/event/gc/detailed/TestEvacuationInfoEvent.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/jdk/jfr/event/gc/detailed/TestEvacuationInfoEvent.java	Mon Dec 03 10:08:18 2018 +0100
@@ -45,7 +45,7 @@
  * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:-UseFastUnorderedTimeStamps -XX:G1HeapRegionSize=1m -Xmx64m -Xmn16m -XX:+UseG1GC jdk.jfr.event.gc.detailed.TestEvacuationInfoEvent
  */
 public class TestEvacuationInfoEvent {
-    private final static String EVENT_INFO_NAME = EventNames.EvacuationInfo;
+    private final static String EVENT_INFO_NAME = EventNames.EvacuationInformation;
     private final static String EVENT_FAILED_NAME = EventNames.EvacuationFailed;
 
     public static void main(String[] args) throws Throwable {
@@ -69,8 +69,8 @@
             long setUsedAfter = Events.assertField(event, "cSetUsedAfter").atLeast(0L).getValue();
             long setUsedBefore = Events.assertField(event, "cSetUsedBefore").atLeast(setUsedAfter).getValue();
             int allocationRegions = Events.assertField(event, "allocationRegions").atLeast(0).getValue();
-            long allocRegionsUsedBefore = Events.assertField(event, "allocRegionsUsedBefore").atLeast(0L).getValue();
-            long allocRegionsUsedAfter = Events.assertField(event, "allocRegionsUsedAfter").atLeast(0L).getValue();
+            long allocRegionsUsedBefore = Events.assertField(event, "allocationRegionsUsedBefore").atLeast(0L).getValue();
+            long allocRegionsUsedAfter = Events.assertField(event, "allocationRegionsUsedAfter").atLeast(0L).getValue();
             long bytesCopied = Events.assertField(event, "bytesCopied").atLeast(0L).getValue();
             int regionsFreed = Events.assertField(event, "regionsFreed").atLeast(0).getValue();
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/jfr/event/metadata/TestLookForUntestedEvents.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package jdk.jfr.event.metadata;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import jdk.jfr.EventType;
+import jdk.jfr.Experimental;
+import jdk.jfr.FlightRecorder;
+import jdk.test.lib.jfr.EventNames;
+import jdk.test.lib.Utils;
+
+/**
+ * @test Check for JFR events not covered by tests
+ * @key jfr
+ * @requires vm.hasJFR
+ * @library /test/lib /test/jdk
+ * @run main jdk.jfr.event.metadata.TestLookForUntestedEvents
+ */
+public class TestLookForUntestedEvents {
+    private static final Path jfrTestRoot = Paths.get(Utils.TEST_SRC).getParent().getParent();
+    private static final String MSG_SEPARATOR = "==========================";
+    private static Set<String> jfrEventTypes = new HashSet<>();
+
+    private static final Set<String> knownEventsMissingFromEventNames = new HashSet<>(
+        Arrays.asList(
+            // The Z* events below should be marked as experimental; see: JDK-8213966
+            "ZStatisticsSampler", "ZStatisticsCounter",
+            "ZPageAllocation", "ZThreadPhase"
+        )
+    );
+
+    private static final Set<String> hardToTestEvents = new HashSet<>(
+        Arrays.asList(
+            "DataLoss", "IntFlag", "ReservedStackActivation",
+            "DoubleFlag", "UnsignedLongFlagChanged", "IntFlagChanged",
+            "UnsignedIntFlag", "UnsignedIntFlagChanged", "DoubleFlagChanged")
+    );
+
+    // GC uses specific framework to test the events, instead of using event names literally.
+    // GC tests were inspected, as well as runtime output of GC tests.
+    // The following events below are know to be covered based on that inspection.
+    private static final Set<String> coveredGcEvents = new HashSet<>(
+        Arrays.asList(
+            "MetaspaceGCThreshold", "MetaspaceAllocationFailure", "MetaspaceOOM",
+            "MetaspaceChunkFreeListSummary", "G1HeapSummary", "ParallelOldGarbageCollection",
+            "OldGarbageCollection", "G1GarbageCollection", "GCPhasePause",
+            "GCPhasePauseLevel1", "GCPhasePauseLevel2", "GCPhasePauseLevel3",
+            "GCPhasePauseLevel4", "GCPhaseConcurrent")
+    );
+
+    // This is a "known failure list" for this test.
+    // NOTE: if the event is not covered, a bug should be open, and bug number
+    // noted in the comments for this set.
+    private static final Set<String> knownNotCoveredEvents = new HashSet<>(
+        // DumpReason: JDK-8213918, Shutdown: JDK-8213917
+        Arrays.asList("DumpReason", "Shutdown")
+    );
+
+
+    public static void main(String[] args) throws Exception {
+        for (EventType type : FlightRecorder.getFlightRecorder().getEventTypes()) {
+            if (type.getAnnotation(Experimental.class) == null) {
+                jfrEventTypes.add(type.getName().replace("jdk.", ""));
+            }
+        }
+
+        checkEventNamesClass();
+        lookForEventsNotCoveredByTests();
+    }
+
+    // Look thru JFR tests to make sure JFR events are referenced in the tests
+    private static void lookForEventsNotCoveredByTests() throws Exception {
+        List<Path> paths = Files.walk(jfrTestRoot)
+            .filter(Files::isRegularFile)
+            .filter(path -> isJavaFile(path))
+            .collect(Collectors.toList());
+
+        Set<String> eventsNotCoveredByTest = new HashSet<>(jfrEventTypes);
+        for (String event : jfrEventTypes) {
+            for (Path p : paths) {
+                if (findStringInFile(p, event)) {
+                    eventsNotCoveredByTest.remove(event);
+                    break;
+                }
+            }
+        }
+
+        // Account for hard-to-test, experimental and GC tested events
+        eventsNotCoveredByTest.removeAll(hardToTestEvents);
+        eventsNotCoveredByTest.removeAll(coveredGcEvents);
+        eventsNotCoveredByTest.removeAll(knownNotCoveredEvents);
+
+        if (!eventsNotCoveredByTest.isEmpty()) {
+            print(MSG_SEPARATOR + " Events not covered by test");
+            for (String event: eventsNotCoveredByTest) {
+                print(event);
+            }
+            print(MSG_SEPARATOR);
+            throw new RuntimeException("Found JFR events not covered by tests");
+        }
+    }
+
+    // Make sure all the JFR events are accounted for in jdk.test.lib.jfr.EventNames
+    private static void checkEventNamesClass() throws Exception {
+        // jdk.test.lib.jfr.EventNames
+        Set<String> eventsFromEventNamesClass = new HashSet<>();
+        for (Field f : EventNames.class.getFields()) {
+            String name = f.getName();
+            if (!name.equals("PREFIX")) {
+                String eventName = (String) f.get(null);
+                eventName = eventName.replace(EventNames.PREFIX, "");
+                eventsFromEventNamesClass.add(eventName);
+            }
+        }
+
+        // Account for the events that are known to be missing from the EventNames.java
+        eventsFromEventNamesClass.addAll(knownEventsMissingFromEventNames);
+
+        if (!jfrEventTypes.equals(eventsFromEventNamesClass)) {
+            String exceptionMsg = "Events declared in jdk.test.lib.jfr.EventNames differ " +
+                         "from events returned by FlightRecorder.getEventTypes()";
+            print(MSG_SEPARATOR);
+            print(exceptionMsg);
+            print("");
+            printSetDiff(jfrEventTypes, eventsFromEventNamesClass,
+                        "jfrEventTypes", "eventsFromEventNamesClass");
+            print("");
+
+            print("This could be because:");
+            print("1) You forgot to write a unit test. Please do so in test/jdk/jdk/jfr/event/");
+            print("2) You wrote a unit test, but you didn't reference the event in");
+            print("   test/lib/jdk/test/lib/jfr/EventNames.java. ");
+            print("3) It is not feasible to test the event, not even a sanity test. ");
+            print("   Add the event name to test/lib/jdk/test/lib/jfr/EventNames.java ");
+            print("   and a short comment why it can't be tested");
+            print("4) The event is experimental. Please add 'experimental=\"true\"' to <Event> ");
+            print("   element in metadata.xml if it is a native event, or @Experimental if it is a ");
+            print("   Java event. The event will now not show up in JMC");
+            System.out.println(MSG_SEPARATOR);
+            throw new RuntimeException(exceptionMsg);
+        }
+    }
+
+    // ================ Helper methods
+    private static boolean isJavaFile(Path p) {
+        String fileName = p.getFileName().toString();
+        int i = fileName.lastIndexOf('.');
+        if ( (i < 0) || (i > fileName.length()) ) {
+            return false;
+        }
+        return "java".equals(fileName.substring(i+1));
+    }
+
+    private static boolean findStringInFile(Path p, String searchTerm) throws IOException {
+        long c = 0;
+        try (Stream<String> stream = Files.lines(p)) {
+            c = stream
+                .filter(line -> line.contains(searchTerm))
+                .count();
+        }
+        return (c != 0);
+    }
+
+    private static void printSetDiff(Set<String> a, Set<String> b,
+        String setAName, String setBName) {
+        if (a.size() > b.size()) {
+            a.removeAll(b);
+            System.out.printf("Set %s has more elements than set %s:", setAName, setBName);
+            System.out.println();
+            printSet(a);
+        } else {
+            b.removeAll(a);
+            System.out.printf("Set %s has more elements than set %s:", setBName, setAName);
+            System.out.println();
+            printSet(b);
+        }
+    }
+
+    private static void printSet(Set<String> set) {
+        for (String e : set) {
+            System.out.println(e);
+        }
+    }
+
+    private static void print(String s) {
+        System.out.println(s);
+    }
+}
--- a/test/jdk/jdk/jfr/event/runtime/TestSafepointEvents.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/jdk/jfr/event/runtime/TestSafepointEvents.java	Mon Dec 03 10:08:18 2018 +0100
@@ -54,7 +54,7 @@
 
     static final String[] EVENT_NAMES = new String[] {
         EventNames.SafepointBegin,
-        EventNames.SafepointStateSyncronization,
+        EventNames.SafepointStateSynchronization,
         EventNames.SafepointWaitBlocked,
         EventNames.SafepointCleanup,
         EventNames.SafepointCleanupTask,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/lib/client/ExtendedRobot.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,408 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+import java.awt.AWTException;
+import java.awt.Robot;
+import java.awt.GraphicsDevice;
+import java.awt.Toolkit;
+import java.awt.Point;
+import java.awt.MouseInfo;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+
+/**
+ * ExtendedRobot is a subclass of {@link java.awt.Robot}. It provides some convenience methods that are
+ * ought to be moved to {@link java.awt.Robot} class.
+ * <p>
+ * ExtendedRobot uses delay {@link #getSyncDelay()} to make syncing threads with {@link #waitForIdle()}
+ * more stable. This delay can be set once on creating object and could not be changed throughout object
+ * lifecycle. Constructor reads vm integer property {@code java.awt.robotdelay} and sets the delay value
+ * equal to the property value. If the property was not set 500 milliseconds default value is used.
+ * <p>
+ * When using jtreg you would include this class via something like:
+ * <pre>
+ * {@literal @}library ../../../../lib/testlibrary
+ * {@literal @}build ExtendedRobot
+ * </pre>
+ *
+ * @author      Dmitriy Ermashov
+ * @since       9
+ */
+
+public class ExtendedRobot extends Robot {
+
+    private static int DEFAULT_SPEED = 20;       // Speed for mouse glide and click
+    private static int DEFAULT_SYNC_DELAY = 500; // Default Additional delay for waitForIdle()
+    private static int DEFAULT_STEP_LENGTH = 2;  // Step length (in pixels) for mouse glide
+
+    private final int syncDelay = DEFAULT_SYNC_DELAY;
+
+    //TODO: uncomment three lines below after moving functionality to java.awt.Robot
+    //{
+    //    syncDelay = AccessController.doPrivileged(new GetIntegerAction("java.awt.robotdelay", DEFAULT_SYNC_DELAY));
+    //}
+
+    /**
+     * Constructs an ExtendedRobot object in the coordinate system of the primary screen.
+     *
+     * @throws  AWTException if the platform configuration does not allow low-level input
+     *          control. This exception is always thrown when
+     *          GraphicsEnvironment.isHeadless() returns true
+     * @throws  SecurityException if {@code createRobot} permission is not granted
+     *
+     * @see     java.awt.GraphicsEnvironment#isHeadless
+     * @see     SecurityManager#checkPermission
+     * @see     java.awt.AWTPermission
+     */
+    public ExtendedRobot() throws AWTException {
+        super();
+    }
+
+    /**
+     * Creates an ExtendedRobot for the given screen device. Coordinates passed
+     * to ExtendedRobot method calls like mouseMove and createScreenCapture will
+     * be interpreted as being in the same coordinate system as the specified screen.
+     * Note that depending on the platform configuration, multiple screens may either:
+     * <ul>
+     * <li>share the same coordinate system to form a combined virtual screen</li>
+     * <li>use different coordinate systems to act as independent screens</li>
+     * </ul>
+     * This constructor is meant for the latter case.
+     * <p>
+     * If screen devices are reconfigured such that the coordinate system is
+     * affected, the behavior of existing ExtendedRobot objects is undefined.
+     *
+     * @param   screen  A screen GraphicsDevice indicating the coordinate
+     *                  system the Robot will operate in.
+     * @throws  AWTException if the platform configuration does not allow low-level input
+     *          control. This exception is always thrown when
+     *          GraphicsEnvironment.isHeadless() returns true.
+     * @throws  IllegalArgumentException if {@code screen} is not a screen
+     *          GraphicsDevice.
+     * @throws  SecurityException if {@code createRobot} permission is not granted
+     *
+     * @see     java.awt.GraphicsEnvironment#isHeadless
+     * @see     GraphicsDevice
+     * @see     SecurityManager#checkPermission
+     * @see     java.awt.AWTPermission
+     */
+    public ExtendedRobot(GraphicsDevice screen) throws AWTException {
+        super(screen);
+    }
+
+    /**
+     * Returns delay length for {@link #waitForIdle()} method
+     *
+     * @return  Current delay value
+     *
+     * @see     #waitForIdle()
+     */
+    public int getSyncDelay(){ return this.syncDelay; }
+
+    /**
+     * Clicks mouse button(s) by calling {@link java.awt.Robot#mousePress(int)} and
+     * {@link java.awt.Robot#mouseRelease(int)} methods
+     *
+     *
+     * @param   buttons The button mask; a combination of one or more mouse button masks.
+     * @throws  IllegalArgumentException if the {@code buttons} mask contains the mask for
+     *          extra mouse button and support for extended mouse buttons is
+     *          {@link Toolkit#areExtraMouseButtonsEnabled() disabled} by Java
+     * @throws  IllegalArgumentException if the {@code buttons} mask contains the mask for
+     *          extra mouse button that does not exist on the mouse and support for extended
+     *          mouse buttons is {@link Toolkit#areExtraMouseButtonsEnabled() enabled}
+     *          by Java
+     *
+     * @see     #mousePress(int)
+     * @see     #mouseRelease(int)
+     * @see     InputEvent#getMaskForButton(int)
+     * @see     Toolkit#areExtraMouseButtonsEnabled()
+     * @see     java.awt.event.MouseEvent
+     */
+    public void click(int buttons) {
+        mousePress(buttons);
+        waitForIdle(DEFAULT_SPEED);
+        mouseRelease(buttons);
+        waitForIdle();
+    }
+
+    /**
+     * Clicks mouse button 1
+     *
+     * @throws  IllegalArgumentException if the {@code buttons} mask contains the mask for
+     *          extra mouse button and support for extended mouse buttons is
+     *          {@link Toolkit#areExtraMouseButtonsEnabled() disabled} by Java
+     * @throws  IllegalArgumentException if the {@code buttons} mask contains the mask for
+     *          extra mouse button that does not exist on the mouse and support for extended
+     *          mouse buttons is {@link Toolkit#areExtraMouseButtonsEnabled() enabled}
+     *          by Java
+     *
+     * @see     #click(int)
+     */
+    public void click() {
+        click(InputEvent.BUTTON1_DOWN_MASK);
+    }
+
+    /**
+     * Waits until all events currently on the event queue have been processed with given
+     * delay after syncing threads. It uses more advanced method of synchronizing threads
+     * unlike {@link java.awt.Robot#waitForIdle()}
+     *
+     * @param   delayValue  Additional delay length in milliseconds to wait until thread
+     *                      sync been completed
+     * @throws  sun.awt.SunToolkit.IllegalThreadException if called on the AWT event
+     *          dispatching thread
+     */
+    public synchronized void waitForIdle(int delayValue) {
+        super.waitForIdle();
+        delay(delayValue);
+    }
+
+    /**
+     * Waits until all events currently on the event queue have been processed with delay
+     * {@link #getSyncDelay()} after syncing threads. It uses more advanced method of
+     * synchronizing threads unlike {@link java.awt.Robot#waitForIdle()}
+     *
+     * @throws  sun.awt.SunToolkit.IllegalThreadException if called on the AWT event
+     *          dispatching thread
+     *
+     * @see     #waitForIdle(int)
+     */
+    @Override
+    public synchronized void waitForIdle() {
+        waitForIdle(syncDelay);
+    }
+
+    /**
+     * Move the mouse in multiple steps from where it is
+     * now to the destination coordinates.
+     *
+     * @param   x   Destination point x coordinate
+     * @param   y   Destination point y coordinate
+     *
+     * @see     #glide(int, int, int, int)
+     */
+    public void glide(int x, int y) {
+        Point p = MouseInfo.getPointerInfo().getLocation();
+        glide(p.x, p.y, x, y);
+    }
+
+    /**
+     * Move the mouse in multiple steps from where it is
+     * now to the destination point.
+     *
+     * @param   dest    Destination point
+     *
+     * @see     #glide(int, int)
+     */
+    public void glide(Point dest) {
+        glide(dest.x, dest.y);
+    }
+
+    /**
+     * Move the mouse in multiple steps from source coordinates
+     * to the destination coordinates.
+     *
+     * @param   fromX   Source point x coordinate
+     * @param   fromY   Source point y coordinate
+     * @param   toX     Destination point x coordinate
+     * @param   toY     Destination point y coordinate
+     *
+     * @see     #glide(int, int, int, int, int, int)
+     */
+    public void glide(int fromX, int fromY, int toX, int toY) {
+        glide(fromX, fromY, toX, toY, DEFAULT_STEP_LENGTH, DEFAULT_SPEED);
+    }
+
+    /**
+     * Move the mouse in multiple steps from source point to the
+     * destination point with default speed and step length.
+     *
+     * @param   src     Source point
+     * @param   dest    Destination point
+     *
+     * @see     #glide(int, int, int, int, int, int)
+     */
+    public void glide(Point src, Point dest) {
+        glide(src.x, src.y, dest.x, dest.y, DEFAULT_STEP_LENGTH, DEFAULT_SPEED);
+    }
+
+    /**
+     * Move the mouse in multiple steps from source point to the
+     * destination point with given speed and step length.
+     *
+     * @param   srcX        Source point x cordinate
+     * @param   srcY        Source point y cordinate
+     * @param   destX       Destination point x cordinate
+     * @param   destY       Destination point y cordinate
+     * @param   stepLength  Approximate length of one step
+     * @param   speed       Delay between steps.
+     *
+     * @see     #mouseMove(int, int)
+     * @see     #delay(int)
+     */
+     public void glide(int srcX, int srcY, int destX, int destY, int stepLength, int speed) {
+        int stepNum;
+        double tDx, tDy;
+        double dx, dy, ds;
+        double x, y;
+
+        dx = (destX - srcX);
+        dy = (destY - srcY);
+        ds = Math.sqrt(dx*dx + dy*dy);
+
+        tDx = dx / ds * stepLength;
+        tDy = dy / ds * stepLength;
+
+        int stepsCount = (int) ds / stepLength;
+
+        // Walk the mouse to the destination one step at a time
+        mouseMove(srcX, srcY);
+
+        for (x = srcX, y = srcY, stepNum = 0;
+             stepNum < stepsCount;
+             stepNum++) {
+            x += tDx;
+            y += tDy;
+            mouseMove((int)x, (int)y);
+            delay(speed);
+        }
+
+        // Ensure the mouse moves to the right destination.
+        // The steps may have led the mouse to a slightly wrong place.
+        mouseMove(destX, destY);
+    }
+
+    /**
+     * Moves mouse pointer to given screen coordinates.
+     *
+     * @param   position    Target position
+     *
+     * @see     java.awt.Robot#mouseMove(int, int)
+     */
+    public synchronized void mouseMove(Point position) {
+        mouseMove(position.x, position.y);
+    }
+
+
+    /**
+     * Emulate native drag and drop process using {@code InputEvent.BUTTON1_DOWN_MASK}.
+     * The method successively moves mouse cursor to point with coordinates
+     * ({@code fromX}, {@code fromY}), presses mouse button 1, drag mouse to
+     * point with coordinates ({@code toX}, {@code toY}) and releases mouse
+     * button 1 at last.
+     *
+     * @param   fromX   Source point x coordinate
+     * @param   fromY   Source point y coordinate
+     * @param   toX     Destination point x coordinate
+     * @param   toY     Destination point y coordinate
+     *
+     * @see     #mousePress(int)
+     * @see     #glide(int, int, int, int)
+     */
+    public void dragAndDrop(int fromX, int fromY, int toX, int toY){
+        mouseMove(fromX, fromY);
+        mousePress(InputEvent.BUTTON1_DOWN_MASK);
+        waitForIdle();
+        glide(toX, toY);
+        mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
+        waitForIdle();
+    }
+
+    /**
+     * Emulate native drag and drop process using {@code InputEvent.BUTTON1_DOWN_MASK}.
+     * The method successively moves mouse cursor to point {@code from},
+     * presses mouse button 1, drag mouse to point {@code to} and releases
+     * mouse button 1 at last.
+     *
+     * @param   from    Source point
+     * @param   to      Destination point
+     *
+     * @see     #mousePress(int)
+     * @see     #glide(int, int, int, int)
+     * @see     #dragAndDrop(int, int, int, int)
+     */
+    public void dragAndDrop(Point from, Point to){
+        dragAndDrop(from.x, from.y, to.x, to.y);
+    }
+
+    /**
+     * Successively presses and releases a given key.
+     * <p>
+     * Key codes that have more than one physical key associated with them
+     * (e.g. {@code KeyEvent.VK_SHIFT} could mean either the
+     * left or right shift key) will map to the left key.
+     *
+     * @param   keycode Key to press (e.g. {@code KeyEvent.VK_A})
+     * @throws  IllegalArgumentException if {@code keycode} is not
+     *          a valid key
+     *
+     * @see     java.awt.Robot#keyPress(int)
+     * @see     java.awt.Robot#keyRelease(int)
+     * @see     java.awt.event.KeyEvent
+     */
+    public void type(int keycode) {
+        keyPress(keycode);
+        waitForIdle(DEFAULT_SPEED);
+        keyRelease(keycode);
+        waitForIdle(DEFAULT_SPEED);
+    }
+
+    /**
+     * Types given character
+     *
+     * @param   c   Character to be typed (e.g. {@code 'a'})
+     *
+     * @see     #type(int)
+     * @see     java.awt.event.KeyEvent
+     */
+    public void type(char c) {
+        type(KeyEvent.getExtendedKeyCodeForChar(c));
+    }
+
+    /**
+     * Types given array of characters one by one
+     *
+     * @param   symbols Array of characters to be typed
+     *
+     * @see     #type(char)
+     */
+    public void type(char[] symbols) {
+        for (int i = 0; i < symbols.length; i++) {
+            type(symbols[i]);
+        }
+    }
+
+    /**
+     * Types given string
+     *
+     * @param   s   String to be typed
+     *
+     * @see     #type(char[])
+     */
+    public void type(String s) {
+        type(s.toCharArray());
+    }
+}
--- a/test/jdk/lib/testlibrary/ExtendedRobot.java	Mon Nov 26 19:05:55 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,408 +0,0 @@
-/*
- * Copyright (c) 2014, 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.
- */
-
-import java.awt.AWTException;
-import java.awt.Robot;
-import java.awt.GraphicsDevice;
-import java.awt.Toolkit;
-import java.awt.Point;
-import java.awt.MouseInfo;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-
-/**
- * ExtendedRobot is a subclass of {@link java.awt.Robot}. It provides some convenience methods that are
- * ought to be moved to {@link java.awt.Robot} class.
- * <p>
- * ExtendedRobot uses delay {@link #getSyncDelay()} to make syncing threads with {@link #waitForIdle()}
- * more stable. This delay can be set once on creating object and could not be changed throughout object
- * lifecycle. Constructor reads vm integer property {@code java.awt.robotdelay} and sets the delay value
- * equal to the property value. If the property was not set 500 milliseconds default value is used.
- * <p>
- * When using jtreg you would include this class via something like:
- * <pre>
- * {@literal @}library ../../../../lib/testlibrary
- * {@literal @}build ExtendedRobot
- * </pre>
- *
- * @author      Dmitriy Ermashov
- * @since       9
- */
-
-public class ExtendedRobot extends Robot {
-
-    private static int DEFAULT_SPEED = 20;       // Speed for mouse glide and click
-    private static int DEFAULT_SYNC_DELAY = 500; // Default Additional delay for waitForIdle()
-    private static int DEFAULT_STEP_LENGTH = 2;  // Step length (in pixels) for mouse glide
-
-    private final int syncDelay = DEFAULT_SYNC_DELAY;
-
-    //TODO: uncomment three lines below after moving functionality to java.awt.Robot
-    //{
-    //    syncDelay = AccessController.doPrivileged(new GetIntegerAction("java.awt.robotdelay", DEFAULT_SYNC_DELAY));
-    //}
-
-    /**
-     * Constructs an ExtendedRobot object in the coordinate system of the primary screen.
-     *
-     * @throws  AWTException if the platform configuration does not allow low-level input
-     *          control. This exception is always thrown when
-     *          GraphicsEnvironment.isHeadless() returns true
-     * @throws  SecurityException if {@code createRobot} permission is not granted
-     *
-     * @see     java.awt.GraphicsEnvironment#isHeadless
-     * @see     SecurityManager#checkPermission
-     * @see     java.awt.AWTPermission
-     */
-    public ExtendedRobot() throws AWTException {
-        super();
-    }
-
-    /**
-     * Creates an ExtendedRobot for the given screen device. Coordinates passed
-     * to ExtendedRobot method calls like mouseMove and createScreenCapture will
-     * be interpreted as being in the same coordinate system as the specified screen.
-     * Note that depending on the platform configuration, multiple screens may either:
-     * <ul>
-     * <li>share the same coordinate system to form a combined virtual screen</li>
-     * <li>use different coordinate systems to act as independent screens</li>
-     * </ul>
-     * This constructor is meant for the latter case.
-     * <p>
-     * If screen devices are reconfigured such that the coordinate system is
-     * affected, the behavior of existing ExtendedRobot objects is undefined.
-     *
-     * @param   screen  A screen GraphicsDevice indicating the coordinate
-     *                  system the Robot will operate in.
-     * @throws  AWTException if the platform configuration does not allow low-level input
-     *          control. This exception is always thrown when
-     *          GraphicsEnvironment.isHeadless() returns true.
-     * @throws  IllegalArgumentException if {@code screen} is not a screen
-     *          GraphicsDevice.
-     * @throws  SecurityException if {@code createRobot} permission is not granted
-     *
-     * @see     java.awt.GraphicsEnvironment#isHeadless
-     * @see     GraphicsDevice
-     * @see     SecurityManager#checkPermission
-     * @see     java.awt.AWTPermission
-     */
-    public ExtendedRobot(GraphicsDevice screen) throws AWTException {
-        super(screen);
-    }
-
-    /**
-     * Returns delay length for {@link #waitForIdle()} method
-     *
-     * @return  Current delay value
-     *
-     * @see     #waitForIdle()
-     */
-    public int getSyncDelay(){ return this.syncDelay; }
-
-    /**
-     * Clicks mouse button(s) by calling {@link java.awt.Robot#mousePress(int)} and
-     * {@link java.awt.Robot#mouseRelease(int)} methods
-     *
-     *
-     * @param   buttons The button mask; a combination of one or more mouse button masks.
-     * @throws  IllegalArgumentException if the {@code buttons} mask contains the mask for
-     *          extra mouse button and support for extended mouse buttons is
-     *          {@link Toolkit#areExtraMouseButtonsEnabled() disabled} by Java
-     * @throws  IllegalArgumentException if the {@code buttons} mask contains the mask for
-     *          extra mouse button that does not exist on the mouse and support for extended
-     *          mouse buttons is {@link Toolkit#areExtraMouseButtonsEnabled() enabled}
-     *          by Java
-     *
-     * @see     #mousePress(int)
-     * @see     #mouseRelease(int)
-     * @see     InputEvent#getMaskForButton(int)
-     * @see     Toolkit#areExtraMouseButtonsEnabled()
-     * @see     java.awt.event.MouseEvent
-     */
-    public void click(int buttons) {
-        mousePress(buttons);
-        waitForIdle(DEFAULT_SPEED);
-        mouseRelease(buttons);
-        waitForIdle();
-    }
-
-    /**
-     * Clicks mouse button 1
-     *
-     * @throws  IllegalArgumentException if the {@code buttons} mask contains the mask for
-     *          extra mouse button and support for extended mouse buttons is
-     *          {@link Toolkit#areExtraMouseButtonsEnabled() disabled} by Java
-     * @throws  IllegalArgumentException if the {@code buttons} mask contains the mask for
-     *          extra mouse button that does not exist on the mouse and support for extended
-     *          mouse buttons is {@link Toolkit#areExtraMouseButtonsEnabled() enabled}
-     *          by Java
-     *
-     * @see     #click(int)
-     */
-    public void click() {
-        click(InputEvent.BUTTON1_DOWN_MASK);
-    }
-
-    /**
-     * Waits until all events currently on the event queue have been processed with given
-     * delay after syncing threads. It uses more advanced method of synchronizing threads
-     * unlike {@link java.awt.Robot#waitForIdle()}
-     *
-     * @param   delayValue  Additional delay length in milliseconds to wait until thread
-     *                      sync been completed
-     * @throws  sun.awt.SunToolkit.IllegalThreadException if called on the AWT event
-     *          dispatching thread
-     */
-    public synchronized void waitForIdle(int delayValue) {
-        super.waitForIdle();
-        delay(delayValue);
-    }
-
-    /**
-     * Waits until all events currently on the event queue have been processed with delay
-     * {@link #getSyncDelay()} after syncing threads. It uses more advanced method of
-     * synchronizing threads unlike {@link java.awt.Robot#waitForIdle()}
-     *
-     * @throws  sun.awt.SunToolkit.IllegalThreadException if called on the AWT event
-     *          dispatching thread
-     *
-     * @see     #waitForIdle(int)
-     */
-    @Override
-    public synchronized void waitForIdle() {
-        waitForIdle(syncDelay);
-    }
-
-    /**
-     * Move the mouse in multiple steps from where it is
-     * now to the destination coordinates.
-     *
-     * @param   x   Destination point x coordinate
-     * @param   y   Destination point y coordinate
-     *
-     * @see     #glide(int, int, int, int)
-     */
-    public void glide(int x, int y) {
-        Point p = MouseInfo.getPointerInfo().getLocation();
-        glide(p.x, p.y, x, y);
-    }
-
-    /**
-     * Move the mouse in multiple steps from where it is
-     * now to the destination point.
-     *
-     * @param   dest    Destination point
-     *
-     * @see     #glide(int, int)
-     */
-    public void glide(Point dest) {
-        glide(dest.x, dest.y);
-    }
-
-    /**
-     * Move the mouse in multiple steps from source coordinates
-     * to the destination coordinates.
-     *
-     * @param   fromX   Source point x coordinate
-     * @param   fromY   Source point y coordinate
-     * @param   toX     Destination point x coordinate
-     * @param   toY     Destination point y coordinate
-     *
-     * @see     #glide(int, int, int, int, int, int)
-     */
-    public void glide(int fromX, int fromY, int toX, int toY) {
-        glide(fromX, fromY, toX, toY, DEFAULT_STEP_LENGTH, DEFAULT_SPEED);
-    }
-
-    /**
-     * Move the mouse in multiple steps from source point to the
-     * destination point with default speed and step length.
-     *
-     * @param   src     Source point
-     * @param   dest    Destination point
-     *
-     * @see     #glide(int, int, int, int, int, int)
-     */
-    public void glide(Point src, Point dest) {
-        glide(src.x, src.y, dest.x, dest.y, DEFAULT_STEP_LENGTH, DEFAULT_SPEED);
-    }
-
-    /**
-     * Move the mouse in multiple steps from source point to the
-     * destination point with given speed and step length.
-     *
-     * @param   srcX        Source point x cordinate
-     * @param   srcY        Source point y cordinate
-     * @param   destX       Destination point x cordinate
-     * @param   destY       Destination point y cordinate
-     * @param   stepLength  Approximate length of one step
-     * @param   speed       Delay between steps.
-     *
-     * @see     #mouseMove(int, int)
-     * @see     #delay(int)
-     */
-     public void glide(int srcX, int srcY, int destX, int destY, int stepLength, int speed) {
-        int stepNum;
-        double tDx, tDy;
-        double dx, dy, ds;
-        double x, y;
-
-        dx = (destX - srcX);
-        dy = (destY - srcY);
-        ds = Math.sqrt(dx*dx + dy*dy);
-
-        tDx = dx / ds * stepLength;
-        tDy = dy / ds * stepLength;
-
-        int stepsCount = (int) ds / stepLength;
-
-        // Walk the mouse to the destination one step at a time
-        mouseMove(srcX, srcY);
-
-        for (x = srcX, y = srcY, stepNum = 0;
-             stepNum < stepsCount;
-             stepNum++) {
-            x += tDx;
-            y += tDy;
-            mouseMove((int)x, (int)y);
-            delay(speed);
-        }
-
-        // Ensure the mouse moves to the right destination.
-        // The steps may have led the mouse to a slightly wrong place.
-        mouseMove(destX, destY);
-    }
-
-    /**
-     * Moves mouse pointer to given screen coordinates.
-     *
-     * @param   position    Target position
-     *
-     * @see     java.awt.Robot#mouseMove(int, int)
-     */
-    public synchronized void mouseMove(Point position) {
-        mouseMove(position.x, position.y);
-    }
-
-
-    /**
-     * Emulate native drag and drop process using {@code InputEvent.BUTTON1_DOWN_MASK}.
-     * The method successively moves mouse cursor to point with coordinates
-     * ({@code fromX}, {@code fromY}), presses mouse button 1, drag mouse to
-     * point with coordinates ({@code toX}, {@code toY}) and releases mouse
-     * button 1 at last.
-     *
-     * @param   fromX   Source point x coordinate
-     * @param   fromY   Source point y coordinate
-     * @param   toX     Destination point x coordinate
-     * @param   toY     Destination point y coordinate
-     *
-     * @see     #mousePress(int)
-     * @see     #glide(int, int, int, int)
-     */
-    public void dragAndDrop(int fromX, int fromY, int toX, int toY){
-        mouseMove(fromX, fromY);
-        mousePress(InputEvent.BUTTON1_DOWN_MASK);
-        waitForIdle();
-        glide(toX, toY);
-        mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
-        waitForIdle();
-    }
-
-    /**
-     * Emulate native drag and drop process using {@code InputEvent.BUTTON1_DOWN_MASK}.
-     * The method successively moves mouse cursor to point {@code from},
-     * presses mouse button 1, drag mouse to point {@code to} and releases
-     * mouse button 1 at last.
-     *
-     * @param   from    Source point
-     * @param   to      Destination point
-     *
-     * @see     #mousePress(int)
-     * @see     #glide(int, int, int, int)
-     * @see     #dragAndDrop(int, int, int, int)
-     */
-    public void dragAndDrop(Point from, Point to){
-        dragAndDrop(from.x, from.y, to.x, to.y);
-    }
-
-    /**
-     * Successively presses and releases a given key.
-     * <p>
-     * Key codes that have more than one physical key associated with them
-     * (e.g. {@code KeyEvent.VK_SHIFT} could mean either the
-     * left or right shift key) will map to the left key.
-     *
-     * @param   keycode Key to press (e.g. {@code KeyEvent.VK_A})
-     * @throws  IllegalArgumentException if {@code keycode} is not
-     *          a valid key
-     *
-     * @see     java.awt.Robot#keyPress(int)
-     * @see     java.awt.Robot#keyRelease(int)
-     * @see     java.awt.event.KeyEvent
-     */
-    public void type(int keycode) {
-        keyPress(keycode);
-        waitForIdle(DEFAULT_SPEED);
-        keyRelease(keycode);
-        waitForIdle(DEFAULT_SPEED);
-    }
-
-    /**
-     * Types given character
-     *
-     * @param   c   Character to be typed (e.g. {@code 'a'})
-     *
-     * @see     #type(int)
-     * @see     java.awt.event.KeyEvent
-     */
-    public void type(char c) {
-        type(KeyEvent.getExtendedKeyCodeForChar(c));
-    }
-
-    /**
-     * Types given array of characters one by one
-     *
-     * @param   symbols Array of characters to be typed
-     *
-     * @see     #type(char)
-     */
-    public void type(char[] symbols) {
-        for (int i = 0; i < symbols.length; i++) {
-            type(symbols[i]);
-        }
-    }
-
-    /**
-     * Types given string
-     *
-     * @param   s   String to be typed
-     *
-     * @see     #type(char[])
-     */
-    public void type(String s) {
-        type(s.toCharArray());
-    }
-}
--- a/test/jdk/lib/testlibrary/jdk/testlibrary/OptimalCapacity.java	Mon Nov 26 19:05:55 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,240 +0,0 @@
-/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.testlibrary;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.IdentityHashMap;
-
-/**
- * Utility functions to check that the static storages are pre-sized
- * optimally.
- */
-public final class OptimalCapacity {
-
-    private OptimalCapacity() {}
-
-    /**
-     * Checks adequacy of the initial capacity of a static field
-     * of type {@code ArrayList}.
-     *
-     * Having
-     * <pre>
-     * class XClass {
-     *     static ArrayList theList = new ArrayList(N);
-     * }
-     * </pre>
-     *
-     * you should call from the test
-     *
-     * <pre>
-     * OptimalCapacity.assertProperlySized(XClass.class, "theList", N);
-     * </pre>
-     */
-    public static void ofArrayList(Class<?> clazz, String fieldName,
-            int initialCapacity)
-    {
-        try {
-            Field field = clazz.getDeclaredField(fieldName);
-            field.setAccessible(true);
-            Object obj = field.get(null);
-            if (!ArrayList.class.equals(obj.getClass())) {
-                throw new RuntimeException("'" + field +
-                    "' expected to be of type ArrayList");
-            }
-            ArrayList<?> list = (ArrayList<?>)obj;
-
-            // For ArrayList the optimal capacity is its final size
-            if (list.size() != initialCapacity) {
-                throw new RuntimeException("Size of '" + field +
-                    "' is " + list.size() +
-                    ", but expected to be " + initialCapacity);
-            }
-            if (internalArraySize(list) != initialCapacity) {
-                throw new RuntimeException("Capacity of '" + field +
-                    "' is " + internalArraySize(list) +
-                    ", but expected to be " + initialCapacity);
-            }
-        } catch (ReflectiveOperationException roe) {
-            throw new RuntimeException(roe);
-        }
-    }
-
-    /**
-     * Checks adequacy of the initial capacity of a static field
-     * of type {@code HashMap}.
-     *
-     * Having
-     * <pre>
-     * class XClass {
-     *     static HashMap theMap = new HashMap(N);
-     * }
-     * </pre>
-     *
-     * you should call from the test
-     *
-     * <pre>
-     * OptimalCapacity.ofHashMap(XClass.class, "theMap", N);
-     * </pre>
-     */
-    public static void ofHashMap(Class<?> clazz, String fieldName,
-            int initialCapacity)
-    {
-        ofHashMap(clazz, null, fieldName, initialCapacity);
-    }
-
-    /**
-     * Checks adequacy of the initial capacity of a non-static field
-     * of type {@code HashMap}.
-     *
-     * Having
-     * <pre>
-     * class XClass {
-     *     HashMap theMap = new HashMap(N);
-     * }
-     * XClass instance = ...
-     * </pre>
-     *
-     * you should call from the test
-     *
-     * <pre>
-     * OptimalCapacity.ofHashMap(XClass.class, instance, "theMap", N);
-     * </pre>
-     */
-    public static void ofHashMap(Class<?> clazz, Object instance,
-            String fieldName, int initialCapacity)
-    {
-        try {
-            Field field = clazz.getDeclaredField(fieldName);
-            field.setAccessible(true);
-            Object obj = field.get(instance);
-            if (!HashMap.class.equals(obj.getClass())) {
-                throw new RuntimeException(field +
-                    " expected to be of type HashMap");
-            }
-            HashMap<?,?> map = (HashMap<?,?>)obj;
-
-            // Check that the map allocates only necessary amount of space
-            HashMap<Object, Object> tmp = new HashMap<>(map);
-            if (internalArraySize(map) != internalArraySize(tmp)) {
-                throw new RuntimeException("Final capacity of '" + field +
-                    "' is " + internalArraySize(map) +
-                    ", which exceeds necessary minimum " + internalArraySize(tmp));
-            }
-
-            // Check that map is initially properly sized
-            tmp = new HashMap<>(initialCapacity);
-            tmp.put(new Object(), new Object()); // trigger storage init
-            if (internalArraySize(map) != internalArraySize(tmp)) {
-                throw new RuntimeException("Requested capacity of '" + field +
-                    "' was " + initialCapacity +
-                    ", which resulted in final capacity " + internalArraySize(tmp) +
-                    ", which differs from necessary minimum " + internalArraySize(map));
-            }
-
-        } catch (ReflectiveOperationException roe) {
-            throw new RuntimeException(roe);
-        }
-    }
-
-    /**
-     * Checks adequacy of the expected maximum size of a static field
-     * of type {@code IdentityHashMap}.
-     *
-     * Having
-     * <pre>
-     * class XClass {
-     *     static IdentityHashMap theMap = new IdentityHashMap(M);
-     * }
-     * </pre>
-     *
-     * you should call from the test
-     *
-     * <pre>
-     * OptimalCapacity.ofIdentityHashMap(XClass.class, "theMap", M);
-     * </pre>
-     */
-    public static void ofIdentityHashMap(Class<?> clazz, String fieldName,
-            int expectedMaxSize)
-    {
-        try {
-            Field field = clazz.getDeclaredField(fieldName);
-            field.setAccessible(true);
-            Object obj = field.get(null);
-            if (!IdentityHashMap.class.equals(obj.getClass())) {
-                throw new RuntimeException("'" + field +
-                    "' expected to be of type IdentityHashMap");
-            }
-            IdentityHashMap<?,?> map = (IdentityHashMap<?,?>)obj;
-
-            // Check that size of map is what was expected
-            if (map.size() != expectedMaxSize) {
-                throw new RuntimeException("Size of '" + field +
-                    "' is " + map.size() +
-                    ", which differs from expected " + expectedMaxSize);
-            }
-
-            // Check that the map allocated only necessary amount of memory
-            IdentityHashMap<Object, Object> tmp = new IdentityHashMap<>(map);
-            if (internalArraySize(map) != internalArraySize(tmp)) {
-                throw new RuntimeException("Final capacity of '" + field +
-                    "' is " + internalArraySize(map) +
-                    ", which exceeds necessary minimum " + internalArraySize(tmp));
-            }
-
-            // Check that map was initially properly sized
-            tmp = new IdentityHashMap<>(expectedMaxSize);
-            tmp.put(new Object(), new Object()); // trigger storage init
-            if (internalArraySize(map) != internalArraySize(tmp)) {
-                throw new RuntimeException("Requested number of elements in '" + field +
-                    "' was " + expectedMaxSize +
-                    ", which resulted in final capacity " + internalArraySize(tmp) +
-                    ", which differs from necessary minimum " + internalArraySize(map));
-            }
-        } catch (ReflectiveOperationException roe) {
-            throw new RuntimeException(roe);
-        }
-    }
-
-    /**
-     * Returns size of the internal storage.
-     */
-    private static int internalArraySize(Object container)
-            throws ReflectiveOperationException {
-        Field field;
-        if (ArrayList.class.equals(container.getClass())) {
-            field = ArrayList.class.getDeclaredField("elementData");
-        } else if (HashMap.class.equals(container.getClass())) {
-            field = HashMap.class.getDeclaredField("table");
-        } else if (IdentityHashMap.class.equals(container.getClass())) {
-            field = IdentityHashMap.class.getDeclaredField("table");
-        } else {
-            throw new RuntimeException("Unexpected class " +
-                    container.getClass());
-        }
-        field.setAccessible(true);
-        return ((Object[])field.get(container)).length;
-    }
-}
--- a/test/jdk/sanity/client/SwingSet/src/FileChooserDemoTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/sanity/client/SwingSet/src/FileChooserDemoTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -40,19 +40,26 @@
 import static com.sun.swingset3.demos.filechooser.FileChooserDemo.getLastAppliedFilterId;
 import static com.sun.swingset3.demos.filechooser.FileChooserDemo.getRotateLeftCount;
 import static com.sun.swingset3.demos.filechooser.FileChooserDemo.getRotateRightCount;
+
 import java.awt.Container;
+import java.awt.event.KeyEvent;
 import java.io.File;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import org.testng.annotations.Test;
+import javax.swing.UIManager;
+
 import org.netbeans.jemmy.ClassReference;
 import org.netbeans.jemmy.operators.JFrameOperator;
+import org.netbeans.jemmy.operators.JPopupMenuOperator;
+import org.netbeans.jemmy.operators.JRadioButtonMenuItemOperator;
 import org.netbeans.jemmy.operators.JButtonOperator;
 import org.netbeans.jemmy.operators.JComboBoxOperator;
 import org.netbeans.jemmy.operators.JToggleButtonOperator;
 import org.netbeans.jemmy.operators.JFileChooserOperator;
 import org.netbeans.jemmy.operators.JDialogOperator;
+import org.netbeans.jemmy.operators.JComponentOperator.JComponentByTipFinder;
 import org.netbeans.jemmy.util.Platform;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Listeners;
@@ -72,7 +79,7 @@
  *          java.logging
  * @build org.jemmy2ext.JemmyExt
  * @build com.sun.swingset3.demos.filechooser.FileChooserDemo
- * @run testng FileChooserDemoTest
+ * @run testng/timeout=600 FileChooserDemoTest
  */
 @Listeners(GuiTestListener.class)
 public class FileChooserDemoTest {
@@ -83,8 +90,8 @@
     public static final String IMAGE = "duke.jpg";
     private static final String YES = "Yes";
     private static final String NO = "No";
-    private static final String SCRATCH = "scratch";
     private static final String OPEN = "Open";
+    private static final String OK = "OK";
     private static final String CANCEL = "Cancel";
     private static final String USER_HOME = "user.home";
     private static final String DESKTOP = "Desktop";
@@ -116,8 +123,9 @@
         Files.copy(IMAGE_DIR.resolve(IMAGE), TEST_WORK_DIR.resolve(IMAGE));
     }
 
-    @Test
-    public void test() throws Exception {
+    @Test(dataProvider = "availableLookAndFeels", dataProviderClass = TestHelpers.class)
+    public void test(String lookAndFeel) throws Exception {
+        UIManager.setLookAndFeel(lookAndFeel);
         new ClassReference(FileChooserDemo.class.getCanonicalName()).startApplication();
         frame = new JFrameOperator(DEMO_TITLE);
         initializeSelectImageButtons();
@@ -131,13 +139,15 @@
     private void checkSelectImage() throws Exception {
         selectImageButton.push();
         fileChooser = new JFileChooserOperator(JFileChooserOperator.findJFileChooser((Container) frame.getSource()));
-        // In Mac, JFileChooser does not have "Go Home","Up One Level","Get Details","Get List" buttons.
-        if (!Platform.isOSX()) {
-            initializeFileChooserButtons();
+        // In Aqua, GTK and Motif L&Fs, JFileChooser does not have
+        // "Go Home", "Up One Level", "Get Details", "Get List" buttons.
+        if (!UIManager.getLookAndFeel().getID().equals("Aqua")
+                && !UIManager.getLookAndFeel().getID().equals("Motif")
+                && !UIManager.getLookAndFeel().getID().equals("GTK")) {
             File previousDirectory = fileChooser.getCurrentDirectory();
             fileChooser.goHome();
             // In Windows, pressing goHome navigates to Desktop inside the home directory.
-            // This seems to be the expected behavior for windows.
+            // This is the expected behavior for windows.
             if (!Platform.isWindows()) {
                 waitCurrentPath(Paths.get(System.getProperty(USER_HOME)));
             } else {
@@ -145,15 +155,32 @@
             }
             fileChooser.setCurrentDirectory(previousDirectory);
             fileChooser.rescanCurrentDirectory();
-            upLevelButton.push();
-            waitCurrentPath(previousDirectory.getParentFile().toPath());
-            fileChooser.enterSubDir(SCRATCH);
-            getListToggleButton.push();
-            getListToggleButton.waitSelected(true);
-            getDetailsToggleButton.push();
-            getDetailsToggleButton.waitSelected(true);
-            getListToggleButton.push();
-            fileChooser.rescanCurrentDirectory();
+            // In Windows and Windows Classic L&F, List and Details views are
+            // implemented as a popup menu item
+            if(UIManager.getLookAndFeel().getID().equals("Windows")) {
+                JButtonOperator popupButton = new JButtonOperator(fileChooser, new JComponentByTipFinder(
+                        UIManager.getString("FileChooser.viewMenuButtonToolTipText", fileChooser.getLocale())));
+                popupButton.push();
+                JPopupMenuOperator popup = new JPopupMenuOperator();
+                popup.pushKey(KeyEvent.VK_ENTER);
+                JRadioButtonMenuItemOperator detailsMenuItem = new JRadioButtonMenuItemOperator(popup, 1);
+                detailsMenuItem.push();
+                detailsMenuItem.waitSelected(true);
+                popupButton.push();
+                JRadioButtonMenuItemOperator listMenuItem = new JRadioButtonMenuItemOperator(popup);
+                listMenuItem.push();
+                listMenuItem.waitSelected(true);
+            } else {
+                initializeFileChooserButtons();
+                upLevelButton.push();
+                waitCurrentPath(previousDirectory.getParentFile().toPath());
+                fileChooser.setCurrentDirectory(previousDirectory);
+                fileChooser.rescanCurrentDirectory();
+                getDetailsToggleButton.push();
+                getDetailsToggleButton.waitSelected(true);
+                getListToggleButton.push();
+                getListToggleButton.waitSelected(true);
+            }
             // Wait for the count of number of files to be 1
             fileChooser.waitFileCount(1);
             fileChooser.selectFile(IMAGE);
@@ -245,7 +272,13 @@
     private void initializeSelectWithPreviewDialog() {
         fileChooser = new JFileChooserOperator();
         fileChooserDialog = new JDialogOperator(OPEN);
-        openButton = new JButtonOperator(fileChooser, OPEN);
+        String openButtonText = OPEN;
+        // In GTK and Motif L&F, open button text is 'OK'
+        if (UIManager.getLookAndFeel().getID().equals("Motif")
+                || UIManager.getLookAndFeel().getID().equals("GTK")) {
+            openButtonText = OK;
+        }
+        openButton = new JButtonOperator(fileChooser, openButtonText);
         cancelButton = new JButtonOperator(fileChooser, CANCEL);
     }
 
@@ -281,9 +314,9 @@
     }
 
     private void waitCurrentPath(Path expectedPath) {
-        Path currentPath = fileChooser.getCurrentDirectory().toPath();
         //Wait for the current path to be same as expected path
-        fileChooser.waitState(chooser -> currentPath.equals(expectedPath));
+        fileChooser.waitState(chooser -> fileChooser.getCurrentDirectory().toPath().equals(expectedPath));
     }
 
 }
+
--- a/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/operators/JFileChooserOperator.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/operators/JFileChooserOperator.java	Mon Dec 03 10:08:18 2018 +0100
@@ -43,6 +43,7 @@
 import javax.swing.JTextField;
 import javax.swing.JToggleButton;
 import javax.swing.ListModel;
+import javax.swing.UIManager;
 import javax.swing.filechooser.FileFilter;
 import javax.swing.filechooser.FileSystemView;
 import javax.swing.filechooser.FileView;
@@ -340,6 +341,13 @@
      * @return a component being used to display directory content.
      */
     public Component getFileList() {
+        int index = 0;
+        // In GTK and Motif L&F, there are two JLists, one is to list folders
+        // and second one one is to list files
+        if (UIManager.getLookAndFeel().getID().equals("Motif")
+                || UIManager.getLookAndFeel().getID().equals("GTK")) {
+            index =1;
+        }
         return innerSearcher.
                 findComponent(new ComponentChooser() {
                     @Override
@@ -357,7 +365,7 @@
                     public String toString() {
                         return "JFileChooserOperator.getFileList.ComponentChooser{description = " + getDescription() + '}';
                     }
-                });
+                }, index);
     }
 
     /**
@@ -433,7 +441,15 @@
         getQueueTool().waitEmpty();
         output.printTrace("Go home in JFileChooser\n    : "
                 + toStringSource());
-        JButtonOperator homeOper = new JButtonOperator(getHomeButton());
+        AbstractButtonOperator homeOper;
+        // In Windows and Windows Classic L&F, there is no 'Go Home' button,
+        // but there is a toggle button to go desktop. In Windows platform
+        // 'Go Home' button usually navigates to Desktop only.
+        if(UIManager.getLookAndFeel().getID().equals("Windows")) {
+            homeOper =new JToggleButtonOperator(this, 1);
+        } else {
+            homeOper = new JButtonOperator(getHomeButton());
+        }
         homeOper.copyEnvironment(this);
         homeOper.setOutput(output.createErrorOutput());
         homeOper.push();
--- a/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/version_info	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/version_info	Mon Dec 03 10:08:18 2018 +0100
@@ -1,6 +1,6 @@
 Manifest-version: 1.0
 Main-Class: org.netbeans.jemmy.JemmyProperties
 Jemmy-MajorVersion: 3.0
-Jemmy-MinorVersion: 5.0
+Jemmy-MinorVersion: 6.0
 Jemmy-Build: @BUILD_NUMBER@
 
--- a/test/jdk/sun/management/jmxremote/bootstrap/PasswordFilePermissionTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/sun/management/jmxremote/bootstrap/PasswordFilePermissionTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,9 +29,9 @@
  * @summary Check SSL config file permission for out-of-the-box management
  * @author Taras Ledkov
  *
- * @library /lib/testlibrary /test/lib
+ * @library /test/lib
  *
- * @build jdk.testlibrary.* jdk.test.lib.Platform AbstractFilePermissionTest Dummy
+ * @build jdk.test.lib.Platform AbstractFilePermissionTest Dummy
  * @run main/timeout=300 PasswordFilePermissionTest
  */
 public class PasswordFilePermissionTest extends AbstractFilePermissionTest {
--- a/test/jdk/sun/management/jmxremote/bootstrap/SSLConfigFilePermissionTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/sun/management/jmxremote/bootstrap/SSLConfigFilePermissionTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -29,9 +29,9 @@
  * @summary Check SSL config file permission for out-of-the-box management
  * @author Taras Ledkov
  *
- * @library /lib/testlibrary /test/lib
+ * @library /test/lib
  *
- * @build jdk.testlibrary.* jdk.test.lib.Platform Dummy AbstractFilePermissionTest
+ * @build jdk.test.lib.Platform Dummy AbstractFilePermissionTest
  * @run main/timeout=300 SSLConfigFilePermissionTest
  */
 public class SSLConfigFilePermissionTest extends AbstractFilePermissionTest {
--- a/test/jdk/sun/management/jmxremote/startstop/JMXStatusPerfCountersTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/sun/management/jmxremote/startstop/JMXStatusPerfCountersTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -42,10 +42,9 @@
  * @summary Makes sure that the current management agent status is reflected
  *          in the related performance counters.
  *
- * @library /lib/testlibrary
  * @library /test/lib
  *
- * @build jdk.testlibrary.* PortAllocator TestApp ManagementAgentJcmd
+ * @build PortAllocator TestApp ManagementAgentJcmd
  * @run testng/othervm -XX:+UsePerfData JMXStatusPerfCountersTest
  */
 public class JMXStatusPerfCountersTest {
--- a/test/jdk/sun/management/jmxremote/startstop/JMXStatusTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/sun/management/jmxremote/startstop/JMXStatusTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -38,10 +38,9 @@
  *          Management agent may be disabled, started (only local connections) and started.
  *          The test asserts that the expected text is being printed.
  *
- * @library /lib/testlibrary
  * @library /test/lib
  *
- * @build jdk.testlibrary.* PortAllocator TestApp ManagementAgentJcmd
+ * @build PortAllocator TestApp ManagementAgentJcmd
  *        JMXStatusTest JMXStatus1Test JMXStatus2Test
  * @run testng/othervm -XX:+UsePerfData JMXStatus1Test
  * @run testng/othervm -XX:+UsePerfData JMXStatus2Test
--- a/test/jdk/sun/nio/cs/TestIBMBugs.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/sun/nio/cs/TestIBMBugs.java	Mon Dec 03 10:08:18 2018 +0100
@@ -174,6 +174,19 @@
         }
     }
 
+    private static void bug8213618 () throws Exception {
+        String cs = "x-IBM970";
+        byte[] ba = new byte[]{(byte)0xA2,(byte)0xC1};
+        String s = "\u25C9";
+        if (!(new String(ba, cs)).equals(s))
+            throw new Exception("Cp970 failed");
+        if (!Arrays.equals(ba, s.getBytes(cs)))
+            throw new Exception("Cp970 failed");
+        ba = new byte[]{0x3f,0x3f,0x3f};
+        if (!Arrays.equals(ba, "\u6950\u84f1\ucf7f".getBytes(cs)))
+            throw new Exception("Cp970 failed");
+    }
+
     private static void bug8202329() throws Exception {
         String original = "\\\u007E\u00A5\u203E"; // [backslash][tilde][yen][overscore]
         byte[] expectedBytes; // bytes after conversion
@@ -232,5 +245,6 @@
         bug6371431();
         bug6569191();
         bug8202329();
+        bug8213618();
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/ssl/SSLSessionContextImpl/DefautlCacheSize.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2018, 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 8210985
+ * @summary Update the default SSL session cache size to 20480
+ * @run main/othervm DefautlCacheSize
+ */
+
+// The SunJSSE provider cannot use System Properties in samevm/agentvm mode.
+// Please run JSSE test in othervm mode.
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSessionContext;
+
+public class DefautlCacheSize {
+
+    public static void main(String[] args) throws Exception {
+        SSLServerSocketFactory sssf =
+                (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
+
+        try (SSLServerSocket serverSocket =
+                    (SSLServerSocket)sssf.createServerSocket()) {
+
+            String[] protocols = serverSocket.getSupportedProtocols();
+            for (int i = 0; i < protocols.length; i++) {
+                if (protocols[i].equals("SSLv2Hello")) {
+                    continue;
+                }
+                SSLContext sslContext = SSLContext.getInstance(protocols[i]);
+                SSLSessionContext sessionContext =
+                        sslContext.getServerSessionContext();
+                if (sessionContext.getSessionCacheSize() == 0) {
+                    throw new Exception(
+                        "the default server session cache size is infinite");
+                }
+
+                sessionContext = sslContext.getClientSessionContext();
+                if (sessionContext.getSessionCacheSize() == 0) {
+                    throw new Exception(
+                        "the default client session cache size is infinite");
+                }
+            }
+        }
+    }
+}
--- a/test/jdk/sun/security/tools/keytool/DeprecateKeyalg.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/sun/security/tools/keytool/DeprecateKeyalg.java	Mon Dec 03 10:08:18 2018 +0100
@@ -26,7 +26,7 @@
 
 /**
  * @test
- * @bug 8212003
+ * @bug 8212003 8214179
  * @summary Deprecating the default keytool -keyalg option
  * @library /test/lib
  */
@@ -55,6 +55,15 @@
                 .shouldContain("Generated")
                 .shouldContain("default key algorithm (DES)")
                 .shouldContain("-keyalg option must be specified");
+
+        kt("-genkeypair -alias e -dname CN=e -keyalg EC -groupname brainpoolP256r1")
+                .shouldContain("Generating 256 bit EC (brainpoolP256r1) key pair");
+
+        kt("-genkeypair -alias f -dname CN=f -keyalg EC")
+                .shouldContain("Generating 256 bit EC (secp256r1) key pair");
+
+        kt("-genkeypair -alias g -dname CN=g -keyalg EC -keysize 384")
+                .shouldContain("Generating 384 bit EC (secp384r1) key pair");
     }
 
     private static OutputAnalyzer kt(String cmd) throws Throwable {
--- a/test/jdk/sun/security/tools/keytool/GroupName.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/sun/security/tools/keytool/GroupName.java	Mon Dec 03 10:08:18 2018 +0100
@@ -31,7 +31,7 @@
 
 /**
  * @test
- * @bug 8213400
+ * @bug 8213400 8214179
  * @summary Support choosing group name in keytool keypair generation
  * @library /test/lib
  */
@@ -69,6 +69,10 @@
                 .shouldHaveExitValue(0)
                 .shouldNotContain("Specifying -keysize for generating EC keys is deprecated");
         checkCurveName("f", "brainpoolP256r1");
+
+        kt("-list -v")
+                .shouldHaveExitValue(0)
+                .shouldContain("Subject Public Key Algorithm: 256-bit EC (secp256r1) key");
     }
 
     private static void checkCurveName(String a, String name)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/tools/keytool/ProbingFailure.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,258 @@
+/*
+ * Copyright (c) 2018, 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 8214100
+ * @summary use of keystore probing results in unnecessary exception thrown
+ * @library /test/lib
+ * @compile -XDignore.symbol.file ProbingFailure.java
+ * @run main ProbingFailure
+ */
+
+import jdk.test.lib.SecurityTools;
+import jdk.test.lib.process.OutputAnalyzer;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.Key;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.KeyStoreSpi;
+import java.security.NoSuchAlgorithmException;
+import java.security.Provider;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.util.Date;
+import java.util.Enumeration;
+
+public class ProbingFailure {
+
+    public static void main(String[] args) throws Exception {
+
+        // genkeypair
+        kt("-genkeypair -keystore mks -alias a -dname CN=A -storetype MYKS")
+                .shouldHaveExitValue(0);
+
+        // list
+        kt("-list -keystore mks -storetype MYKS")
+                .shouldHaveExitValue(0);
+
+        kt("-list -keystore mks")
+                .shouldHaveExitValue(1)
+                .shouldContain("This keystore does not support probing");
+
+        // importkeystore
+        kt("-importkeystore -srckeystore mks -srcstoretype MYKS -destkeystore p12")
+                .shouldHaveExitValue(0);
+
+        kt("-importkeystore -srckeystore mks -destkeystore p12a")
+                .shouldHaveExitValue(1)
+                .shouldContain("This keystore does not support probing");
+
+        // in-place importkeystore
+        kt("-importkeystore -srckeystore mks -srcstoretype MYKS -destkeystore mks -deststoretype myks")
+                .shouldContain("The original keystore \"mks\" is backed up")
+                .shouldHaveExitValue(0);
+
+        kt("-importkeystore -srckeystore mks -srcstoretype MYKS -destkeystore mks")
+                .shouldContain("Migrated \"mks\" to PKCS12")
+                .shouldHaveExitValue(0);
+
+        kt("-importkeystore -srckeystore p12 -destkeystore p12 -deststoretype MYKS")
+                .shouldContain("Migrated \"p12\" to MYKS")
+                .shouldHaveExitValue(0);
+    }
+
+    static OutputAnalyzer kt(String cmd) throws Exception {
+        return SecurityTools.keytool(
+                "-storepass changeit -keypass changeit -debug "
+                + "-srcstorepass changeit -deststorepass changeit "
+                + "-providerclass ProbingFailure$MyProvider "
+                + "-providerpath " + System.getProperty("test.classes")
+                + " " + cmd);
+    }
+
+    public static class MyProvider extends Provider {
+        public MyProvider() {
+            super("MP", "1.0", "My Provider");
+            put("KeyStore.MYKS", "ProbingFailure$MyKS");
+        }
+    }
+
+    // The MYKS keystore prepends a zero byte before a PKCS12 file
+    // and does not support probing.
+    public static class MyKS extends KeyStoreSpi {
+
+        KeyStore ks;
+
+        public MyKS() {
+            try {
+                ks = KeyStore.getInstance("PKCS12");
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public Key engineGetKey(String alias, char[] password)
+                throws NoSuchAlgorithmException, UnrecoverableKeyException {
+            try {
+                return ks.getKey(alias, password);
+            } catch (KeyStoreException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public Certificate[] engineGetCertificateChain(String alias) {
+            try {
+                return ks.getCertificateChain(alias);
+            } catch (KeyStoreException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public Certificate engineGetCertificate(String alias) {
+            try {
+                return ks.getCertificate(alias);
+            } catch (KeyStoreException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public Date engineGetCreationDate(String alias) {
+            try {
+                return ks.getCreationDate(alias);
+            } catch (KeyStoreException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public void engineSetKeyEntry(String alias, Key key, char[] password,
+                Certificate[] chain) throws KeyStoreException {
+            ks.setKeyEntry(alias, key, password, chain);
+        }
+
+        @Override
+        public void engineSetKeyEntry(String alias, byte[] key,
+                Certificate[] chain) throws KeyStoreException {
+            ks.setKeyEntry(alias, key, chain);
+        }
+
+        @Override
+        public void engineSetCertificateEntry(String alias, Certificate cert)
+                throws KeyStoreException {
+            ks.setCertificateEntry(alias, cert);
+        }
+
+        @Override
+        public void engineDeleteEntry(String alias) throws KeyStoreException {
+            ks.deleteEntry(alias);
+        }
+
+        @Override
+        public Enumeration<String> engineAliases() {
+            try {
+                return ks.aliases();
+            } catch (KeyStoreException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public boolean engineContainsAlias(String alias) {
+            try {
+                return ks.containsAlias(alias);
+            } catch (KeyStoreException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public int engineSize() {
+            try {
+                return ks.size();
+            } catch (KeyStoreException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public boolean engineIsKeyEntry(String alias) {
+            try {
+                return ks.isKeyEntry(alias);
+            } catch (KeyStoreException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public boolean engineIsCertificateEntry(String alias) {
+            try {
+                return ks.isCertificateEntry(alias);
+            } catch (KeyStoreException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public String engineGetCertificateAlias(Certificate cert) {
+            try {
+                return ks.getCertificateAlias(cert);
+            } catch (KeyStoreException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public void engineStore(OutputStream stream, char[] password)
+                throws IOException, NoSuchAlgorithmException, CertificateException {
+            stream.write(0);
+            try {
+                ks.store(stream, password);
+            } catch (KeyStoreException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public void engineLoad(InputStream stream, char[] password)
+                throws IOException, NoSuchAlgorithmException, CertificateException {
+            if (stream != null) {
+                stream.read();
+            }
+            ks.load(stream, password);
+        }
+
+        @Override
+        public boolean engineProbe(InputStream stream) {
+            return false;
+        }
+    }
+}
--- a/test/jdk/tools/jar/modularJar/Basic.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/jdk/tools/jar/modularJar/Basic.java	Mon Dec 03 10:08:18 2018 +0100
@@ -46,7 +46,7 @@
 
 /*
  * @test
- * @bug 8167328 8171830 8165640 8174248 8176772 8196748 8191533
+ * @bug 8167328 8171830 8165640 8174248 8176772 8196748 8191533 8210454
  * @library /test/lib
  * @modules jdk.compiler
  *          jdk.jartool
@@ -878,6 +878,50 @@
         }
     }
 
+    /**
+     * Validate that you can update a jar only specifying --module-version
+     * @throws IOException
+     */
+    @Test
+    public void updateFooModuleVersion() throws IOException {
+        Path mp = Paths.get("updateFooModuleVersion");
+        createTestDir(mp);
+        Path modClasses = MODULE_CLASSES.resolve(FOO.moduleName);
+        Path modularJar = mp.resolve(FOO.moduleName + ".jar");
+        String newFooVersion = "87.0";
+
+        jar("--create",
+            "--file=" + modularJar.toString(),
+            "--main-class=" + FOO.mainClass,
+            "--module-version=" + FOO.version,
+            "--no-manifest",
+            "-C", modClasses.toString(), ".")
+            .assertSuccess();
+
+        jarWithStdin(modularJar.toFile(), "--describe-module")
+                .assertSuccess()
+                .resultChecker(r ->
+                        assertTrue(r.output.contains(FOO.moduleName + "@" + FOO.version),
+                                "Expected to find ", FOO.moduleName + "@" + FOO.version,
+                                " in [", r.output, "]")
+                );
+
+        jar("--update",
+            "--file=" + modularJar.toString(),
+            "--module-version=" + newFooVersion)
+            .assertSuccess();
+
+        for (String option : new String[]  {"--describe-module", "-d" }) {
+            jarWithStdin(modularJar.toFile(),
+                         option)
+                         .assertSuccess()
+                         .resultChecker(r ->
+                             assertTrue(r.output.contains(FOO.moduleName + "@" + newFooVersion),
+                                "Expected to find ", FOO.moduleName + "@" + newFooVersion,
+                                " in [", r.output, "]")
+                );
+        }
+    }
 
     @DataProvider(name = "autoNames")
     public Object[][] autoNames() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/tools/launcher/JliLaunchTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2016, 2018, 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 8213362
+ * @comment Test JLI_Launch for tools distributed outside JDK
+ * @library /test/lib
+ * @run main/native JliLaunchTest
+ */
+
+import java.util.Map;
+import jdk.test.lib.Utils;
+import jdk.test.lib.Platform;
+import jdk.test.lib.process.OutputAnalyzer;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class JliLaunchTest {
+    public static void main(String[] args) throws IOException {
+        Path launcher = Paths.get(System.getProperty("test.nativepath"),
+            "JliLaunchTest" + (Platform.isWindows() ? ".exe" : ""));
+        System.out.println("Launcher = " + launcher + (Files.exists(launcher) ? " (exists)" : " (not exists)"));
+        ProcessBuilder pb = new ProcessBuilder(launcher.toString(), "--version");
+        Map<String, String> env = pb.environment();
+        if (Platform.isWindows()) {
+            // The DLL should be in JDK/bin
+        } else {
+            String libdir = Paths.get(Utils.TEST_JDK).resolve("lib").toAbsolutePath().toString();
+            String LD_LIBRARY_PATH = Platform.isOSX() ? "DYLD_LIBRARY_PATH" : "LD_LIBRARY_PATH";
+            env.compute(LD_LIBRARY_PATH, (k, v) -> (k == null) ? libdir : v + ":" + libdir);
+        }
+
+        OutputAnalyzer outputf = new OutputAnalyzer(pb.start());
+        outputf.shouldHaveExitValue(0);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/tools/launcher/exeJliLaunchTest.c	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+
+/*
+ * This file contains the main entry point into the launcher code
+ * this is the only file which will be repeatedly compiled by other
+ * tools. The rest of the files will be linked in.
+ */
+
+#include "java.h"
+
+int
+main(int argc, char **argv)
+{
+    return JLI_Launch(argc, argv,
+                   0, NULL,
+                   0, NULL,
+                   "1", "0",
+                   *argv, *argv,
+                   0, 0, 0, 0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/vm/JniInvocationTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2016, 2018, 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 8213362
+ * @comment Test uses custom launcher that starts VM using JNI via libjli, only for MacOS
+ * @requires os.family == "mac"
+ * @library /test/lib
+ * @run main/native JniInvocationTest
+ */
+
+import java.util.Map;
+import jdk.test.lib.Utils;
+import jdk.test.lib.process.OutputAnalyzer;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class JniInvocationTest {
+    public static void main(String[] args) throws IOException {
+        Path launcher = Paths.get(System.getProperty("test.nativepath"), "JniInvocationTest");
+        System.out.println("Launcher = " + launcher + (Files.exists(launcher) ? " (exists)" : " (not exists)"));
+        ProcessBuilder pb = new ProcessBuilder(launcher.toString());
+        Map<String, String> env = pb.environment();
+        String libdir = Paths.get(Utils.TEST_JDK).resolve("lib").toAbsolutePath().toString();
+        env.compute("DYLD_LIBRARY_PATH", (k, v) -> (k == null) ? libdir : v + ":" + libdir);
+        OutputAnalyzer outputf = new OutputAnalyzer(pb.start());
+        outputf.shouldHaveExitValue(0);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/vm/exeJniInvocationTest.c	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2018, 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.
+ *
+ */
+
+#include "jni.h"
+#include "stdio.h"
+#include "stdlib.h"
+
+int main(int argc, char** args) {
+    JavaVMInitArgs vm_args;
+    JNIEnv *env;
+    JavaVM *vm;
+    int i =0;
+    jint result;
+
+    vm_args.version = JNI_VERSION_1_2;
+    vm_args.ignoreUnrecognized = JNI_FALSE;
+
+    JavaVMOption option1[2];
+    option1[0].optionString="-XX:+PrintCommandLineFlags";
+    option1[1].optionString="-Xrs";
+
+    vm_args.options=option1;
+    vm_args.nOptions=2;
+
+    // Print the VM options in use
+    printf("initVM: numOptions = %d\n", vm_args.nOptions);
+    for (i = 0; i < vm_args.nOptions; i++)
+    {
+        printf("\tvm_args.options[%d].optionString = %s\n", i, vm_args.options[i].optionString);
+    }
+
+    // Initialize VM with given options
+    result = JNI_CreateJavaVM( &vm, (void **) &env, &vm_args );
+    if (result != 0) {
+        printf("ERROR: cannot create JAVA VM.\n");
+        exit(-1);
+    }
+
+    (*vm)->DestroyJavaVM(vm);
+}
+
--- a/test/langtools/jdk/javadoc/doclet/DocRootSlash/DocRootSlash.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/DocRootSlash/DocRootSlash.java	Mon Dec 03 10:08:18 2018 +0100
@@ -51,13 +51,12 @@
         // Directory that contains source files that javadoc runs on
         String srcdir = System.getProperty("test.src", ".");
 
-        setAutomaticCheckLinks(false); // @ignore JDK-8202621
 
         javadoc("-d", "out",
                 "-Xdoclint:none",
                 "-overview", (srcdir + "/overview.html"),
                 "--frames",
-                "-header", "<A HREF=\"{@docroot}/package-list\">{&#064;docroot}</A> <A HREF=\"{@docRoot}/help-doc\">{&#064;docRoot}</A>",
+                "-header", "<A HREF=\"{@docroot}/element-list\">{&#064;docroot}</A> <A HREF=\"{@docRoot}/help-doc.html\">{&#064;docRoot}</A>",
                 "-sourcepath", srcdir,
                 "p1", "p2");
 
@@ -69,8 +68,8 @@
         // Bug 4633447: Special test for overview-frame.html
         // Find two strings in file "overview-frame.html"
         checkOutput("overview-frame.html", true,
-                "<A HREF=\"./package-list\">",
-                "<A HREF=\"./help-doc\">");
+                "<A HREF=\"./element-list\">",
+                "<A HREF=\"./help-doc.html\">");
     }
 
     void checkFiles(String... filenameArray) {
@@ -81,7 +80,7 @@
             String fileString = readFile(f);
             System.out.println("\nSub-tests for file: " + f + " --------------");
             // Loop over all tests in a single file
-            for ( int j = 0; j < 11; j++ ) {
+            for ( int j = 0; j < 7; j++ ) {
 
                 // Compare actual to expected string for a single subtest
                 compareActualToExpected(++count, fileString);
@@ -107,9 +106,6 @@
      */
     private static final String prefix = "(?i)(<a\\s+href=";    // <a href=     (start group1)
     private static final String ref1   = "\")([^\"]*)(\".*?>)"; // doublequotes (end group1, group2, group3)
-    private static final String ref2   = ")(\\S+?)([^<>]*>)";   // no quotes    (end group1, group2, group3)
-    private static final String label  = "(.*?)";               // text label   (group4)
-    private static final String end    = "(</a>)";              // </a>         (group5)
 
     /**
      * Compares the actual string to the expected string in the specified string
--- a/test/langtools/jdk/javadoc/doclet/DocRootSlash/overview.html	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/DocRootSlash/overview.html	Mon Dec 03 10:08:18 2018 +0100
@@ -9,55 +9,33 @@
 
 Case 0 Actual: <A HREF=".">.</A> &nbsp; Current directory
 <p>
-Sub-test 23 Actual: <A HREF="{@docroot}">{&#064;docroot}</A> Bare tag - ALL LOWERCASE <br>
-Sub-test 23 Expect: <A HREF=""></A> <br>
-(Expect empty string because lowercase docroot is illegal) 
-<p>
-
-Sub-test 24 Actual: <A HREF="{@docRoot}">{&#064;docRoot}</A> Bare tag - "R" UPPERCASE <br>
-Sub-test 24 Expect: <A HREF=".">.</A>
+Sub-test 15 Actual: <A HREF="{@docroot}">{&#064;docroot}</A> Bare tag - ALL LOWERCASE <br>
+Sub-test 15 Expect: <A HREF=""></A> <br>
+(Expect empty string because lowercase docroot is illegal)
 <p>
 
-Sub-test 25 Actual: <A HREF="{@docRoot}/package-list">{&#064;docRoot}/package-list</A>  <br>
-Sub-test 25 Expect: <A HREF="./package-list">./package-list</A>
+Sub-test 16 Actual: <A HREF="{@docRoot}">{&#064;docRoot}</A> Bare tag - "R" UPPERCASE <br>
+Sub-test 16 Expect: <A HREF=".">.</A>
 <p>
 
-Sub-test 26 Actual: <A HREF="{@docRoot}/p2/C2.html">{&#064;docRoot}/p2/C2.html</A>  <br>
-Sub-test 26 Expect: <A HREF="./p2/C2.html">./p2/C2.html</A>
-<p>
-
-Sub-test 27 Actual: <A HREF="{@docRoot}/../docs1/p2/C2.html">{&#064;docRoot}/../docs1/p2/C2.html</A> <br>
-Sub-test 27 Expect: <A HREF="./../docs1/p2/C2.html">./../docs1/p2/C2.html</A>
-<p>
-
-Sub-test 28 Actual: <A HREF="{@docRoot}/p2/package-summary.html#package_description">{&#064;docRoot}/p2/package-summary.html#package_description</A>  <br>
-Sub-test 28 Expect: <A HREF="./p2/package-summary.html#package_description">./p2/package-summary.html#package_description</A>
+Sub-test 17 Actual: <A HREF="{@docRoot}/element-list">{&#064;docRoot}/element-list</A>  <br>
+Sub-test 17 Expect: <A HREF="./element-list">./element-list</A>
 <p>
 
-Sub-test 29 Actual: <A HREF="{@docRoot}/../docs1/p2/package-summary.html#package_description">{&#064;docRoot}/../docs1/p2/package-summary.html#package_description</A> <br>
-Sub-test 29 Expect: <A HREF="./../docs1/p2/package-summary.html#package_description">./../docs1/p2/package-summary.html#package_description</A>
-<p>
-
-<!-- ============================================================== -->
-
-Allow docRoot to work without a trailing slash for those who had to change their comments
-to work with the 1.4.0 bug:
+Sub-test 18 Actual: <A HREF="{@docRoot}/p2/C2.html">{&#064;docRoot}/p2/C2.html</A>  <br>
+Sub-test 18 Expect: <A HREF="./p2/C2.html">./p2/C2.html</A>
 <p>
 
-Sub-test 30 Actual: <A HREF="{@docRoot}p2/C2.html">{&#064;docRoot}p2/C2.html</A>  <br>
-Sub-test 30 Expect: <A HREF=".p2/C2.html">./p2/C2.html</A>
+Sub-test 19 Actual: <A HREF="{@docRoot}/../out/p2/C2.html">{&#064;docRoot}/../out/p2/C2.html</A> <br>
+Sub-test 19 Expect: <A HREF="./../out/p2/C2.html">./../out/p2/C2.html</A>
 <p>
 
-Sub-test 31 Actual: <A HREF="{@docRoot}../docs1/p2/C2.html">{&#064;docRoot}../docs1/p2/C2.html</A> <br>
-Sub-test 31 Expect: <A HREF=".../docs1/p2/C2.html">./../docs1/p2/C2.html</A>
+Sub-test 20 Actual: <A HREF="{@docRoot}/p2/package-summary.html#package.description">{&#064;docRoot}/p2/package-summary.html#package.description</A>  <br>
+Sub-test 20 Expect: <A HREF="./p2/package-summary.html#package.description">./p2/package-summary.html#package.description</A>
 <p>
 
-Sub-test 32 Actual: <A HREF="{@docRoot}p2/package-summary.html#package_description">{&#064;docRoot}/p2/package-summary.html#package_description</A>  <br>
-Sub-test 32 Expect: <A HREF=".p2/package-summary.html#package_description">./p2/package-summary.html#package_description</A>
-
-<p>
-Sub-test 33 Actual: <A HREF="{@docRoot}../docs1/p2/package-summary.html#package_description">{&#064;docRoot}/../docs1/p2/package-summary.html#package_description</A> <br>
-Sub-test 33 Expect: <A HREF=".../docs1/p2/package-summary.html#package_description">./../docs1/p2/package-summary.html#package_description</A>
+Sub-test 21 Actual: <A HREF="{@docRoot}/../out/p2/package-summary.html#package.description">{&#064;docRoot}/../out/p2/package-summary.html#package.description</A> <br>
+Sub-test 21 Expect: <A HREF="./../out/p2/package-summary.html#package.description">./../out/p2/package-summary.html#package.description</A>
 
 </BODY>
 </HTML>
--- a/test/langtools/jdk/javadoc/doclet/DocRootSlash/p1/C1.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/DocRootSlash/p1/C1.java	Mon Dec 03 10:08:18 2018 +0100
@@ -39,46 +39,24 @@
  * Sub-test 2 Expect: <A HREF="..">..</A>
  * <p>
  *
- * Sub-test 3 Actual: <A HREF="{@docRoot}/package-list">{&#064;docRoot}/package-list</A> <br>
- * Sub-test 3 Expect: <A HREF="../package-list">../package-list</A>
+ * Sub-test 3 Actual: <A HREF="{@docRoot}/element-list">{&#064;docRoot}/element-list</A> <br>
+ * Sub-test 3 Expect: <A HREF="../element-list">../element-list</A>
  * <p>
  *
  * Sub-test 4 Actual: <A HREF="{@docRoot}/p2/C2.html">{&#064;docRoot}/p2/C2.html</A> <br>
  * Sub-test 4 Expect: <A HREF="../p2/C2.html">../p2/C2.html</A>
  * <p>
  *
- * Sub-test 5 Actual: <A HREF="{@docRoot}/../docs1/p2/C2.html">{&#064;docRoot}/../docs1/p2/C2.html</A> <br>
- * Sub-test 5 Expect: <A HREF="../../docs1/p2/C2.html">../../docs1/p2/C2.html</A>
- * <p>
- *
- * Sub-test 6 Actual: <A HREF="{@docRoot}/p2/package-summary.html#package_description">{&#064;docRoot}/p2/package-summary.html#package_description</A> <br>
- * Sub-test 6 Expect: <A HREF="../p2/package-summary.html#package_description">../p2/package-summary.html#package_description</A>
- * <p>
- *
- * Sub-test 7 Actual: <A HREF="{@docRoot}/../docs1/p2/package-summary.html#package_description">{&#064;docRoot}/../docs1/p2/package-summary.html#package_description</A> <br>
- * Sub-test 7 Expect: <A HREF="../../docs1/p2/package-summary.html#package_description">../../docs1/p2/package-summary.html#package_description</A>
+ * Sub-test 5 Actual: <A HREF="{@docRoot}/../out/p2/C2.html">{&#064;docRoot}/../out/p2/C2.html</A> <br>
+ * Sub-test 5 Expect: <A HREF="../../out/p2/C2.html">../../out/p2/C2.html</A>
  * <p>
  *
- * <!-- =================================================================== -->
- *
- * Allow docRoot to work without a trailing slash for those who had to change their comments
- * to work with the 1.4.0 bug:
- * <p>
- *
- * Sub-test 8 Actual: <A HREF="{@docRoot}p2/C2.html">{&#064;docRoot}p2/C2.html</A> <br>
- * Sub-test 8 Expect: <A HREF="..p2/C2.html">../p2/C2.html</A>
+ * Sub-test 6 Actual: <A HREF="{@docRoot}/p2/package-summary.html#package.description">{&#064;docRoot}/p2/package-summary.html#package.description</A> <br>
+ * Sub-test 6 Expect: <A HREF="../p2/package-summary.html#package.description">../p2/package-summary.html#package.description</A>
  * <p>
  *
- * Sub-test 9 Actual: <A HREF="{@docRoot}../docs1/p2/C2.html">{&#064;docRoot}../docs1/p2/C2.html</A> <br>
- * Sub-test 9 Expect: <A HREF="..../docs1/p2/C2.html">../../docs1/p2/C2.html</A>
- * <p>
- *
- * Sub-test 10 Actual: <A HREF="{@docRoot}p2/package-summary.html#package_description">{&#064;docRoot}/p2/package-summary.html#package_description</A> <br>
- * Sub-test 10 Expect: <A HREF="..p2/package-summary.html#package_description">../p2/package-summary.html#package_description#package_description</A>
- * <p>
- *
- * Sub-test 11 Actual: <A HREF="{@docRoot}../docs1/p2/package-summary.html#package_description">{&#064;docRoot}/../docs1/p2/package-summary.html#package_description</A> <br>
- * Sub-test 11 Expect: <A HREF="..../docs1/p2/package-summary.html#package_description">../../docs1/p2/package-summary.html#package_description</A>
+ * Sub-test 7 Actual: <A HREF="{@docRoot}/../out/p2/package-summary.html#package.description">{&#064;docRoot}/../out/p2/package-summary.html#package.description</A> <br>
+ * Sub-test 7 Expect: <A HREF="../../out/p2/package-summary.html#package.description">../../out/p2/package-summary.html#package.description</A>
  *
  */
 public class C1 {
--- a/test/langtools/jdk/javadoc/doclet/DocRootSlash/p1/package.html	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/DocRootSlash/p1/package.html	Mon Dec 03 10:08:18 2018 +0100
@@ -10,55 +10,33 @@
 Case 0 Actual: <A HREF=".">.</A> &nbsp; Current directory
 <p>
 
-Sub-test 12 Actual: <A HREF="{@docroot}">{&#064;docroot}</A> Bare tag - ALL LOWERCASE <br>
-Sub-test 12 Expect: <A HREF=""></A> <br>
+Sub-test 8 Actual: <A HREF="{@docroot}">{&#064;docroot}</A> Bare tag - ALL LOWERCASE <br>
+Sub-test 8 Expect: <A HREF=""></A> <br>
 (Expect empty string because lowercase docroot is illegal)
 <p>
 
-Sub-test 13 Actual: <A HREF="{@docRoot}">{&#064;docRoot}</A> Bare tag - "R" UPPERCASE <br>
-Sub-test 13 Expect: <A HREF="..">..</A>
-<p>
-
-Sub-test 14 Actual: <A HREF="{@docRoot}/package-list">{&#064;docRoot}/package-list</A> <br>
-Sub-test 14 Expect: <A HREF="../package-list">../package-list</A>
+Sub-test 9 Actual: <A HREF="{@docRoot}">{&#064;docRoot}</A> Bare tag - "R" UPPERCASE <br>
+Sub-test 9 Expect: <A HREF="..">..</A>
 <p>
 
-Sub-test 15 Actual: <A HREF="{@docRoot}/p2/C2.html">{&#064;docRoot}/p2/C2.html</A> <br>
-Sub-test 15 Expect: <A HREF="../p2/C2.html">../p2/C2.html</A>
-<p>
-
-Sub-test 16 Actual: <A HREF="{@docRoot}/../docs1/p2/C2.html">{&#064;docRoot}/../docs1/p2/C2.html</A> <br>
-Sub-test 16 Expect: <A HREF="../../docs1/p2/C2.html">../../docs1/p2/C2.html</A>
-<p>
-
-Sub-test 17 Actual: <A HREF="{@docRoot}/p2/package-summary.html#package_description">{&#064;docRoot}/p2/package-summary.html#package_description</A> <br>
-Sub-test 17 Expect: <A HREF="../p2/package-summary.html#package_description">../p2/package-summary.html#package_description</A>
+Sub-test 10 Actual: <A HREF="{@docRoot}/element-list">{&#064;docRoot}/element-list</A> <br>
+Sub-test 10 Expect: <A HREF="../element-list">../element-list</A>
 <p>
 
-Sub-test 18 Actual: <A HREF="{@docRoot}/../docs1/p2/package-summary.html#package_description">{&#064;docRoot}/../docs1/p2/package-summary.html#package_description</A> <br>
-Sub-test 18 Expect: <A HREF="../../docs1/p2/package-summary.html#package_description">../../docs1/p2/package-summary.html#package_description</A>
-<p>
-
-<!-- ================================================================== -->
-
-Allow docRoot to work without a trailing slash for those who had to change their comments
-to work with the 1.4.0 bug:
+Sub-test 11 Actual: <A HREF="{@docRoot}/p2/C2.html">{&#064;docRoot}/p2/C2.html</A> <br>
+Sub-test 11 Expect: <A HREF="../p2/C2.html">../p2/C2.html</A>
 <p>
 
-Sub-test 19 Actual: <A HREF="{@docRoot}p2/C2.html">{&#064;docRoot}p2/C2.html</A> <br>
-Sub-test 19 Expect: <A HREF="..p2/C2.html">../p2/C2.html</A>
+Sub-test 12 Actual: <A HREF="{@docRoot}/../out/p2/C2.html">{&#064;docRoot}/../out/p2/C2.html</A> <br>
+Sub-test 12 Expect: <A HREF="../../out/p2/C2.html">../../out/p2/C2.html</A>
 <p>
 
-Sub-test 20 Actual: <A HREF="{@docRoot}../docs1/p2/C2.html">{&#064;docRoot}../docs1/p2/C2.html</A> <br>
-Sub-test 20 Expect: <A HREF="..../docs1/p2/C2.html">../../docs1/p2/C2.html</A>
+Sub-test 13 Actual: <A HREF="{@docRoot}/p2/package-summary.html#package.description">{&#064;docRoot}/p2/package-summary.html#package.description</A> <br>
+Sub-test 13 Expect: <A HREF="../p2/package-summary.html#package.description">../p2/package-summary.html#package.description</A>
 <p>
 
-Sub-test 21 Actual: <A HREF="{@docRoot}p2/package-summary.html#package_description">{&#064;docRoot}/p2/package-summary.html#package_description</A><br>
-Sub-test 21 Expect: <A HREF="..p2/package-summary.html#package_description">../p2/package-summary.html#package_description</A>
-<p>
-
-Sub-test 22 Actual: <A HREF="{@docRoot}../docs1/p2/package-summary.html#package_description">{&#064;docRoot}/../docs1/p2/package-summary.html#package_description</A> <br>
-Sub-test 22 Expect: <A HREF="..../docs1/p2/package-summary.html#package_description">../../docs1/p2/package-summary.html#package_description</A>
+Sub-test 14 Actual: <A HREF="{@docRoot}/../out/p2/package-summary.html#package.description">{&#064;docRoot}/../out/p2/package-summary.html#package.description</A> <br>
+Sub-test 14 Expect: <A HREF="../../out/p2/package-summary.html#package.description">../../out/p2/package-summary.html#package.description</A>
 
 </BODY>
 </HTML>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/jdk/javadoc/doclet/testIndexInPackageFiles/TestIndexInPackageFiles.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2018, 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 8213957 8213958
+ * @summary Test use of at-index in package-iinfo and doc-files
+ * @library /tools/lib ../lib
+ * @modules jdk.javadoc/jdk.javadoc.internal.tool
+ * @build toolbox.ToolBox JavadocTester
+ * @run main TestIndexInPackageFiles
+ */
+
+import java.io.IOException;
+import java.nio.file.Path;
+import toolbox.ToolBox;
+
+public class TestIndexInPackageFiles extends JavadocTester {
+
+    public static void main(String... args) throws Exception {
+        TestIndexInPackageFiles  tester = new TestIndexInPackageFiles ();
+        tester.runTests();
+    }
+
+    ToolBox tb = new ToolBox();
+
+    @Test
+    public void test() throws IOException {
+        Path src = Path.of("src");
+        tb.writeJavaFiles(src,
+              "/**\n"
+            + " * Summary.\n"
+            + " * {@index test.name.1 additional info}\n"
+            + " * {@systemProperty test.property.1}\n"
+            + " */\n"
+            + "package p.q;",
+              "package p.q;\n"
+            + "/** This is a class in p.q. */\n"
+            + "public class C { }\n");
+
+        tb.writeFile(src.resolve("p/q/doc-files/extra.html"),
+            "<html><head><title>Extra</title></head><body>\n"
+            + "<h1>Extra</h1>\n"
+            + "{@index test.name.2 additional info}\n"
+            + "{@systemProperty test.property.2}\n"
+            + "</body></html>\n");
+
+        tb.writeFile("overview.html",
+            "<html><head><title>Overview</title></head><body>\n"
+            + "<h1>Overview</h1>\n"
+            + "{@index test.name.3 additional info}\n"
+            + "</body></html>\n");
+
+
+        javadoc("-d", "out",
+                "-sourcepath", src.toString(),
+                "-overview", "overview.html",
+                "p.q");
+
+        checkExit(Exit.OK);
+
+        // Note there is an implicit call to checkLinks, but that only
+        // checks the links are valid if they are actually present.
+        // Here, we specifically check for both ends of each link.
+        // However, we assume the search index files are generated appropriately,
+        // to match the A-Z index files checked here.
+
+        checkOutput("p/q/package-summary.html", true,
+            "<a id=\"test.name.1\" class=\"searchTagResult\">test.name.1</a>",
+            "<a id=\"test.property.1\" class=\"searchTagResult\">test.property.1</a>");
+
+        checkOutput("p/q/doc-files/extra.html", true,
+            "<a id=\"test.name.2\" class=\"searchTagResult\">test.name.2</a>",
+            "<a id=\"test.property.2\" class=\"searchTagResult\">test.property.2</a>");
+
+        checkOutput("index.html", true,
+            "<a id=\"test.name.3\" class=\"searchTagResult\">test.name.3</a>");
+
+        checkOutput("index-all.html", true,
+            "<span class=\"searchTagLink\"><a href=\"p/q/package-summary.html#test.name.1\">test.name.1</a></span>",
+            "<span class=\"searchTagLink\"><a href=\"p/q/doc-files/extra.html#test.name.2\">test.name.2</a></span>",
+            "<span class=\"searchTagLink\"><a href=\"index.html#test.name.3\">test.name.3</a></span> - Search tag in Overview</dt>",
+            "<span class=\"searchTagLink\"><a href=\"p/q/package-summary.html#test.property.1\">test.property.1</a></span>",
+            "<span class=\"searchTagLink\"><a href=\"p/q/doc-files/extra.html#test.property.2\">test.property.2</a></span>");
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/jdk/javadoc/doclet/testLinkOption/TestRedirectLinks.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,326 @@
+/*
+ * Copyright (c) 2002, 2018, 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 8190312
+ * @summary test redirected URLs for -link
+ * @library /tools/lib ../lib
+ * @modules jdk.compiler/com.sun.tools.javac.api
+ *          jdk.compiler/com.sun.tools.javac.main
+ *          jdk.javadoc/jdk.javadoc.internal.api
+ *          jdk.javadoc/jdk.javadoc.internal.tool
+ * @build toolbox.ToolBox toolbox.JavacTask JavadocTester
+ * @run main TestRedirectLinks
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.security.KeyStore;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManagerFactory;
+
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpServer;
+import com.sun.net.httpserver.HttpsConfigurator;
+import com.sun.net.httpserver.HttpsServer;
+
+import toolbox.JavacTask;
+import toolbox.ToolBox;
+
+
+public class TestRedirectLinks extends JavadocTester {
+    /**
+     * The entry point of the test.
+     * @param args the array of command line arguments.
+     */
+    public static void main(String... args) throws Exception {
+        TestRedirectLinks tester = new TestRedirectLinks();
+        tester.runTests();
+    }
+
+    private ToolBox tb = new ToolBox();
+
+    /*
+     * This test requires access to a URL that is redirected
+     * from http: to https:.
+     * For now, we use the main JDK API on docs.oracle.com.
+     * The test is skipped if access to the server is not available.
+     * (A better solution is to use a local testing web server.)
+     */
+    @Test
+    public void testRedirects() throws Exception {
+        // first, test to see if access to external URLs is available
+        URL testURL = new URL("http://docs.oracle.com/en/java/javase/11/docs/api/element-list");
+        boolean haveRedirectURL = false;
+        try {
+            URLConnection conn = testURL.openConnection();
+            conn.connect();
+            out.println("Opened connection to " + testURL);
+            if (conn instanceof HttpURLConnection) {
+                HttpURLConnection httpConn = (HttpURLConnection) conn;
+                int status = httpConn.getResponseCode();
+                if (status / 100 == 3) {
+                    haveRedirectURL = true;
+                }
+                out.println("Status: " + status);
+                int n = 0;
+                while (httpConn.getHeaderField(n) != null) {
+                    out.println("Header: " + httpConn.getHeaderFieldKey(n) + ": " + httpConn.getHeaderField(n));
+                    n++;
+                }
+            }
+        } catch (Exception e) {
+            out.println("Exception occurred: " + e);
+        }
+
+        if (!haveRedirectURL) {
+            out.println("Setup failed; this test skipped");
+            return;
+        }
+
+        String apiURL = "http://docs.oracle.com/en/java/javase/11/docs/api";
+        String outRedirect = "outRedirect";
+        javadoc("-d", outRedirect,
+                "-html4",
+                "-sourcepath", testSrc,
+                "-link", apiURL,
+                "pkg");
+        checkExit(Exit.OK);
+        checkOutput("pkg/B.html", true,
+                "<a href=\"" + apiURL + "/java.base/java/lang/String.html?is-external=true\" "
+                        + "title=\"class or interface in java.lang\" class=\"externalLink\">Link-Plain to String Class</a>");
+        checkOutput("pkg/C.html", true,
+                "<a href=\"" + apiURL + "/java.base/java/lang/Object.html?is-external=true\" "
+                        + "title=\"class or interface in java.lang\" class=\"externalLink\">Object</a>");
+    }
+
+    private Path libApi = Path.of("libApi");
+    private HttpServer oldServer = null;
+    private HttpsServer newServer = null;
+
+    /**
+     * This test verifies redirection using temporary localhost web servers,
+     * such that one server redirects to the other.
+     */
+    @Test
+    public void testWithServers() throws Exception {
+        // Set up a simple library
+        Path libSrc = Path.of("libSrc");
+        tb.writeJavaFiles(libSrc.resolve("mA"),
+                "module mA { exports p1; exports p2; }",
+                "package p1; public class C1 { }",
+                "package p2; public class C2 { }");
+        tb.writeJavaFiles(libSrc.resolve("mB"),
+                "module mB { exports p3; exports p4; }",
+                "package p3; public class C3 { }",
+                "package p4; public class C4 { }");
+
+        Path libModules = Path.of("libModules");
+        Files.createDirectories(libModules);
+
+        new JavacTask(tb)
+                .outdir(libModules)
+                .options("--module-source-path", libSrc.toString(),
+                        "--module", "mA,mB")
+                .run()
+                .writeAll();
+
+        javadoc("-d", libApi.toString(),
+                "--module-source-path", libSrc.toString(),
+                "--module", "mA,mB" );
+
+        // start web servers
+        InetAddress localHost = InetAddress.getLocalHost();
+        try {
+            oldServer = HttpServer.create(new InetSocketAddress(localHost, 0), 0);
+            String oldURL = "http:/" + oldServer.getAddress();
+            oldServer.createContext("/", this::handleOldRequest);
+            out.println("Starting old server (" + oldServer.getClass().getSimpleName() + ") on " + oldURL);
+            oldServer.start();
+
+            SSLContext sslContext = new SimpleSSLContext().get();
+            newServer = HttpsServer.create(new InetSocketAddress(localHost, 0), 0);
+            String newURL = "https:/" + newServer.getAddress();
+            newServer.setHttpsConfigurator(new HttpsConfigurator(sslContext));
+            newServer.createContext("/", this::handleNewRequest);
+            out.println("Starting new server (" + newServer.getClass().getSimpleName() + ") on " + newURL);
+            newServer.start();
+
+            // Set up API to use that library
+            Path src = Path.of("src");
+            tb.writeJavaFiles(src.resolve("mC"),
+                    "module mC { requires mA; requires mB; exports p5; exports p6; }",
+                    "package p5; public class C5 extends p1.C1 { }",
+                    "package p6; public class C6 { public p4.C4 c4; }");
+
+            // Set defaults for HttpsURLConfiguration for the duration of this
+            // invocation of javadoc to use our testing sslContext
+            HostnameVerifier prevHostNameVerifier = HttpsURLConnection.getDefaultHostnameVerifier();
+            SSLSocketFactory prevSSLSocketFactory = HttpsURLConnection.getDefaultSSLSocketFactory();
+            try {
+                HttpsURLConnection.setDefaultHostnameVerifier((hostName, session) -> true);
+                HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
+
+                javadoc("-d", "api",
+                        "--module-source-path", src.toString(),
+                        "--module-path", libModules.toString(),
+                        "-link", "http:/" + oldServer.getAddress(),
+                        "--module", "mC" );
+
+            } finally {
+                HttpsURLConnection.setDefaultHostnameVerifier(prevHostNameVerifier);
+                HttpsURLConnection.setDefaultSSLSocketFactory(prevSSLSocketFactory);
+            }
+
+            // Verify the following:
+            // 1: A warning about the redirection is generated.
+            // 2: The contents of the redirected link were read successfully,
+            //    identifying the remote API
+            // 3: The original URL is still used in the generated docs, to avoid assuming
+            //    that all the other files at that link have been redirected as well.
+            checkOutput(Output.OUT, true,
+                    "javadoc: warning - URL " + oldURL + "/element-list was redirected to " + newURL + "/element-list");
+            checkOutput("mC/p5/C5.html", true,
+                    "extends <a href=\"" + oldURL + "/mA/p1/C1.html?is-external=true\" " +
+                            "title=\"class or interface in p1\" class=\"externalLink\">C1</a>");
+            checkOutput("mC/p6/C6.html", true,
+                    "<a href=\"" + oldURL + "/mB/p4/C4.html?is-external=true\" " +
+                            "title=\"class or interface in p4\" class=\"externalLink\">C4</a>");
+        } finally {
+            if (oldServer != null) {
+                out.println("Stopping old server on " + oldServer.getAddress());
+                oldServer.stop(0);
+            }
+            if (newServer != null) {
+                out.println("Stopping new server on " + newServer.getAddress());
+                newServer.stop(0);
+            }
+        }
+    }
+
+    private void handleOldRequest(HttpExchange x) throws IOException {
+        out.println("old request: "
+                + x.getProtocol() + " "
+                + x.getRequestMethod() + " "
+                + x.getRequestURI());
+        String newProtocol = (newServer instanceof HttpsServer) ? "https" : "http";
+        String redirectTo = newProtocol + ":/" + newServer.getAddress() + x.getRequestURI();
+        out.println("    redirect to: " + redirectTo);
+        x.getResponseHeaders().add("Location", redirectTo);
+        x.sendResponseHeaders(HttpURLConnection.HTTP_MOVED_PERM, 0);
+        x.getResponseBody().close();
+    }
+
+    private void handleNewRequest(HttpExchange x) throws IOException {
+        out.println("new request: "
+                + x.getProtocol() + " "
+                + x.getRequestMethod() + " "
+                + x.getRequestURI());
+        Path file = libApi.resolve(x.getRequestURI().getPath().substring(1).replace('/', File.separatorChar));
+        System.err.println(file);
+        if (Files.exists(file)) {
+            byte[] bytes = Files.readAllBytes(file);
+            // in the context of this test, the only request should be element-list,
+            // which we can say is text/plain.
+            x.getResponseHeaders().add("Content-type", "text/plain");
+            x.sendResponseHeaders(HttpURLConnection.HTTP_OK, bytes.length);
+            try (OutputStream responseStream = x.getResponseBody()) {
+                responseStream.write(bytes);
+            }
+        } else {
+            x.sendResponseHeaders(HttpURLConnection.HTTP_NOT_FOUND, 0);
+            x.getResponseBody().close();
+        }
+    }
+
+    /**
+     * Creates a simple usable SSLContext for an HttpsServer using
+     * a default keystore in the test tree.
+     * <p>
+     * This class is based on
+     * test/jdk/java/net/httpclient/whitebox/java.net.http/jdk/internal/net/http/SimpleSSLContext.java
+     */
+    static class SimpleSSLContext {
+
+        private final SSLContext ssl;
+
+        /**
+         * Loads default keystore.
+         */
+        SimpleSSLContext() throws Exception {
+            Path p = Path.of(System.getProperty("test.src", ".")).toAbsolutePath();
+            while (!Files.exists(p.resolve("TEST.ROOT"))) {
+                p = p.getParent();
+                if (p == null) {
+                    throw new IOException("can't find TEST.ROOT");
+                }
+            }
+
+            System.err.println("Test suite root: " + p);
+            Path testKeys = p.resolve("../lib/jdk/test/lib/net/testkeys").normalize();
+            if (!Files.exists(testKeys)) {
+                throw new IOException("can't find testkeys");
+            }
+            System.err.println("Test keys: " + testKeys);
+
+            try (InputStream fis = Files.newInputStream(testKeys)) {
+                ssl = init(fis);
+            }
+        }
+
+        private SSLContext init(InputStream i) throws Exception {
+            char[] passphrase = "passphrase".toCharArray();
+            KeyStore ks = KeyStore.getInstance("PKCS12");
+            ks.load(i, passphrase);
+
+            KeyManagerFactory kmf = KeyManagerFactory.getInstance("PKIX");
+            kmf.init(ks, passphrase);
+
+            TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX");
+            tmf.init(ks);
+
+            SSLContext ssl = SSLContext.getInstance("TLS");
+            ssl.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
+            return ssl;
+        }
+
+        SSLContext get() {
+            return ssl;
+        }
+    }
+}
--- a/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java	Mon Dec 03 10:08:18 2018 +0100
@@ -362,6 +362,44 @@
         checkSearchIndex(false);
     }
 
+    @Test
+    void testJapaneseLocale() {
+        javadoc("-locale", "ja_JP",
+                "-d", "out-jp",
+                "--no-module-directories",
+                "-Xdoclint:none",
+                "-sourcepath", testSrc,
+                "-use",
+                "pkg", "pkg1", "pkg2", "pkg3");
+        checkExit(Exit.OK);
+        checkOutput(Output.OUT, true,
+                "\u30d1\u30c3\u30b1\u30fc\u30b8pkg\u306e\u30bd\u30fc\u30b9\u30fb\u30d5\u30a1" +
+                        "\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...\n",
+                "\u30d1\u30c3\u30b1\u30fc\u30b8pkg1\u306e\u30bd\u30fc\u30b9\u30fb\u30d5\u30a1" +
+                        "\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...\n");
+        checkSearchJS();
+        checkSearchIndex(true);
+    }
+
+    @Test
+    void testChineseLocale() {
+        javadoc("-locale", "zh_CN",
+                "-d", "out-cn",
+                "--no-module-directories",
+                "-Xdoclint:none",
+                "-sourcepath", testSrc,
+                "-use",
+                "pkg", "pkg1", "pkg2", "pkg3");
+        checkExit(Exit.OK);
+        checkOutput(Output.OUT, true,
+                "\u6b63\u5728\u52a0\u8f7d\u7a0b\u5e8f\u5305pkg\u7684\u6e90\u6587\u4ef6...\n",
+                "\u6b63\u5728\u52a0\u8f7d\u7a0b\u5e8f\u5305pkg1\u7684\u6e90\u6587\u4ef6...\n",
+                "\u6b63\u5728\u52a0\u8f7d\u7a0b\u5e8f\u5305pkg2\u7684\u6e90\u6587\u4ef6...\n",
+                "\u6b63\u5728\u52a0\u8f7d\u7a0b\u5e8f\u5305pkg3\u7684\u6e90\u6587\u4ef6...\n");
+        checkSearchJS();
+        checkSearchIndex(true);
+    }
+
     void checkDocLintErrors() {
         checkOutput(Output.OUT, true,
                 "A sample method. Testing search tag for {@index \"unclosed quote}.",
--- a/test/langtools/jdk/jshell/KullaTesting.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/langtools/jdk/jshell/KullaTesting.java	Mon Dec 03 10:08:18 2018 +0100
@@ -737,7 +737,7 @@
                 expectedSubKind, unressz, othersz);
         String signature = var.typeName();
         assertEquals(signature, expectedTypeName,
-                "Expected " + var.source() + " to have the name: " +
+                "Expected " + var.source() + " to have the type name: " +
                         expectedTypeName + ", got: " + signature);
     }
 
--- a/test/langtools/jdk/jshell/VariablesTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/langtools/jdk/jshell/VariablesTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8144903 8177466 8191842 8211694
+ * @bug 8144903 8177466 8191842 8211694 8213725
  * @summary Tests for EvaluationState.variables
  * @library /tools/lib
  * @modules jdk.compiler/com.sun.tools.javac.api
@@ -492,6 +492,21 @@
         assertVarDeclRedefNoInit("String", "s", "\"hi\"", "null");
     }
 
+    public void badPkgVarDecl() {
+        Compiler compiler = new Compiler();
+        Path nopkgdirpath = Paths.get("cp", "xyz");
+        compiler.compile(nopkgdirpath,
+                "public class TestZ { public static int V = 0; }\n");
+        assertDeclareFail("import static xyz.TestZ.V;",
+                        "compiler.err.cant.access");
+
+
+        VarSnippet v1 = varKey(assertEval("var v = xyz.TestZ.V;", IGNORE_VALUE, null,
+                DiagCheck.DIAG_ERROR, DiagCheck.DIAG_OK, added(RECOVERABLE_NOT_DEFINED)));
+        assertVariableDeclSnippet(v1, "v", "java.lang.Object", RECOVERABLE_NOT_DEFINED, SubKind.VAR_DECLARATION_WITH_INITIALIZER_SUBKIND, 0, 1);
+        assertEval("1+1", "2");
+    }
+
     private void assertVarDeclRedefNoInit(String typeName, String name, String value, String dvalue) {
         assertVarDeclRedefNoInit(typeName, name, value, value, dvalue);
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/T8203277/PreflowShouldVisitLambdaOrDiamondInsideLambdaTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2018, 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 8203277
+ * @summary preflow visitor used during lambda attribution shouldn't visit class definitions inside the lambda body
+ * @compile PreflowShouldVisitLambdaOrDiamondInsideLambdaTest.java
+ */
+
+import java.util.List;
+import java.util.function.Function;
+
+class PreflowShouldVisitLambdaOrDiamondInsideLambdaTest {
+    void build() {
+        List<Function<String, Double>> list1 = transform(null,
+                builder -> new Function<>() {
+                    public Double apply(String params) { return null; }
+                });
+
+        List<Function<String, Double>> list2 = transform(null,
+                builder -> arg -> null);
+    }
+
+    static <Argument, Result> List<Result> transform(List<Argument> fromList,
+            Function<? super Argument,? extends Result> function) { return null; }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/annotations/AtNonAnnotationTypeTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,11 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8206325
+ * @summary AssertionError in TypeSymbol.getAnnotationTypeMetadata
+ * @compile/fail/ref=AtNonAnnotationTypeTest.out -XDrawDiagnostics -XDdev AtNonAnnotationTypeTest.java
+ */
+
+import java.lang.annotation.Annotation;
+class AtNonAnnotationTypeTest<Override extends Annotation> {
+  AtNonAnnotationTypeTest(@Override String foo) {}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/annotations/AtNonAnnotationTypeTest.out	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,2 @@
+AtNonAnnotationTypeTest.java:10:28: compiler.err.not.annotation.type: Override
+1 error
\ No newline at end of file
--- a/test/langtools/tools/javac/api/TestGetScopeResult.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/langtools/tools/javac/api/TestGetScopeResult.java	Mon Dec 03 10:08:18 2018 +0100
@@ -134,7 +134,7 @@
                implicitExplicitConflict1);
 
         String[] implicitExplicitConflict2 = {
-            "s:<any>",
+            "s:none",
             ":t",
             "super:java.lang.Object",
             "this:Test"
@@ -179,7 +179,8 @@
             List<String> expectedList = List.of(expected);
 
             if (!expectedList.equals(actual)) {
-                throw new IllegalStateException("Unexpected scope content: " + actual);
+                throw new IllegalStateException("Unexpected scope content: " + actual + "\n" +
+                                                 "expected: " + expectedList);
             }
         }
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/file/SymLinkArchiveTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2018, Google LLC. 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 8181897
+ * @summary
+ * @library /tools/lib
+ * @modules jdk.compiler/com.sun.tools.javac.api
+ *          jdk.compiler/com.sun.tools.javac.main
+ *          jdk.jdeps/com.sun.tools.classfile
+ * @build toolbox.JavacTask toolbox.TestRunner toolbox.ToolBox
+ * @run main SymLinkArchiveTest
+ */
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+import toolbox.JavacTask;
+import toolbox.Task.Expect;
+import toolbox.Task.OutputKind;
+import toolbox.Task.Result;
+import toolbox.TestRunner;
+import toolbox.TestRunner.Test;
+import toolbox.ToolBox;
+
+public class SymLinkArchiveTest extends TestRunner {
+    public static void main(String... args) throws Exception {
+        new SymLinkArchiveTest().runTests(m -> new Object[] {Paths.get(m.getName())});
+    }
+
+    private final ToolBox tb = new ToolBox();
+
+    public SymLinkArchiveTest() {
+        super(System.err);
+    }
+
+    @Test
+    public void testJarSymlink(Path base) throws Exception {
+        Files.createDirectories(base);
+        Path classpath = base.resolve("CLASSPATH");
+        try (JarOutputStream jos = new JarOutputStream(Files.newOutputStream(classpath))) {
+            jos.putNextEntry(new JarEntry("p/B.class"));
+            jos.write(new byte[10]);
+        }
+        Path javaFile = base.resolve("T.java");
+        tb.writeFile(javaFile, "class T extends p.B {}");
+
+        Path jar = base.resolve("lib.jar");
+        Files.createSymbolicLink(jar, classpath.getFileName());
+
+        Result result = new JavacTask(tb).files(javaFile).classpath(jar).run(Expect.FAIL);
+        String output = result.getOutput(OutputKind.DIRECT);
+
+        String expected = jar + "(/p/B.class)";
+        if (!output.contains(expected)) {
+            throw new AssertionError(
+                    "expected output to contain: " + expected + "\nwas:\n" + output);
+        }
+    }
+}
--- a/test/lib/jdk/test/lib/jfr/EventNames.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/lib/jdk/test/lib/jfr/EventNames.java	Mon Dec 03 10:08:18 2018 +0100
@@ -54,7 +54,6 @@
     public final static String StringFlagChanged = PREFIX + "StringFlagChanged";
 
     // Runtime
-    public final static String VMException = PREFIX + "JavaErrorThrow";
     public final static String ThreadStart = PREFIX + "ThreadStart";
     public final static String ThreadEnd = PREFIX + "ThreadEnd";
     public final static String ThreadSleep = PREFIX + "ThreadSleep";
@@ -66,26 +65,26 @@
     public final static String ClassDefine = PREFIX + "ClassDefine";
     public final static String ClassUnload = PREFIX + "ClassUnload";
     public final static String SafepointBegin = PREFIX + "SafepointBegin";
-    public final static String SafepointStateSyncronization = PREFIX + "SafepointStateSynchronization";
+    public final static String SafepointStateSynchronization = PREFIX + "SafepointStateSynchronization";
     public final static String SafepointWaitBlocked = PREFIX + "SafepointWaitBlocked";
     public final static String SafepointCleanup = PREFIX + "SafepointCleanup";
     public final static String SafepointCleanupTask = PREFIX + "SafepointCleanupTask";
     public final static String SafepointEnd = PREFIX + "SafepointEnd";
     public final static String ExecuteVMOperation = PREFIX + "ExecuteVMOperation";
     public final static String Shutdown = PREFIX + "Shutdown";
-    public final static String VMError = PREFIX + "VMError";
     public final static String JavaThreadStatistics = PREFIX + "JavaThreadStatistics";
     public final static String ClassLoadingStatistics = PREFIX + "ClassLoadingStatistics";
     public final static String ClassLoaderStatistics = PREFIX + "ClassLoaderStatistics";
     public final static String ThreadAllocationStatistics = PREFIX + "ThreadAllocationStatistics";
     public final static String ExecutionSample = PREFIX + "ExecutionSample";
     public final static String NativeMethodSample = PREFIX + "NativeMethodSample";
-    public final static String ExecutionSampling = PREFIX + "ExecutionSampling";
     public final static String ThreadDump = PREFIX + "ThreadDump";
     public final static String OldObjectSample = PREFIX + "OldObjectSample";
     public final static String BiasedLockRevocation = PREFIX + "BiasedLockRevocation";
     public final static String BiasedLockSelfRevocation = PREFIX + "BiasedLockSelfRevocation";
     public final static String BiasedLockClassRevocation = PREFIX + "BiasedLockClassRevocation";
+    // This event is hard to test
+    public final static String ReservedStackActivation = PREFIX + "ReservedStackActivation";
 
     // GC
     public final static String GCHeapSummary = PREFIX + "GCHeapSummary";
@@ -100,12 +99,13 @@
     public final static String G1HeapRegionTypeChange = PREFIX + "G1HeapRegionTypeChange";
     public final static String TenuringDistribution = PREFIX + "TenuringDistribution";
     public final static String GarbageCollection = PREFIX + "GarbageCollection";
-    public final static String ParallelOldCollection = PREFIX + "ParallelOldGarbageCollection";
+    public final static String ParallelOldGarbageCollection = PREFIX + "ParallelOldGarbageCollection";
+    public final static String ParallelOldCollection = ParallelOldGarbageCollection;
     public final static String YoungGarbageCollection = PREFIX + "YoungGarbageCollection";
     public final static String OldGarbageCollection = PREFIX + "OldGarbageCollection";
     public final static String G1GarbageCollection = PREFIX + "G1GarbageCollection";
     public final static String G1MMU = PREFIX + "G1MMU";
-    public final static String EvacuationInfo = PREFIX + "EvacuationInfo";
+    public final static String EvacuationInformation = PREFIX + "EvacuationInformation";
     public final static String GCReferenceStatistics = PREFIX + "GCReferenceStatistics";
     public final static String ObjectCountAfterGC = PREFIX + "ObjectCountAfterGC";
     public final static String PromoteObjectInNewPLAB = PREFIX + "PromoteObjectInNewPLAB";
@@ -117,6 +117,7 @@
     public final static String GCPhasePauseLevel1 = PREFIX + "GCPhasePauseLevel1";
     public final static String GCPhasePauseLevel2 = PREFIX + "GCPhasePauseLevel2";
     public final static String GCPhasePauseLevel3 = PREFIX + "GCPhasePauseLevel3";
+    public final static String GCPhasePauseLevel4 = PREFIX + "GCPhasePauseLevel4";
     public final static String ObjectCount = PREFIX + "ObjectCount";
     public final static String GCConfiguration = PREFIX + "GCConfiguration";
     public final static String GCSurvivorConfiguration = PREFIX + "GCSurvivorConfiguration";
@@ -129,6 +130,7 @@
     public final static String G1BasicIHOP = PREFIX + "G1BasicIHOP";
     public final static String AllocationRequiringGC = PREFIX + "AllocationRequiringGC";
     public final static String GCPhaseParallel = PREFIX + "GCPhaseParallel";
+    public final static String GCPhaseConcurrent = PREFIX + "GCPhaseConcurrent";
 
     // Compiler
     public final static String Compilation = PREFIX + "Compilation";
@@ -136,7 +138,7 @@
     public final static String CompilationFailure = PREFIX + "CompilationFailure";
     public final static String CompilerInlining = PREFIX + "CompilerInlining";
     public final static String CompilerStatistics = PREFIX + "CompilerStatistics";
-    public final static String CompilerConfig = PREFIX + "CompilerConfiguration";
+    public final static String CompilerConfiguration = PREFIX + "CompilerConfiguration";
     public final static String CodeCacheStatistics = PREFIX + "CodeCacheStatistics";
     public final static String CodeCacheConfiguration = PREFIX + "CodeCacheConfiguration";
     public final static String CodeSweeperStatistics = PREFIX + "CodeSweeperStatistics";
--- a/test/lib/jdk/test/lib/process/ProcessTools.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/lib/jdk/test/lib/process/ProcessTools.java	Mon Dec 03 10:08:18 2018 +0100
@@ -464,7 +464,10 @@
      */
     public static OutputAnalyzer executeCommand(ProcessBuilder pb)
             throws Throwable {
-        String cmdLine = pb.command().stream().collect(Collectors.joining(" "));
+        String cmdLine = pb.command().stream()
+                .map(x -> (x.contains(" ") || x.contains("$"))
+                        ? ("'" + x + "'") : x)
+                .collect(Collectors.joining(" "));
         System.out.println("Command line: [" + cmdLine + "]");
         OutputAnalyzer analyzer = ProcessTools.executeProcess(pb);
         System.out.println(analyzer.getOutput());
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/lib/jdk/test/lib/util/OptimalCapacity.java	Mon Dec 03 10:08:18 2018 +0100
@@ -0,0 +1,240 @@
+/*
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.lib.util;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.IdentityHashMap;
+
+/**
+ * Utility functions to check that the static storages are pre-sized
+ * optimally.
+ */
+public final class OptimalCapacity {
+
+    private OptimalCapacity() {}
+
+    /**
+     * Checks adequacy of the initial capacity of a static field
+     * of type {@code ArrayList}.
+     *
+     * Having
+     * <pre>
+     * class XClass {
+     *     static ArrayList theList = new ArrayList(N);
+     * }
+     * </pre>
+     *
+     * you should call from the test
+     *
+     * <pre>
+     * OptimalCapacity.assertProperlySized(XClass.class, "theList", N);
+     * </pre>
+     */
+    public static void ofArrayList(Class<?> clazz, String fieldName,
+            int initialCapacity)
+    {
+        try {
+            Field field = clazz.getDeclaredField(fieldName);
+            field.setAccessible(true);
+            Object obj = field.get(null);
+            if (!ArrayList.class.equals(obj.getClass())) {
+                throw new RuntimeException("'" + field +
+                    "' expected to be of type ArrayList");
+            }
+            ArrayList<?> list = (ArrayList<?>)obj;
+
+            // For ArrayList the optimal capacity is its final size
+            if (list.size() != initialCapacity) {
+                throw new RuntimeException("Size of '" + field +
+                    "' is " + list.size() +
+                    ", but expected to be " + initialCapacity);
+            }
+            if (internalArraySize(list) != initialCapacity) {
+                throw new RuntimeException("Capacity of '" + field +
+                    "' is " + internalArraySize(list) +
+                    ", but expected to be " + initialCapacity);
+            }
+        } catch (ReflectiveOperationException roe) {
+            throw new RuntimeException(roe);
+        }
+    }
+
+    /**
+     * Checks adequacy of the initial capacity of a static field
+     * of type {@code HashMap}.
+     *
+     * Having
+     * <pre>
+     * class XClass {
+     *     static HashMap theMap = new HashMap(N);
+     * }
+     * </pre>
+     *
+     * you should call from the test
+     *
+     * <pre>
+     * OptimalCapacity.ofHashMap(XClass.class, "theMap", N);
+     * </pre>
+     */
+    public static void ofHashMap(Class<?> clazz, String fieldName,
+            int initialCapacity)
+    {
+        ofHashMap(clazz, null, fieldName, initialCapacity);
+    }
+
+    /**
+     * Checks adequacy of the initial capacity of a non-static field
+     * of type {@code HashMap}.
+     *
+     * Having
+     * <pre>
+     * class XClass {
+     *     HashMap theMap = new HashMap(N);
+     * }
+     * XClass instance = ...
+     * </pre>
+     *
+     * you should call from the test
+     *
+     * <pre>
+     * OptimalCapacity.ofHashMap(XClass.class, instance, "theMap", N);
+     * </pre>
+     */
+    public static void ofHashMap(Class<?> clazz, Object instance,
+            String fieldName, int initialCapacity)
+    {
+        try {
+            Field field = clazz.getDeclaredField(fieldName);
+            field.setAccessible(true);
+            Object obj = field.get(instance);
+            if (!HashMap.class.equals(obj.getClass())) {
+                throw new RuntimeException(field +
+                    " expected to be of type HashMap");
+            }
+            HashMap<?,?> map = (HashMap<?,?>)obj;
+
+            // Check that the map allocates only necessary amount of space
+            HashMap<Object, Object> tmp = new HashMap<>(map);
+            if (internalArraySize(map) != internalArraySize(tmp)) {
+                throw new RuntimeException("Final capacity of '" + field +
+                    "' is " + internalArraySize(map) +
+                    ", which exceeds necessary minimum " + internalArraySize(tmp));
+            }
+
+            // Check that map is initially properly sized
+            tmp = new HashMap<>(initialCapacity);
+            tmp.put(new Object(), new Object()); // trigger storage init
+            if (internalArraySize(map) != internalArraySize(tmp)) {
+                throw new RuntimeException("Requested capacity of '" + field +
+                    "' was " + initialCapacity +
+                    ", which resulted in final capacity " + internalArraySize(tmp) +
+                    ", which differs from necessary minimum " + internalArraySize(map));
+            }
+
+        } catch (ReflectiveOperationException roe) {
+            throw new RuntimeException(roe);
+        }
+    }
+
+    /**
+     * Checks adequacy of the expected maximum size of a static field
+     * of type {@code IdentityHashMap}.
+     *
+     * Having
+     * <pre>
+     * class XClass {
+     *     static IdentityHashMap theMap = new IdentityHashMap(M);
+     * }
+     * </pre>
+     *
+     * you should call from the test
+     *
+     * <pre>
+     * OptimalCapacity.ofIdentityHashMap(XClass.class, "theMap", M);
+     * </pre>
+     */
+    public static void ofIdentityHashMap(Class<?> clazz, String fieldName,
+            int expectedMaxSize)
+    {
+        try {
+            Field field = clazz.getDeclaredField(fieldName);
+            field.setAccessible(true);
+            Object obj = field.get(null);
+            if (!IdentityHashMap.class.equals(obj.getClass())) {
+                throw new RuntimeException("'" + field +
+                    "' expected to be of type IdentityHashMap");
+            }
+            IdentityHashMap<?,?> map = (IdentityHashMap<?,?>)obj;
+
+            // Check that size of map is what was expected
+            if (map.size() != expectedMaxSize) {
+                throw new RuntimeException("Size of '" + field +
+                    "' is " + map.size() +
+                    ", which differs from expected " + expectedMaxSize);
+            }
+
+            // Check that the map allocated only necessary amount of memory
+            IdentityHashMap<Object, Object> tmp = new IdentityHashMap<>(map);
+            if (internalArraySize(map) != internalArraySize(tmp)) {
+                throw new RuntimeException("Final capacity of '" + field +
+                    "' is " + internalArraySize(map) +
+                    ", which exceeds necessary minimum " + internalArraySize(tmp));
+            }
+
+            // Check that map was initially properly sized
+            tmp = new IdentityHashMap<>(expectedMaxSize);
+            tmp.put(new Object(), new Object()); // trigger storage init
+            if (internalArraySize(map) != internalArraySize(tmp)) {
+                throw new RuntimeException("Requested number of elements in '" + field +
+                    "' was " + expectedMaxSize +
+                    ", which resulted in final capacity " + internalArraySize(tmp) +
+                    ", which differs from necessary minimum " + internalArraySize(map));
+            }
+        } catch (ReflectiveOperationException roe) {
+            throw new RuntimeException(roe);
+        }
+    }
+
+    /**
+     * Returns size of the internal storage.
+     */
+    private static int internalArraySize(Object container)
+            throws ReflectiveOperationException {
+        Field field;
+        if (ArrayList.class.equals(container.getClass())) {
+            field = ArrayList.class.getDeclaredField("elementData");
+        } else if (HashMap.class.equals(container.getClass())) {
+            field = HashMap.class.getDeclaredField("table");
+        } else if (IdentityHashMap.class.equals(container.getClass())) {
+            field = IdentityHashMap.class.getDeclaredField("table");
+        } else {
+            throw new RuntimeException("Unexpected class " +
+                    container.getClass());
+        }
+        field.setAccessible(true);
+        return ((Object[])field.get(container)).length;
+    }
+}
--- a/test/nashorn/src/jdk/dynalink/beans/test/BeansLinkerTest.java	Mon Nov 26 19:05:55 2018 +0100
+++ b/test/nashorn/src/jdk/dynalink/beans/test/BeansLinkerTest.java	Mon Dec 03 10:08:18 2018 +0100
@@ -47,6 +47,7 @@
 import jdk.dynalink.NamespaceOperation;
 import jdk.dynalink.NoSuchDynamicMethodException;
 import jdk.dynalink.Operation;
+import jdk.dynalink.beans.StaticClass;
 import jdk.dynalink.support.SimpleRelinkableCallSite;
 import org.testng.Assert;
 import org.testng.annotations.Test;
@@ -224,6 +225,25 @@
         });
     }
 
+    public static class A {
+        public static class Inner {}
+    }
+
+    public static class B extends A {
+        public static class Inner {}
+    }
+
+    @Test
+    public static void testInnerClassGetter() {
+        Object inner1 = call(GET.withNamespace(PROPERTY), StaticClass.forClass(A.class), "Inner");
+        Assert.assertTrue(inner1 instanceof StaticClass);
+        Assert.assertEquals(A.Inner.class, ((StaticClass) inner1).getRepresentedClass());
+
+        Object inner2 = call(GET.withNamespace(PROPERTY), StaticClass.forClass(B.class), "Inner");
+        Assert.assertTrue(inner2 instanceof StaticClass);
+        Assert.assertEquals(B.Inner.class, ((StaticClass) inner2).getRepresentedClass());
+    }
+
     private static void expectNoSuchDynamicMethodException(final Runnable r) {
         try {
             r.run();