changeset 11324:0d73629f3a8d

Merge
author duke
date Wed, 05 Jul 2017 17:58:30 +0200
parents 8e546b2b9dd0 4435192939b8
children 0ff7113a0882
files jdk/src/share/classes/com/sun/tools/jdi/LinkedHashMap.java jdk/src/share/classes/sun/awt/FocusingTextField.java jdk/src/share/classes/sun/awt/HorizBagLayout.java jdk/src/share/classes/sun/awt/OrientableFlowLayout.java jdk/src/share/classes/sun/awt/VariableGridLayout.java jdk/src/share/classes/sun/awt/VerticalBagLayout.java
diffstat 298 files changed, 2829 insertions(+), 3845 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags-top-repo	Fri Dec 23 16:39:22 2011 -0800
+++ b/.hgtags-top-repo	Wed Jul 05 17:58:30 2017 +0200
@@ -139,3 +139,4 @@
 a4f28069d44a379cda99dd1d921d19f819726d22 jdk8-b15
 4e06ae613e99549835896720c7a68c29ad5543f5 jdk8-b17
 4e06ae613e99549835896720c7a68c29ad5543f5 jdk8-b16
+7010bd24cdd07bc7daef80702f39124854dec36c jdk8-b18
--- a/corba/.hgtags	Fri Dec 23 16:39:22 2011 -0800
+++ b/corba/.hgtags	Wed Jul 05 17:58:30 2017 +0200
@@ -139,3 +139,4 @@
 7da69e7175a7c7564ee6d0e52255cbb8a57ef577 jdk8-b15
 82dc033975bb9b553b4ef97b6d483eda8de32e0f jdk8-b17
 82dc033975bb9b553b4ef97b6d483eda8de32e0f jdk8-b16
+312cf15d16577ef198b033d2a4cc0a52369b7343 jdk8-b18
--- a/corba/make/jprt.properties	Fri Dec 23 16:39:22 2011 -0800
+++ b/corba/make/jprt.properties	Wed Jul 05 17:58:30 2017 +0200
@@ -25,21 +25,21 @@
 
 # Properties for jprt
 
-# The release to build
+# Locked down to jdk8
 jprt.tools.default.release=jdk8
 
 # The different build flavors we want, we override here so we just get these 2
 jprt.build.flavors=product,fastdebug
 
 # Standard list of jprt build targets for this source tree
-jprt.build.targets= 						\
-    solaris_sparc_5.10-{product|fastdebug}, 			\
-    solaris_sparcv9_5.10-{product|fastdebug}, 			\
-    solaris_i586_5.10-{product|fastdebug}, 			\
-    solaris_x64_5.10-{product|fastdebug}, 			\
-    linux_i586_2.6-{product|fastdebug}, 			\
-    linux_x64_2.6-{product|fastdebug}, 				\
-    windows_i586_5.1-{product|fastdebug}, 			\
+jprt.build.targets=                                             \
+    solaris_sparc_5.10-{product|fastdebug},                     \
+    solaris_sparcv9_5.10-{product|fastdebug},                   \
+    solaris_i586_5.10-{product|fastdebug},                      \
+    solaris_x64_5.10-{product|fastdebug},                       \
+    linux_i586_2.6-{product|fastdebug},                         \
+    linux_x64_2.6-{product|fastdebug},                          \
+    windows_i586_5.1-{product|fastdebug},                       \
     windows_x64_5.2-{product|fastdebug}
 
 # Directories to be excluded from the source bundles
--- a/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaClientRequestDispatcherImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaClientRequestDispatcherImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2011, 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
@@ -113,6 +113,9 @@
 import com.sun.corba.se.impl.transport.CorbaContactInfoListIteratorImpl;
 import com.sun.corba.se.impl.util.JDKBridge;
 
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ConcurrentHashMap;
+
 /**
  * ClientDelegate is the RMI client-side subcontract or representation
  * It implements RMI delegate as well as our internal ClientRequestDispatcher
@@ -122,6 +125,9 @@
     implements
         ClientRequestDispatcher
 {
+    private ConcurrentMap<ContactInfo, Object> locks =
+            new ConcurrentHashMap<ContactInfo, Object>();
+
     public OutputObject beginRequest(Object self, String opName,
                                      boolean isOneWay, ContactInfo contactInfo)
     {
@@ -148,8 +154,21 @@
 
         // This locking is done so that multiple connections are not created
         // for the same endpoint
-        //6929137 - Synchronized on contactInfo to avoid blocking across multiple endpoints
-        synchronized (contactInfo) {
+        // 7046238 - Synchronization on a single monitor for contactInfo parameters
+        // with identical hashCode(), so we lock on same monitor for equal parameters
+        // (which can refer to equal (in terms of equals()) but not the same objects)
+
+        Object lock = locks.get(contactInfo);
+
+        if (lock == null) {
+            Object newLock = new Object();
+            lock = locks.putIfAbsent(contactInfo, newLock);
+            if (lock == null) {
+                lock = newLock;
+            }
+        }
+
+        synchronized (lock) {
             if (contactInfo.isConnectionBased()) {
                 if (contactInfo.shouldCacheConnection()) {
                     connection = (CorbaConnection)
@@ -254,7 +273,7 @@
         registerWaiter(messageMediator);
 
         // Do connection reclaim now
-        synchronized (contactInfo) {
+        synchronized (lock) {
             if (contactInfo.isConnectionBased()) {
                 if (contactInfo.shouldCacheConnection()) {
                     OutboundConnectionCache connectionCache =
--- a/hotspot/.hgtags	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/.hgtags	Wed Jul 05 17:58:30 2017 +0200
@@ -205,3 +205,5 @@
 d1f29d4e0bc60e8bd7ae961f1306d8ab33290212 jdk8-b16
 6de8c9ba5907e4c5ca05ac4b8d84a8e2cbd92399 hs23-b07
 a2fef924d8e6f37dac2a887315e3502876cc8e24 hs23-b08
+61165f53f1656b9f99e4fb806429bf98b99d59c3 jdk8-b18
+4bcf61041217f8677dcec18e90e9196acc945bba hs23-b09
--- a/hotspot/make/hotspot_version	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/make/hotspot_version	Wed Jul 05 17:58:30 2017 +0200
@@ -35,7 +35,7 @@
 
 HS_MAJOR_VER=23
 HS_MINOR_VER=0
-HS_BUILD_NUMBER=08
+HS_BUILD_NUMBER=09
 
 JDK_MAJOR_VER=1
 JDK_MINOR_VER=8
--- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -5968,7 +5968,9 @@
   assert(number_of_arguments >= 0   , "cannot have negative number of arguments");
   LP64_ONLY(assert(java_thread == r15_thread, "unexpected register"));
 #ifdef ASSERT
-  LP64_ONLY(if (UseCompressedOops) verify_heapbase("call_VM_base");)
+  // TraceBytecodes does not use r12 but saves it over the call, so don't verify
+  // r12 is the heapbase.
+  LP64_ONLY(if (UseCompressedOops && !TraceBytecodes) verify_heapbase("call_VM_base");)
 #endif // ASSERT
 
   assert(java_thread != oop_result  , "cannot use the same register for java_thread & oop_result");
--- a/hotspot/src/os/bsd/vm/jvm_bsd.h	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/os/bsd/vm/jvm_bsd.h	Wed Jul 05 17:58:30 2017 +0200
@@ -33,7 +33,6 @@
 // All local includes have been commented out.
 */
 
-
 #ifndef JVM_MD_H
 #define JVM_MD_H
 
@@ -59,6 +58,7 @@
 
 #include <dirent.h>             /* For DIR */
 #include <sys/param.h>          /* For MAXPATHLEN */
+#include <sys/socket.h>         /* For socklen_t */
 #include <unistd.h>             /* For F_OK, R_OK, W_OK */
 
 #define JNI_ONLOAD_SYMBOLS      {"JNI_OnLoad"}
@@ -128,8 +128,4 @@
 #endif
 #endif /* JVM_MD_H */
 
-// Reconciliation History
-// jvm_solaris.h        1.6 99/06/22 16:38:47
-// End
-
 #endif // OS_BSD_VM_JVM_BSD_H
--- a/hotspot/src/os/bsd/vm/os_bsd.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/os/bsd/vm/os_bsd.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -150,7 +150,6 @@
 
 // for timer info max values which include all bits
 #define ALL_64_BITS CONST64(0xFFFFFFFFFFFFFFFF)
-#define SEC_IN_NANOSECS  1000000000LL
 
 #define LARGEPAGES_BIT (1 << 6)
 ////////////////////////////////////////////////////////////////////////////////
@@ -3445,8 +3444,6 @@
 // generates a SIGUSRx signal. Note that SIGUSR1 can interfere with
 // SIGSEGV, see 4355769.
 
-const int NANOSECS_PER_MILLISECS = 1000000;
-
 int os::sleep(Thread* thread, jlong millis, bool interruptible) {
   assert(thread == Thread::current(),  "thread consistency check");
 
@@ -3469,7 +3466,7 @@
         // not a guarantee() because JVM should not abort on kernel/glibc bugs
         assert(!Bsd::supports_monotonic_clock(), "time moving backwards");
       } else {
-        millis -= (newtime - prevtime) / NANOSECS_PER_MILLISECS;
+        millis -= (newtime - prevtime) / NANOSECS_PER_MILLISEC;
       }
 
       if(millis <= 0) {
@@ -3508,7 +3505,7 @@
         // not a guarantee() because JVM should not abort on kernel/glibc bugs
         assert(!Bsd::supports_monotonic_clock(), "time moving backwards");
       } else {
-        millis -= (newtime - prevtime) / NANOSECS_PER_MILLISECS;
+        millis -= (newtime - prevtime) / NANOSECS_PER_MILLISEC;
       }
 
       if(millis <= 0) break ;
@@ -4197,7 +4194,7 @@
   int rc = os::Bsd::clock_gettime(clockid, &tp);
   assert(rc == 0, "clock_gettime is expected to return 0 code");
 
-  return (tp.tv_sec * SEC_IN_NANOSECS) + tp.tv_nsec;
+  return (tp.tv_sec * NANOSECS_PER_SEC) + tp.tv_nsec;
 }
 #endif
 
@@ -5522,9 +5519,6 @@
  * is no need to track notifications.
  */
 
-
-#define NANOSECS_PER_SEC 1000000000
-#define NANOSECS_PER_MILLISEC 1000000
 #define MAX_SECS 100000000
 /*
  * This code is common to bsd and solaris and will be moved to a
--- a/hotspot/src/os/bsd/vm/os_bsd.inline.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/os/bsd/vm/os_bsd.inline.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -198,15 +198,15 @@
   return ::socket(domain, type, protocol);
 }
 
-inline int os::recv(int fd, char *buf, int nBytes, int flags) {
-  RESTARTABLE_RETURN_INT(::recv(fd, buf, nBytes, (unsigned int) flags));
+inline int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
+  RESTARTABLE_RETURN_INT(::recv(fd, buf, nBytes, flags));
 }
 
-inline int os::send(int fd, char *buf, int nBytes, int flags) {
-  RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, (unsigned int) flags));
+inline int os::send(int fd, char* buf, size_t nBytes, uint flags) {
+  RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, flags));
 }
 
-inline int os::raw_send(int fd, char *buf, int nBytes, int flags) {
+inline int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
   return os::send(fd, buf, nBytes, flags);
 }
 
@@ -246,57 +246,52 @@
   return ::listen(fd, count);
 }
 
-inline int os::connect(int fd, struct sockaddr *him, int len) {
+inline int os::connect(int fd, struct sockaddr* him, socklen_t len) {
   RESTARTABLE_RETURN_INT(::connect(fd, him, len));
 }
 
-inline int os::accept(int fd, struct sockaddr *him, int *len) {
-  // This cast is from int to unsigned int on bsd.  Since we
-  // only pass the parameter "len" around the vm and don't try to
-  // fetch it's value, this cast is safe for now. The java.net group
-  // may need and want to change this interface someday if socklen_t goes
-  // to 64 bits on some platform that we support.
-
+inline int os::accept(int fd, struct sockaddr* him, socklen_t* len) {
   // At least OpenBSD and FreeBSD can return EINTR from accept.
-  RESTARTABLE_RETURN_INT(::accept(fd, him, (socklen_t *)len));
+  RESTARTABLE_RETURN_INT(::accept(fd, him, len));
 }
 
-inline int os::recvfrom(int fd, char *buf, int nBytes, int flags,
-                         sockaddr *from, int *fromlen) {
-  RESTARTABLE_RETURN_INT(::recvfrom(fd, buf, nBytes, (unsigned int) flags, from, (socklen_t *)fromlen));
+inline int os::recvfrom(int fd, char* buf, size_t nBytes, uint flags,
+                         sockaddr* from, socklen_t* fromlen) {
+  RESTARTABLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes, flags, from, fromlen));
 }
 
-inline int os::sendto(int fd, char *buf, int len, int flags,
-                        struct sockaddr *to, int tolen) {
-  RESTARTABLE_RETURN_INT(::sendto(fd, buf, len, (unsigned int) flags, to, tolen));
+inline int os::sendto(int fd, char* buf, size_t len, uint flags,
+                      struct sockaddr *to, socklen_t tolen) {
+  RESTARTABLE_RETURN_INT((int)::sendto(fd, buf, len, flags, to, tolen));
 }
 
-inline int os::socket_shutdown(int fd, int howto){
+inline int os::socket_shutdown(int fd, int howto) {
   return ::shutdown(fd, howto);
 }
 
-inline int os::bind(int fd, struct sockaddr *him, int len){
+inline int os::bind(int fd, struct sockaddr* him, socklen_t len) {
   return ::bind(fd, him, len);
 }
 
-inline int os::get_sock_name(int fd, struct sockaddr *him, int *len){
-  return ::getsockname(fd, him, (socklen_t *)len);
+inline int os::get_sock_name(int fd, struct sockaddr* him, socklen_t* len) {
+  return ::getsockname(fd, him, len);
 }
 
-inline int os::get_host_name(char* name, int namelen){
+inline int os::get_host_name(char* name, int namelen) {
   return ::gethostname(name, namelen);
 }
 
-inline struct hostent*  os::get_host_by_name(char* name) {
+inline struct hostent* os::get_host_by_name(char* name) {
   return ::gethostbyname(name);
 }
+
 inline int os::get_sock_opt(int fd, int level, int optname,
-                             char *optval, int* optlen){
-  return ::getsockopt(fd, level, optname, optval, (socklen_t *)optlen);
+                            char *optval, socklen_t* optlen) {
+  return ::getsockopt(fd, level, optname, optval, optlen);
 }
 
 inline int os::set_sock_opt(int fd, int level, int optname,
-                             const char *optval, int optlen){
+                            const char* optval, socklen_t optlen) {
   return ::setsockopt(fd, level, optname, optval, optlen);
 }
 #endif // OS_BSD_VM_OS_BSD_INLINE_HPP
--- a/hotspot/src/os/linux/vm/jvm_linux.h	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/os/linux/vm/jvm_linux.h	Wed Jul 05 17:58:30 2017 +0200
@@ -33,7 +33,6 @@
 // All local includes have been commented out.
 */
 
-
 #ifndef JVM_MD_H
 #define JVM_MD_H
 
@@ -44,6 +43,7 @@
 
 #include <dirent.h>             /* For DIR */
 #include <sys/param.h>          /* For MAXPATHLEN */
+#include <sys/socket.h>         /* For socklen_t */
 #include <unistd.h>             /* For F_OK, R_OK, W_OK */
 
 #define JNI_ONLOAD_SYMBOLS      {"JNI_OnLoad"}
@@ -95,8 +95,4 @@
 
 #endif /* JVM_MD_H */
 
-// Reconciliation History
-// jvm_solaris.h        1.6 99/06/22 16:38:47
-// End
-
 #endif // OS_LINUX_VM_JVM_LINUX_H
--- a/hotspot/src/os/linux/vm/os_linux.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/os/linux/vm/os_linux.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -127,7 +127,6 @@
 
 // for timer info max values which include all bits
 #define ALL_64_BITS CONST64(0xFFFFFFFFFFFFFFFF)
-#define SEC_IN_NANOSECS  1000000000LL
 
 #define LARGEPAGES_BIT (1 << 6)
 ////////////////////////////////////////////////////////////////////////////////
@@ -3259,8 +3258,6 @@
 // generates a SIGUSRx signal. Note that SIGUSR1 can interfere with
 // SIGSEGV, see 4355769.
 
-const int NANOSECS_PER_MILLISECS = 1000000;
-
 int os::sleep(Thread* thread, jlong millis, bool interruptible) {
   assert(thread == Thread::current(),  "thread consistency check");
 
@@ -3283,7 +3280,7 @@
         // not a guarantee() because JVM should not abort on kernel/glibc bugs
         assert(!Linux::supports_monotonic_clock(), "time moving backwards");
       } else {
-        millis -= (newtime - prevtime) / NANOSECS_PER_MILLISECS;
+        millis -= (newtime - prevtime) / NANOSECS_PER_MILLISEC;
       }
 
       if(millis <= 0) {
@@ -3322,7 +3319,7 @@
         // not a guarantee() because JVM should not abort on kernel/glibc bugs
         assert(!Linux::supports_monotonic_clock(), "time moving backwards");
       } else {
-        millis -= (newtime - prevtime) / NANOSECS_PER_MILLISECS;
+        millis -= (newtime - prevtime) / NANOSECS_PER_MILLISEC;
       }
 
       if(millis <= 0) break ;
@@ -3924,7 +3921,7 @@
   int rc = os::Linux::clock_gettime(clockid, &tp);
   assert(rc == 0, "clock_gettime is expected to return 0 code");
 
-  return (tp.tv_sec * SEC_IN_NANOSECS) + tp.tv_nsec;
+  return (tp.tv_sec * NANOSECS_PER_SEC) + tp.tv_nsec;
 }
 
 /////
@@ -5165,9 +5162,6 @@
  * is no need to track notifications.
  */
 
-
-#define NANOSECS_PER_SEC 1000000000
-#define NANOSECS_PER_MILLISEC 1000000
 #define MAX_SECS 100000000
 /*
  * This code is common to linux and solaris and will be moved to a
--- a/hotspot/src/os/linux/vm/os_linux.inline.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/os/linux/vm/os_linux.inline.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -202,15 +202,15 @@
   return ::socket(domain, type, protocol);
 }
 
-inline int os::recv(int fd, char *buf, int nBytes, int flags) {
-  RESTARTABLE_RETURN_INT(::recv(fd, buf, nBytes, (unsigned int) flags));
+inline int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
+  RESTARTABLE_RETURN_INT(::recv(fd, buf, nBytes, flags));
 }
 
-inline int os::send(int fd, char *buf, int nBytes, int flags) {
-  RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, (unsigned int) flags));
+inline int os::send(int fd, char* buf, size_t nBytes, uint flags) {
+  RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, flags));
 }
 
-inline int os::raw_send(int fd, char *buf, int nBytes, int flags) {
+inline int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
   return os::send(fd, buf, nBytes, flags);
 }
 
@@ -250,57 +250,53 @@
   return ::listen(fd, count);
 }
 
-inline int os::connect(int fd, struct sockaddr *him, int len) {
+inline int os::connect(int fd, struct sockaddr* him, socklen_t len) {
   RESTARTABLE_RETURN_INT(::connect(fd, him, len));
 }
 
-inline int os::accept(int fd, struct sockaddr *him, int *len) {
-  // This cast is from int to unsigned int on linux.  Since we
-  // only pass the parameter "len" around the vm and don't try to
-  // fetch it's value, this cast is safe for now. The java.net group
-  // may need and want to change this interface someday if socklen_t goes
-  // to 64 bits on some platform that we support.
-  // Linux doc says this can't return EINTR, unlike accept() on Solaris
-
-  return ::accept(fd, him, (socklen_t *)len);
+inline int os::accept(int fd, struct sockaddr* him, socklen_t* len) {
+  // Linux doc says this can't return EINTR, unlike accept() on Solaris.
+  // But see attachListener_linux.cpp, LinuxAttachListener::dequeue().
+  return (int)::accept(fd, him, len);
 }
 
-inline int os::recvfrom(int fd, char *buf, int nBytes, int flags,
-                         sockaddr *from, int *fromlen) {
-  RESTARTABLE_RETURN_INT(::recvfrom(fd, buf, nBytes, (unsigned int) flags, from, (socklen_t *)fromlen));
+inline int os::recvfrom(int fd, char* buf, size_t nBytes, uint flags,
+                        sockaddr* from, socklen_t* fromlen) {
+  RESTARTABLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes, flags, from, fromlen));
 }
 
-inline int os::sendto(int fd, char *buf, int len, int flags,
-                        struct sockaddr *to, int tolen) {
-  RESTARTABLE_RETURN_INT(::sendto(fd, buf, len, (unsigned int) flags, to, tolen));
+inline int os::sendto(int fd, char* buf, size_t len, uint flags,
+                      struct sockaddr* to, socklen_t tolen) {
+  RESTARTABLE_RETURN_INT((int)::sendto(fd, buf, len, flags, to, tolen));
 }
 
-inline int os::socket_shutdown(int fd, int howto){
+inline int os::socket_shutdown(int fd, int howto) {
   return ::shutdown(fd, howto);
 }
 
-inline int os::bind(int fd, struct sockaddr *him, int len){
+inline int os::bind(int fd, struct sockaddr* him, socklen_t len) {
   return ::bind(fd, him, len);
 }
 
-inline int os::get_sock_name(int fd, struct sockaddr *him, int *len){
-  return ::getsockname(fd, him, (socklen_t *)len);
+inline int os::get_sock_name(int fd, struct sockaddr* him, socklen_t* len) {
+  return ::getsockname(fd, him, len);
 }
 
-inline int os::get_host_name(char* name, int namelen){
+inline int os::get_host_name(char* name, int namelen) {
   return ::gethostname(name, namelen);
 }
 
-inline struct hostent*  os::get_host_by_name(char* name) {
+inline struct hostent* os::get_host_by_name(char* name) {
   return ::gethostbyname(name);
 }
+
 inline int os::get_sock_opt(int fd, int level, int optname,
-                             char *optval, int* optlen){
-  return ::getsockopt(fd, level, optname, optval, (socklen_t *)optlen);
+                            char* optval, socklen_t* optlen) {
+  return ::getsockopt(fd, level, optname, optval, optlen);
 }
 
 inline int os::set_sock_opt(int fd, int level, int optname,
-                             const char *optval, int optlen){
+                            const char* optval, socklen_t optlen) {
   return ::setsockopt(fd, level, optname, optval, optlen);
 }
 #endif // OS_LINUX_VM_OS_LINUX_INLINE_HPP
--- a/hotspot/src/os/solaris/vm/jvm_solaris.h	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/os/solaris/vm/jvm_solaris.h	Wed Jul 05 17:58:30 2017 +0200
@@ -33,7 +33,6 @@
 // All local includes have been commented out.
 */
 
-
 #ifndef JVM_MD_H
 #define JVM_MD_H
 
@@ -44,6 +43,7 @@
 
 #include <dirent.h>             /* For DIR */
 #include <sys/param.h>          /* For MAXPATHLEN */
+#include <sys/socket.h>         /* For socklen_t */
 #include <unistd.h>             /* For F_OK, R_OK, W_OK */
 #include <sys/int_types.h>      /* for intptr_t types (64 Bit cleanliness) */
 
@@ -82,7 +82,6 @@
 #define JVM_O_EXCL       O_EXCL
 #define JVM_O_CREAT      O_CREAT
 
-
 /* Signal definitions */
 
 #define BREAK_SIGNAL     SIGQUIT           /* Thread dumping support.    */
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -1674,7 +1674,6 @@
 }
 
 
-const int NANOSECS_PER_MILLISECS = 1000000;
 // gethrtime can move backwards if read from one cpu and then a different cpu
 // getTimeNanos is guaranteed to not move backward on Solaris
 // local spinloop created as faster for a CAS on an int than
@@ -1803,7 +1802,7 @@
 // getTimeMillis guaranteed to not move backwards on Solaris
 jlong getTimeMillis() {
   jlong nanotime = getTimeNanos();
-  return (jlong)(nanotime / NANOSECS_PER_MILLISECS);
+  return (jlong)(nanotime / NANOSECS_PER_MILLISEC);
 }
 
 // Must return millis since Jan 1 1970 for JVM_CurrentTimeMillis
@@ -6064,10 +6063,7 @@
  * is no need to track notifications.
  */
 
-#define NANOSECS_PER_SEC 1000000000
-#define NANOSECS_PER_MILLISEC 1000000
 #define MAX_SECS 100000000
-
 /*
  * This code is common to linux and solaris and will be moved to a
  * common place in dolphin.
@@ -6363,17 +6359,16 @@
   RESTARTABLE_RETURN_INT(::close(fd));
 }
 
-int os::recv(int fd, char *buf, int nBytes, int flags) {
-  INTERRUPTIBLE_RETURN_INT(::recv(fd, buf, nBytes, flags), os::Solaris::clear_interrupted);
-}
-
-
-int os::send(int fd, char *buf, int nBytes, int flags) {
-  INTERRUPTIBLE_RETURN_INT(::send(fd, buf, nBytes, flags), os::Solaris::clear_interrupted);
-}
-
-int os::raw_send(int fd, char *buf, int nBytes, int flags) {
-  RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, flags));
+int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
+  INTERRUPTIBLE_RETURN_INT((int)::recv(fd, buf, nBytes, flags), os::Solaris::clear_interrupted);
+}
+
+int os::send(int fd, char* buf, size_t nBytes, uint flags) {
+  INTERRUPTIBLE_RETURN_INT((int)::send(fd, buf, nBytes, flags), os::Solaris::clear_interrupted);
+}
+
+int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
+  RESTARTABLE_RETURN_INT((int)::send(fd, buf, nBytes, flags));
 }
 
 // As both poll and select can be interrupted by signals, we have to be
@@ -6408,19 +6403,19 @@
   }
 }
 
-int os::connect(int fd, struct sockaddr *him, int len) {
+int os::connect(int fd, struct sockaddr *him, socklen_t len) {
   int _result;
-  INTERRUPTIBLE_NORESTART(::connect(fd, him, len), _result,
+  INTERRUPTIBLE_NORESTART(::connect(fd, him, len), _result,\
                           os::Solaris::clear_interrupted);
 
   // Depending on when thread interruption is reset, _result could be
   // one of two values when errno == EINTR
 
   if (((_result == OS_INTRPT) || (_result == OS_ERR))
-                                        && (errno == EINTR)) {
+      && (errno == EINTR)) {
      /* restarting a connect() changes its errno semantics */
-     INTERRUPTIBLE(::connect(fd, him, len), _result,
-                     os::Solaris::clear_interrupted);
+     INTERRUPTIBLE(::connect(fd, him, len), _result,\
+                   os::Solaris::clear_interrupted);
      /* undo these changes */
      if (_result == OS_ERR) {
        if (errno == EALREADY) {
@@ -6434,43 +6429,38 @@
    return _result;
  }
 
-int os::accept(int fd, struct sockaddr *him, int *len) {
-  if (fd < 0)
-   return OS_ERR;
-  INTERRUPTIBLE_RETURN_INT((int)::accept(fd, him,\
-    (socklen_t*) len), os::Solaris::clear_interrupted);
- }
-
-int os::recvfrom(int fd, char *buf, int nBytes, int flags,
-                             sockaddr *from, int *fromlen) {
-   //%%note jvm_r11
-  INTERRUPTIBLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes,\
-    flags, from, fromlen), os::Solaris::clear_interrupted);
-}
-
-int os::sendto(int fd, char *buf, int len, int flags,
-                           struct sockaddr *to, int tolen) {
-  //%%note jvm_r11
-  INTERRUPTIBLE_RETURN_INT((int)::sendto(fd, buf, len, flags,\
-    to, tolen), os::Solaris::clear_interrupted);
+int os::accept(int fd, struct sockaddr* him, socklen_t* len) {
+  if (fd < 0) {
+    return OS_ERR;
+  }
+  INTERRUPTIBLE_RETURN_INT((int)::accept(fd, him, len),\
+                           os::Solaris::clear_interrupted);
+}
+
+int os::recvfrom(int fd, char* buf, size_t nBytes, uint flags,
+                 sockaddr* from, socklen_t* fromlen) {
+  INTERRUPTIBLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes, flags, from, fromlen),\
+                           os::Solaris::clear_interrupted);
+}
+
+int os::sendto(int fd, char* buf, size_t len, uint flags,
+               struct sockaddr* to, socklen_t tolen) {
+  INTERRUPTIBLE_RETURN_INT((int)::sendto(fd, buf, len, flags, to, tolen),\
+                           os::Solaris::clear_interrupted);
 }
 
 int os::socket_available(int fd, jint *pbytes) {
-   if (fd < 0)
-     return OS_OK;
-
-   int ret;
-
-   RESTARTABLE(::ioctl(fd, FIONREAD, pbytes), ret);
-
-   //%% note ioctl can return 0 when successful, JVM_SocketAvailable
-   // is expected to return 0 on failure and 1 on success to the jdk.
-
-   return (ret == OS_ERR) ? 0 : 1;
-}
-
-
-int os::bind(int fd, struct sockaddr *him, int len) {
+  if (fd < 0) {
+    return OS_OK;
+  }
+  int ret;
+  RESTARTABLE(::ioctl(fd, FIONREAD, pbytes), ret);
+  // note: ioctl can return 0 when successful, JVM_SocketAvailable
+  // is expected to return 0 on failure and 1 on success to the jdk.
+  return (ret == OS_ERR) ? 0 : 1;
+}
+
+int os::bind(int fd, struct sockaddr* him, socklen_t len) {
    INTERRUPTIBLE_RETURN_INT_NORESTART(::bind(fd, him, len),\
-     os::Solaris::clear_interrupted);
-}
+                                      os::Solaris::clear_interrupted);
+}
--- a/hotspot/src/os/solaris/vm/os_solaris.inline.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/os/solaris/vm/os_solaris.inline.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -243,24 +243,25 @@
   return ::shutdown(fd, howto);
 }
 
-inline int os::get_sock_name(int fd, struct sockaddr *him, int *len){
-  return ::getsockname(fd, him, (socklen_t*) len);
+inline int os::get_sock_name(int fd, struct sockaddr* him, socklen_t* len){
+  return ::getsockname(fd, him, len);
 }
 
 inline int os::get_host_name(char* name, int namelen){
   return ::gethostname(name, namelen);
 }
 
-inline struct hostent*  os::get_host_by_name(char* name) {
+inline struct hostent* os::get_host_by_name(char* name) {
   return ::gethostbyname(name);
 }
+
 inline int os::get_sock_opt(int fd, int level, int optname,
-                             char *optval, int* optlen){
-  return ::getsockopt(fd, level, optname, optval, (socklen_t*) optlen);
+                            char* optval, socklen_t* optlen) {
+  return ::getsockopt(fd, level, optname, optval, optlen);
 }
 
 inline int os::set_sock_opt(int fd, int level, int optname,
-                             const char *optval, int optlen){
+                            const char *optval, socklen_t optlen) {
   return ::setsockopt(fd, level, optname, optval, optlen);
 }
 #endif // OS_SOLARIS_VM_OS_SOLARIS_INLINE_HPP
--- a/hotspot/src/os/windows/vm/jvm_windows.h	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/os/windows/vm/jvm_windows.h	Wed Jul 05 17:58:30 2017 +0200
@@ -22,6 +22,9 @@
  *
  */
 
+#ifndef OS_WINDOWS_VM_JVM_WINDOWS_H
+#define OS_WINDOWS_VM_JVM_WINDOWS_H
+
 #ifndef _JAVASOFT_JVM_MD_H_
 #define _JAVASOFT_JVM_MD_H_
 
@@ -54,9 +57,9 @@
 #include <Psapi.h>
 #endif
 
+#include <Tlhelp32.h>
 
-
-#include <Tlhelp32.h>
+typedef unsigned int socklen_t;
 
 // #include "jni.h"
 
@@ -129,3 +132,5 @@
 #define SHUTDOWN2_SIGNAL SIGTERM
 
 #endif /* !_JAVASOFT_JVM_MD_H_ */
+
+#endif // OS_WINDOWS_VM_JVM_WINDOWS_H
--- a/hotspot/src/os/windows/vm/os_windows.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/os/windows/vm/os_windows.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -821,17 +821,15 @@
   }
 }
 
-#define NANOS_PER_SEC         CONST64(1000000000)
-#define NANOS_PER_MILLISEC    1000000
 jlong os::javaTimeNanos() {
   if (!has_performance_count) {
-    return javaTimeMillis() * NANOS_PER_MILLISEC; // the best we can do.
+    return javaTimeMillis() * NANOSECS_PER_MILLISEC; // the best we can do.
   } else {
     LARGE_INTEGER current_count;
     QueryPerformanceCounter(&current_count);
     double current = as_long(current_count);
     double freq = performance_frequency;
-    jlong time = (jlong)((current/freq) * NANOS_PER_SEC);
+    jlong time = (jlong)((current/freq) * NANOSECS_PER_SEC);
     return time;
   }
 }
@@ -847,15 +845,15 @@
     info_ptr->may_skip_forward = true;
   } else {
     jlong freq = performance_frequency;
-    if (freq < NANOS_PER_SEC) {
+    if (freq < NANOSECS_PER_SEC) {
       // the performance counter is 64 bits and we will
       // be multiplying it -- so no wrap in 64 bits
       info_ptr->max_value = ALL_64_BITS;
-    } else if (freq > NANOS_PER_SEC) {
+    } else if (freq > NANOSECS_PER_SEC) {
       // use the max value the counter can reach to
       // determine the max value which could be returned
       julong max_counter = (julong)ALL_64_BITS;
-      info_ptr->max_value = (jlong)(max_counter / (freq / NANOS_PER_SEC));
+      info_ptr->max_value = (jlong)(max_counter / (freq / NANOSECS_PER_SEC));
     } else {
       // the performance counter is 64 bits and we will
       // be using it directly -- so no wrap in 64 bits
@@ -4851,7 +4849,7 @@
   ::mutexUnlock(&sockFnTableMutex);
 }
 
-struct hostent*  os::get_host_by_name(char* name) {
+struct hostent* os::get_host_by_name(char* name) {
   if (!sock_initialized) {
     initSock();
   }
@@ -4882,39 +4880,39 @@
   return 0;
 }
 
-int os::connect(int fd, struct sockaddr *him, int len) {
+int os::connect(int fd, struct sockaddr* him, socklen_t len) {
   ShouldNotReachHere();
   return 0;
 }
 
-int os::accept(int fd, struct sockaddr *him, int *len) {
+int os::accept(int fd, struct sockaddr* him, socklen_t* len) {
   ShouldNotReachHere();
   return 0;
 }
 
-int os::sendto(int fd, char *buf, int len, int flags,
-                        struct sockaddr *to, int tolen) {
+int os::sendto(int fd, char* buf, size_t len, uint flags,
+               struct sockaddr* to, socklen_t tolen) {
   ShouldNotReachHere();
   return 0;
 }
 
-int os::recvfrom(int fd, char *buf, int nBytes, int flags,
-                         sockaddr *from, int *fromlen) {
+int os::recvfrom(int fd, char *buf, size_t nBytes, uint flags,
+                 sockaddr* from, socklen_t* fromlen) {
   ShouldNotReachHere();
   return 0;
 }
 
-int os::recv(int fd, char *buf, int nBytes, int flags) {
+int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
   ShouldNotReachHere();
   return 0;
 }
 
-int os::send(int fd, char *buf, int nBytes, int flags) {
+int os::send(int fd, char* buf, size_t nBytes, uint flags) {
   ShouldNotReachHere();
   return 0;
 }
 
-int os::raw_send(int fd, char *buf, int nBytes, int flags) {
+int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
   ShouldNotReachHere();
   return 0;
 }
@@ -4934,24 +4932,24 @@
   return 0;
 }
 
-int os::bind(int fd, struct sockaddr *him, int len) {
+int os::bind(int fd, struct sockaddr* him, socklen_t len) {
   ShouldNotReachHere();
   return 0;
 }
 
-int os::get_sock_name(int fd, struct sockaddr *him, int *len) {
+int os::get_sock_name(int fd, struct sockaddr* him, socklen_t* len) {
   ShouldNotReachHere();
   return 0;
 }
 
 int os::get_sock_opt(int fd, int level, int optname,
-                             char *optval, int* optlen) {
+                     char* optval, socklen_t* optlen) {
   ShouldNotReachHere();
   return 0;
 }
 
 int os::set_sock_opt(int fd, int level, int optname,
-                             const char *optval, int optlen) {
+                     const char* optval, socklen_t optlen) {
   ShouldNotReachHere();
   return 0;
 }
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -336,12 +336,6 @@
                      unallocated_block() : end());
   }
 
-  // This is needed because the default implementation uses block_start()
-  // which can;t be used at certain times (for example phase 3 of mark-sweep).
-  // A better fix is to change the assertions in phase 3 of mark-sweep to
-  // use is_in_reserved(), but that is deferred since the is_in() assertions
-  // are buried through several layers of callers and are used elsewhere
-  // as well.
   bool is_in(const void* p) const {
     return used_region().contains(p);
   }
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -1117,12 +1117,9 @@
 
 // Calculates the number of active workers for a concurrent
 // phase.
-int ConcurrentMark::calc_parallel_marking_threads() {
-
-  size_t n_conc_workers;
-  if (!G1CollectedHeap::use_parallel_gc_threads()) {
-    n_conc_workers = 1;
-  } else {
+size_t ConcurrentMark::calc_parallel_marking_threads() {
+  if (G1CollectedHeap::use_parallel_gc_threads()) {
+    size_t n_conc_workers = 0;
     if (!UseDynamicNumberOfGCThreads ||
         (!FLAG_IS_DEFAULT(ConcGCThreads) &&
          !ForceDynamicNumberOfGCThreads)) {
@@ -1137,9 +1134,13 @@
       // Don't scale down "n_conc_workers" by scale_parallel_threads() because
       // that scaling has already gone into "_max_parallel_marking_threads".
     }
+    assert(n_conc_workers > 0, "Always need at least 1");
+    return n_conc_workers;
   }
-  assert(n_conc_workers > 0, "Always need at least 1");
-  return (int) MAX2(n_conc_workers, (size_t) 1);
+  // If we are not running with any parallel GC threads we will not
+  // have spawned any marking threads either. Hence the number of
+  // concurrent workers should be 0.
+  return 0;
 }
 
 void ConcurrentMark::markFromRoots() {
@@ -1151,24 +1152,24 @@
   // stop-the-world GC happens even as we mark in this generation.
 
   _restart_for_overflow = false;
-
-  // Parallel task terminator is set in "set_phase()".
   force_overflow_conc()->init();
 
   // _g1h has _n_par_threads
-
   _parallel_marking_threads = calc_parallel_marking_threads();
   assert(parallel_marking_threads() <= max_parallel_marking_threads(),
     "Maximum number of marking threads exceeded");
-  _parallel_workers->set_active_workers((int)_parallel_marking_threads);
-  // Don't set _n_par_threads because it affects MT in proceess_strong_roots()
-  // and the decisions on that MT processing is made elsewhere.
-
-  assert( _parallel_workers->active_workers() > 0, "Should have been set");
-  set_phase(_parallel_workers->active_workers(), true /* concurrent */);
+
+  size_t active_workers = MAX2((size_t) 1, parallel_marking_threads());
+
+  // Parallel task terminator is set in "set_phase()"
+  set_phase(active_workers, true /* concurrent */);
 
   CMConcurrentMarkingTask markingTask(this, cmThread());
   if (parallel_marking_threads() > 0) {
+    _parallel_workers->set_active_workers((int)active_workers);
+    // Don't set _n_par_threads because it affects MT in proceess_strong_roots()
+    // and the decisions on that MT processing is made elsewhere.
+    assert(_parallel_workers->active_workers() > 0, "Should have been set");
     _parallel_workers->run_task(&markingTask);
   } else {
     markingTask.work(0);
@@ -1765,8 +1766,7 @@
 
   HeapRegionRemSet::reset_for_cleanup_tasks();
 
-  g1h->set_par_threads();
-  size_t n_workers = g1h->n_par_threads();
+  size_t n_workers;
 
   // Do counting once more with the world stopped for good measure.
   G1ParFinalCountTask g1_par_count_task(g1h, nextMarkBitMap(),
@@ -1776,8 +1776,10 @@
                                                HeapRegion::InitialClaimValue),
            "sanity check");
 
+    g1h->set_par_threads();
+    n_workers = g1h->n_par_threads();
     assert(g1h->n_par_threads() == (int) n_workers,
-      "Should not have been reset");
+           "Should not have been reset");
     g1h->workers()->run_task(&g1_par_count_task);
     // Done with the parallel phase so reset to 0.
     g1h->set_par_threads(0);
@@ -1786,6 +1788,7 @@
                                              HeapRegion::FinalCountClaimValue),
            "sanity check");
   } else {
+    n_workers = 1;
     g1_par_count_task.work(0);
   }
 
@@ -1851,7 +1854,6 @@
                            (note_end_end - note_end_start)*1000.0);
   }
 
-
   // call below, since it affects the metric by which we sort the heap
   // regions.
   if (G1ScrubRemSets) {
@@ -2329,9 +2331,9 @@
     }
   }
 
-  CMRemarkTask(ConcurrentMark* cm) :
+  CMRemarkTask(ConcurrentMark* cm, int active_workers) :
     AbstractGangTask("Par Remark"), _cm(cm) {
-    _cm->terminator()->reset_for_reuse(cm->_g1h->workers()->active_workers());
+    _cm->terminator()->reset_for_reuse(active_workers);
   }
 };
 
@@ -2357,7 +2359,7 @@
     // constructor and pass values of the active workers
     // through the gang in the task.
 
-    CMRemarkTask remarkTask(this);
+    CMRemarkTask remarkTask(this, active_workers);
     g1h->set_par_threads(active_workers);
     g1h->workers()->run_task(&remarkTask);
     g1h->set_par_threads(0);
@@ -2367,7 +2369,7 @@
     int active_workers = 1;
     set_phase(active_workers, false /* concurrent */);
 
-    CMRemarkTask remarkTask(this);
+    CMRemarkTask remarkTask(this, active_workers);
     // We will start all available threads, even if we decide that the
     // active_workers will be fewer. The extra ones will just bail out
     // immediately.
@@ -3123,13 +3125,12 @@
   }
 
   double start = os::elapsedTime();
-  int n_workers = g1h->workers()->total_workers();
-
   G1ParCompleteMarkInCSetTask complete_mark_task(g1h, this);
 
   assert(g1h->check_cset_heap_region_claim_values(HeapRegion::InitialClaimValue), "sanity");
 
   if (G1CollectedHeap::use_parallel_gc_threads()) {
+    int n_workers = g1h->workers()->active_workers();
     g1h->set_par_threads(n_workers);
     g1h->workers()->run_task(&complete_mark_task);
     g1h->set_par_threads(0);
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -718,7 +718,7 @@
   size_t scale_parallel_threads(size_t n_par_threads);
 
   // Calculates the number of GC threads to be used in a concurrent phase.
-  int calc_parallel_marking_threads();
+  size_t calc_parallel_marking_threads();
 
   // The following three are interaction between CM and
   // G1CollectedHeap
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -1294,7 +1294,7 @@
     g1_policy()->stop_incremental_cset_building();
 
     tear_down_region_sets(false /* free_list_only */);
-    g1_policy()->set_full_young_gcs(true);
+    g1_policy()->set_gcs_are_young(true);
 
     // See the comments in g1CollectedHeap.hpp and
     // G1CollectedHeap::ref_processing_init() about
@@ -1842,7 +1842,9 @@
   _full_collections_completed(0),
   _in_cset_fast_test(NULL),
   _in_cset_fast_test_base(NULL),
-  _dirty_cards_region_list(NULL) {
+  _dirty_cards_region_list(NULL),
+  _worker_cset_start_region(NULL),
+  _worker_cset_start_region_time_stamp(NULL) {
   _g1h = this; // To catch bugs.
   if (_process_strong_tasks == NULL || !_process_strong_tasks->valid()) {
     vm_exit_during_initialization("Failed necessary allocation.");
@@ -1863,12 +1865,17 @@
   }
   _rem_set_iterator = iter_arr;
 
+  _worker_cset_start_region = NEW_C_HEAP_ARRAY(HeapRegion*, n_queues);
+  _worker_cset_start_region_time_stamp = NEW_C_HEAP_ARRAY(unsigned int, n_queues);
+
   for (int i = 0; i < n_queues; i++) {
     RefToScanQueue* q = new RefToScanQueue();
     q->initialize();
     _task_queues->register_queue(i, q);
   }
 
+  clear_cset_start_regions();
+
   guarantee(_task_queues != NULL, "task_queues allocation failure.");
 }
 
@@ -2411,8 +2418,11 @@
 }
 
 bool G1CollectedHeap::is_in(const void* p) const {
-  HeapRegion* hr = _hrs.addr_to_region((HeapWord*) p);
-  if (hr != NULL) {
+  if (_g1_committed.contains(p)) {
+    // Given that we know that p is in the committed space,
+    // heap_region_containing_raw() should successfully
+    // return the containing region.
+    HeapRegion* hr = heap_region_containing_raw(p);
     return hr->is_in(p);
   } else {
     return _perm_gen->as_gen()->is_in(p);
@@ -2684,25 +2694,80 @@
 }
 #endif // ASSERT
 
-// We want the parallel threads to start their collection
-// set iteration at different collection set regions to
-// avoid contention.
-// If we have:
-//          n collection set regions
-//          p threads
-// Then thread t will start at region t * floor (n/p)
-
+// Clear the cached CSet starting regions and (more importantly)
+// the time stamps. Called when we reset the GC time stamp.
+void G1CollectedHeap::clear_cset_start_regions() {
+  assert(_worker_cset_start_region != NULL, "sanity");
+  assert(_worker_cset_start_region_time_stamp != NULL, "sanity");
+
+  int n_queues = MAX2((int)ParallelGCThreads, 1);
+  for (int i = 0; i < n_queues; i++) {
+    _worker_cset_start_region[i] = NULL;
+    _worker_cset_start_region_time_stamp[i] = 0;
+  }
+}
+
+// Given the id of a worker, obtain or calculate a suitable
+// starting region for iterating over the current collection set.
 HeapRegion* G1CollectedHeap::start_cset_region_for_worker(int worker_i) {
-  HeapRegion* result = g1_policy()->collection_set();
+  assert(get_gc_time_stamp() > 0, "should have been updated by now");
+
+  HeapRegion* result = NULL;
+  unsigned gc_time_stamp = get_gc_time_stamp();
+
+  if (_worker_cset_start_region_time_stamp[worker_i] == gc_time_stamp) {
+    // Cached starting region for current worker was set
+    // during the current pause - so it's valid.
+    // Note: the cached starting heap region may be NULL
+    // (when the collection set is empty).
+    result = _worker_cset_start_region[worker_i];
+    assert(result == NULL || result->in_collection_set(), "sanity");
+    return result;
+  }
+
+  // The cached entry was not valid so let's calculate
+  // a suitable starting heap region for this worker.
+
+  // We want the parallel threads to start their collection
+  // set iteration at different collection set regions to
+  // avoid contention.
+  // If we have:
+  //          n collection set regions
+  //          p threads
+  // Then thread t will start at region floor ((t * n) / p)
+
+  result = g1_policy()->collection_set();
   if (G1CollectedHeap::use_parallel_gc_threads()) {
     size_t cs_size = g1_policy()->cset_region_length();
-    int n_workers = workers()->total_workers();
-    size_t cs_spans = cs_size / n_workers;
-    size_t ind      = cs_spans * worker_i;
-    for (size_t i = 0; i < ind; i++) {
+    int active_workers = workers()->active_workers();
+    assert(UseDynamicNumberOfGCThreads ||
+             active_workers == workers()->total_workers(),
+             "Unless dynamic should use total workers");
+
+    size_t end_ind   = (cs_size * worker_i) / active_workers;
+    size_t start_ind = 0;
+
+    if (worker_i > 0 &&
+        _worker_cset_start_region_time_stamp[worker_i - 1] == gc_time_stamp) {
+      // Previous workers starting region is valid
+      // so let's iterate from there
+      start_ind = (cs_size * (worker_i - 1)) / active_workers;
+      result = _worker_cset_start_region[worker_i - 1];
+    }
+
+    for (size_t i = start_ind; i < end_ind; i++) {
       result = result->next_in_collection_set();
     }
   }
+
+  // Note: the calculated starting heap region may be NULL
+  // (when the collection set is empty).
+  assert(result == NULL || result->in_collection_set(), "sanity");
+  assert(_worker_cset_start_region_time_stamp[worker_i] != gc_time_stamp,
+         "should be updated only once per pause");
+  _worker_cset_start_region[worker_i] = result;
+  OrderAccess::storestore();
+  _worker_cset_start_region_time_stamp[worker_i] = gc_time_stamp;
   return result;
 }
 
@@ -3461,20 +3526,19 @@
     // for the duration of this pause.
     g1_policy()->decide_on_conc_mark_initiation();
 
-    // We do not allow initial-mark to be piggy-backed on a
-    // partially-young GC.
+    // We do not allow initial-mark to be piggy-backed on a mixed GC.
     assert(!g1_policy()->during_initial_mark_pause() ||
-            g1_policy()->full_young_gcs(), "sanity");
-
-    // We also do not allow partially-young GCs during marking.
-    assert(!mark_in_progress() || g1_policy()->full_young_gcs(), "sanity");
+            g1_policy()->gcs_are_young(), "sanity");
+
+    // We also do not allow mixed GCs during marking.
+    assert(!mark_in_progress() || g1_policy()->gcs_are_young(), "sanity");
 
     char verbose_str[128];
     sprintf(verbose_str, "GC pause ");
-    if (g1_policy()->full_young_gcs()) {
+    if (g1_policy()->gcs_are_young()) {
       strcat(verbose_str, "(young)");
     } else {
-      strcat(verbose_str, "(partial)");
+      strcat(verbose_str, "(mixed)");
     }
     if (g1_policy()->during_initial_mark_pause()) {
       strcat(verbose_str, " (initial-mark)");
@@ -3723,8 +3787,9 @@
         double end_time_sec = os::elapsedTime();
         double pause_time_ms = (end_time_sec - start_time_sec) * MILLIUNITS;
         g1_policy()->record_pause_time_ms(pause_time_ms);
-        int active_gc_threads = workers()->active_workers();
-        g1_policy()->record_collection_pause_end(active_gc_threads);
+        int active_workers = (G1CollectedHeap::use_parallel_gc_threads() ?
+                                workers()->active_workers() : 1);
+        g1_policy()->record_collection_pause_end(active_workers);
 
         MemoryService::track_memory_usage();
 
@@ -5248,8 +5313,10 @@
   int active_workers = (G1CollectedHeap::use_parallel_gc_threads() ?
                         workers()->active_workers() : 1);
 
-  assert(active_workers == workers()->active_workers(),
-         "Need to reset active_workers");
+  assert(!G1CollectedHeap::use_parallel_gc_threads() ||
+           active_workers == workers()->active_workers(),
+           "Need to reset active_workers");
+
   set_par_threads(active_workers);
   G1ParPreserveCMReferentsTask keep_cm_referents(this, active_workers, _task_queues);
 
@@ -5387,13 +5454,13 @@
     assert(UseDynamicNumberOfGCThreads ||
            n_workers == workers()->total_workers(),
            "If not dynamic should be using all the  workers");
+    workers()->set_active_workers(n_workers);
     set_par_threads(n_workers);
   } else {
     assert(n_par_threads() == 0,
            "Should be the original non-parallel value");
     n_workers = 1;
   }
-  workers()->set_active_workers(n_workers);
 
   G1ParTask g1_par_task(this, _task_queues);
 
@@ -5415,6 +5482,7 @@
     workers()->run_task(&g1_par_task);
   } else {
     StrongRootsScope srs(this);
+    g1_par_task.set_for_termination(n_workers);
     g1_par_task.work(0);
   }
 
@@ -5663,8 +5731,8 @@
     // Iterate over the dirty cards region list.
     G1ParCleanupCTTask cleanup_task(ct_bs, this);
 
-    if (ParallelGCThreads > 0) {
-      set_par_threads(workers()->total_workers());
+    if (G1CollectedHeap::use_parallel_gc_threads()) {
+      set_par_threads();
       workers()->run_task(&cleanup_task);
       set_par_threads(0);
     } else {
@@ -6072,8 +6140,9 @@
 void G1CollectedHeap::set_par_threads() {
   // Don't change the number of workers.  Use the value previously set
   // in the workgroup.
+  assert(G1CollectedHeap::use_parallel_gc_threads(), "shouldn't be here otherwise");
   int n_workers = workers()->active_workers();
-    assert(UseDynamicNumberOfGCThreads ||
+  assert(UseDynamicNumberOfGCThreads ||
            n_workers == workers()->total_workers(),
       "Otherwise should be using the total number of workers");
   if (n_workers == 0) {
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -943,6 +943,16 @@
   // discovery.
   G1CMIsAliveClosure _is_alive_closure_cm;
 
+  // Cache used by G1CollectedHeap::start_cset_region_for_worker().
+  HeapRegion** _worker_cset_start_region;
+
+  // Time stamp to validate the regions recorded in the cache
+  // used by G1CollectedHeap::start_cset_region_for_worker().
+  // The heap region entry for a given worker is valid iff
+  // the associated time stamp value matches the current value
+  // of G1CollectedHeap::_gc_time_stamp.
+  unsigned int* _worker_cset_start_region_time_stamp;
+
   enum G1H_process_strong_roots_tasks {
     G1H_PS_mark_stack_oops_do,
     G1H_PS_refProcessor_oops_do,
@@ -1030,6 +1040,9 @@
   void reset_gc_time_stamp() {
     _gc_time_stamp = 0;
     OrderAccess::fence();
+    // Clear the cached CSet starting regions and time stamps.
+    // Their validity is dependent on the GC timestamp.
+    clear_cset_start_regions();
   }
 
   void increment_gc_time_stamp() {
@@ -1196,7 +1209,7 @@
                                        HumongousRegionSet* humongous_proxy_set,
                                        bool par);
 
-  // Returns "TRUE" iff "p" points into the allocated area of the heap.
+  // Returns "TRUE" iff "p" points into the committed areas of the heap.
   virtual bool is_in(const void* p) const;
 
   // Return "TRUE" iff the given object address is within the collection
@@ -1300,9 +1313,12 @@
   bool check_cset_heap_region_claim_values(jint claim_value);
 #endif // ASSERT
 
-  // Given the id of a worker, calculate a suitable
-  // starting region for iterating over the current
-  // collection set.
+  // Clear the cached cset start regions and (more importantly)
+  // the time stamps. Called when we reset the GC time stamp.
+  void clear_cset_start_regions();
+
+  // Given the id of a worker, obtain or calculate a suitable
+  // starting region for iterating over the current collection set.
   HeapRegion* start_cset_region_for_worker(int worker_i);
 
   // Iterate over the regions (if any) in the current collection set.
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -50,7 +50,7 @@
 };
 
 // all the same
-static double fully_young_cards_per_entry_ratio_defaults[] = {
+static double young_cards_per_entry_ratio_defaults[] = {
   1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
 };
 
@@ -168,11 +168,10 @@
   _pending_card_diff_seq(new TruncatedSeq(TruncatedSeqLength)),
   _rs_length_diff_seq(new TruncatedSeq(TruncatedSeqLength)),
   _cost_per_card_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
-  _fully_young_cards_per_entry_ratio_seq(new TruncatedSeq(TruncatedSeqLength)),
-  _partially_young_cards_per_entry_ratio_seq(
-                                         new TruncatedSeq(TruncatedSeqLength)),
+  _young_cards_per_entry_ratio_seq(new TruncatedSeq(TruncatedSeqLength)),
+  _mixed_cards_per_entry_ratio_seq(new TruncatedSeq(TruncatedSeqLength)),
   _cost_per_entry_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
-  _partially_young_cost_per_entry_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
+  _mixed_cost_per_entry_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
   _cost_per_byte_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
   _cost_per_byte_ms_during_cm_seq(new TruncatedSeq(TruncatedSeqLength)),
   _constant_other_time_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
@@ -185,9 +184,9 @@
 
   _pause_time_target_ms((double) MaxGCPauseMillis),
 
-  _full_young_gcs(true),
-  _full_young_pause_num(0),
-  _partial_young_pause_num(0),
+  _gcs_are_young(true),
+  _young_pause_num(0),
+  _mixed_pause_num(0),
 
   _during_marking(false),
   _in_marking_window(false),
@@ -198,7 +197,8 @@
 
   _young_gc_eff_seq(new TruncatedSeq(TruncatedSeqLength)),
 
-   _recent_prev_end_times_for_all_gcs_sec(new TruncatedSeq(NumPrevPausesForHeuristics)),
+  _recent_prev_end_times_for_all_gcs_sec(
+                                new TruncatedSeq(NumPrevPausesForHeuristics)),
 
   _recent_avg_pause_time_ratio(0.0),
 
@@ -206,8 +206,9 @@
 
   _initiate_conc_mark_if_possible(false),
   _during_initial_mark_pause(false),
-  _should_revert_to_full_young_gcs(false),
-  _last_full_young_gc(false),
+  _should_revert_to_young_gcs(false),
+  _last_young_gc(false),
+  _last_gc_was_young(false),
 
   _eden_bytes_before_gc(0),
   _survivor_bytes_before_gc(0),
@@ -308,8 +309,8 @@
   _pending_card_diff_seq->add(0.0);
   _rs_length_diff_seq->add(rs_length_diff_defaults[index]);
   _cost_per_card_ms_seq->add(cost_per_card_ms_defaults[index]);
-  _fully_young_cards_per_entry_ratio_seq->add(
-                            fully_young_cards_per_entry_ratio_defaults[index]);
+  _young_cards_per_entry_ratio_seq->add(
+                                  young_cards_per_entry_ratio_defaults[index]);
   _cost_per_entry_ms_seq->add(cost_per_entry_ms_defaults[index]);
   _cost_per_byte_ms_seq->add(cost_per_byte_ms_defaults[index]);
   _constant_other_time_ms_seq->add(constant_other_time_ms_defaults[index]);
@@ -606,7 +607,7 @@
 
   size_t young_list_target_length = 0;
   if (adaptive_young_list_length()) {
-    if (full_young_gcs()) {
+    if (gcs_are_young()) {
       young_list_target_length =
                         calculate_young_list_target_length(rs_lengths,
                                                            base_min_length,
@@ -619,10 +620,10 @@
       // possible to maximize how many old regions we can add to it.
     }
   } else {
-    if (full_young_gcs()) {
+    if (gcs_are_young()) {
       young_list_target_length = _young_list_fixed_length;
     } else {
-      // A bit arbitrary: during partially-young GCs we allocate half
+      // A bit arbitrary: during mixed GCs we allocate half
       // the young regions to try to add old regions to the CSet.
       young_list_target_length = _young_list_fixed_length / 2;
       // We choose to accept that we might go under the desired min
@@ -655,7 +656,7 @@
                                                    size_t desired_min_length,
                                                    size_t desired_max_length) {
   assert(adaptive_young_list_length(), "pre-condition");
-  assert(full_young_gcs(), "only call this for fully-young GCs");
+  assert(gcs_are_young(), "only call this for young GCs");
 
   // In case some edge-condition makes the desired max length too small...
   if (desired_max_length <= desired_min_length) {
@@ -858,12 +859,11 @@
 
   _g1->clear_full_collection();
 
-  // "Nuke" the heuristics that control the fully/partially young GC
-  // transitions and make sure we start with fully young GCs after the
-  // Full GC.
-  set_full_young_gcs(true);
-  _last_full_young_gc = false;
-  _should_revert_to_full_young_gcs = false;
+  // "Nuke" the heuristics that control the young/mixed GC
+  // transitions and make sure we start with young GCs after the Full GC.
+  set_gcs_are_young(true);
+  _last_young_gc = false;
+  _should_revert_to_young_gcs = false;
   clear_initiate_conc_mark_if_possible();
   clear_during_initial_mark_pause();
   _known_garbage_bytes = 0;
@@ -892,7 +892,7 @@
   if (PrintGCDetails) {
     gclog_or_tty->stamp(PrintGCTimeStamps);
     gclog_or_tty->print("[GC pause");
-    gclog_or_tty->print(" (%s)", full_young_gcs() ? "young" : "partial");
+    gclog_or_tty->print(" (%s)", gcs_are_young() ? "young" : "mixed");
   }
 
   // We only need to do this here as the policy will only be applied
@@ -951,7 +951,7 @@
   // the evacuation pause if marking is in progress.
   _cur_satb_drain_time_ms = 0.0;
 
-  _last_young_gc_full = false;
+  _last_gc_was_young = false;
 
   // do that for any other surv rate groups
   _short_lived_surv_rate_group->stop_adding_regions();
@@ -988,8 +988,8 @@
 }
 
 void G1CollectorPolicy::record_concurrent_mark_cleanup_completed() {
-  _should_revert_to_full_young_gcs = false;
-  _last_full_young_gc = true;
+  _should_revert_to_young_gcs = false;
+  _last_young_gc = true;
   _in_marking_window = false;
 }
 
@@ -1153,7 +1153,7 @@
   size_t marking_initiating_used_threshold =
     (_g1->capacity() / 100) * InitiatingHeapOccupancyPercent;
 
-  if (!_g1->mark_in_progress() && !_last_full_young_gc) {
+  if (!_g1->mark_in_progress() && !_last_young_gc) {
     assert(!last_pause_included_initial_mark, "invariant");
     if (cur_used_bytes > marking_initiating_used_threshold) {
       if (cur_used_bytes > _prev_collection_pause_used_at_end_bytes) {
@@ -1458,57 +1458,57 @@
     new_in_marking_window_im = true;
   }
 
-  if (_last_full_young_gc) {
+  if (_last_young_gc) {
     if (!last_pause_included_initial_mark) {
-      ergo_verbose2(ErgoPartiallyYoungGCs,
-                    "start partially-young GCs",
+      ergo_verbose2(ErgoMixedGCs,
+                    "start mixed GCs",
                     ergo_format_byte_perc("known garbage"),
                     _known_garbage_bytes, _known_garbage_ratio * 100.0);
-      set_full_young_gcs(false);
+      set_gcs_are_young(false);
     } else {
-      ergo_verbose0(ErgoPartiallyYoungGCs,
-                    "do not start partially-young GCs",
+      ergo_verbose0(ErgoMixedGCs,
+                    "do not start mixed GCs",
                     ergo_format_reason("concurrent cycle is about to start"));
     }
-    _last_full_young_gc = false;
+    _last_young_gc = false;
   }
 
-  if ( !_last_young_gc_full ) {
-    if (_should_revert_to_full_young_gcs) {
-      ergo_verbose2(ErgoPartiallyYoungGCs,
-                    "end partially-young GCs",
-                    ergo_format_reason("partially-young GCs end requested")
+  if (!_last_gc_was_young) {
+    if (_should_revert_to_young_gcs) {
+      ergo_verbose2(ErgoMixedGCs,
+                    "end mixed GCs",
+                    ergo_format_reason("mixed GCs end requested")
                     ergo_format_byte_perc("known garbage"),
                     _known_garbage_bytes, _known_garbage_ratio * 100.0);
-      set_full_young_gcs(true);
+      set_gcs_are_young(true);
     } else if (_known_garbage_ratio < 0.05) {
-      ergo_verbose3(ErgoPartiallyYoungGCs,
-               "end partially-young GCs",
+      ergo_verbose3(ErgoMixedGCs,
+               "end mixed GCs",
                ergo_format_reason("known garbage percent lower than threshold")
                ergo_format_byte_perc("known garbage")
                ergo_format_perc("threshold"),
                _known_garbage_bytes, _known_garbage_ratio * 100.0,
                0.05 * 100.0);
-      set_full_young_gcs(true);
+      set_gcs_are_young(true);
     } else if (adaptive_young_list_length() &&
               (get_gc_eff_factor() * cur_efficiency < predict_young_gc_eff())) {
-      ergo_verbose5(ErgoPartiallyYoungGCs,
-                    "end partially-young GCs",
+      ergo_verbose5(ErgoMixedGCs,
+                    "end mixed GCs",
                     ergo_format_reason("current GC efficiency lower than "
-                                       "predicted fully-young GC efficiency")
+                                       "predicted young GC efficiency")
                     ergo_format_double("GC efficiency factor")
                     ergo_format_double("current GC efficiency")
-                    ergo_format_double("predicted fully-young GC efficiency")
+                    ergo_format_double("predicted young GC efficiency")
                     ergo_format_byte_perc("known garbage"),
                     get_gc_eff_factor(), cur_efficiency,
                     predict_young_gc_eff(),
                     _known_garbage_bytes, _known_garbage_ratio * 100.0);
-      set_full_young_gcs(true);
+      set_gcs_are_young(true);
     }
   }
-  _should_revert_to_full_young_gcs = false;
-
-  if (_last_young_gc_full && !_during_marking) {
+  _should_revert_to_young_gcs = false;
+
+  if (_last_gc_was_young && !_during_marking) {
     _young_gc_eff_seq->add(cur_efficiency);
   }
 
@@ -1534,19 +1534,21 @@
     double cost_per_entry_ms = 0.0;
     if (cards_scanned > 10) {
       cost_per_entry_ms = scan_rs_time / (double) cards_scanned;
-      if (_last_young_gc_full)
+      if (_last_gc_was_young) {
         _cost_per_entry_ms_seq->add(cost_per_entry_ms);
-      else
-        _partially_young_cost_per_entry_ms_seq->add(cost_per_entry_ms);
+      } else {
+        _mixed_cost_per_entry_ms_seq->add(cost_per_entry_ms);
+      }
     }
 
     if (_max_rs_lengths > 0) {
       double cards_per_entry_ratio =
         (double) cards_scanned / (double) _max_rs_lengths;
-      if (_last_young_gc_full)
-        _fully_young_cards_per_entry_ratio_seq->add(cards_per_entry_ratio);
-      else
-        _partially_young_cards_per_entry_ratio_seq->add(cards_per_entry_ratio);
+      if (_last_gc_was_young) {
+        _young_cards_per_entry_ratio_seq->add(cards_per_entry_ratio);
+      } else {
+        _mixed_cards_per_entry_ratio_seq->add(cards_per_entry_ratio);
+      }
     }
 
     // It turns out that, sometimes, _max_rs_lengths can get smaller
@@ -1563,10 +1565,11 @@
     double cost_per_byte_ms = 0.0;
     if (copied_bytes > 0) {
       cost_per_byte_ms = obj_copy_time / (double) copied_bytes;
-      if (_in_marking_window)
+      if (_in_marking_window) {
         _cost_per_byte_ms_during_cm_seq->add(cost_per_byte_ms);
-      else
+      } else {
         _cost_per_byte_ms_seq->add(cost_per_byte_ms);
+      }
     }
 
     double all_other_time_ms = pause_time_ms -
@@ -1722,10 +1725,11 @@
   size_t rs_lengths = g1h->young_list()->sampled_rs_lengths() +
                       predict_rs_length_diff();
   size_t card_num;
-  if (full_young_gcs())
+  if (gcs_are_young()) {
     card_num = predict_young_card_num(rs_lengths);
-  else
+  } else {
     card_num = predict_non_young_card_num(rs_lengths);
+  }
   size_t young_byte_size = young_num * HeapRegion::GrainBytes;
   double accum_yg_surv_rate =
     _short_lived_surv_rate_group->accum_surv_rate(adjustment);
@@ -1745,10 +1749,11 @@
 G1CollectorPolicy::predict_base_elapsed_time_ms(size_t pending_cards) {
   size_t rs_length = predict_rs_length_diff();
   size_t card_num;
-  if (full_young_gcs())
+  if (gcs_are_young()) {
     card_num = predict_young_card_num(rs_length);
-  else
+  } else {
     card_num = predict_non_young_card_num(rs_length);
+  }
   return predict_base_elapsed_time_ms(pending_cards, card_num);
 }
 
@@ -1766,10 +1771,11 @@
                                                   bool young) {
   size_t rs_length = hr->rem_set()->occupied();
   size_t card_num;
-  if (full_young_gcs())
+  if (gcs_are_young()) {
     card_num = predict_young_card_num(rs_length);
-  else
+  } else {
     card_num = predict_non_young_card_num(rs_length);
+  }
   size_t bytes_to_copy = predict_bytes_to_copy(hr);
 
   double region_elapsed_time_ms =
@@ -1817,14 +1823,14 @@
   // I don't think we need to do this when in young GC mode since
   // marking will be initiated next time we hit the soft limit anyway...
   if (predicted_time_ms > _expensive_region_limit_ms) {
-    ergo_verbose2(ErgoPartiallyYoungGCs,
-              "request partially-young GCs end",
+    ergo_verbose2(ErgoMixedGCs,
+              "request mixed GCs end",
               ergo_format_reason("predicted region time higher than threshold")
               ergo_format_ms("predicted region time")
               ergo_format_ms("threshold"),
               predicted_time_ms, _expensive_region_limit_ms);
-    // no point in doing another partial one
-    _should_revert_to_full_young_gcs = true;
+    // no point in doing another mixed GC
+    _should_revert_to_young_gcs = true;
   }
 }
 
@@ -2033,8 +2039,8 @@
     print_summary_sd(0, "Total", _all_pause_times_ms);
     gclog_or_tty->print_cr("");
     gclog_or_tty->print_cr("");
-    gclog_or_tty->print_cr("   Full Young GC Pauses:    %8d", _full_young_pause_num);
-    gclog_or_tty->print_cr("   Partial Young GC Pauses: %8d", _partial_young_pause_num);
+    gclog_or_tty->print_cr("   Young GC Pauses: %8d", _young_pause_num);
+    gclog_or_tty->print_cr("   Mixed GC Pauses: %8d", _mixed_pause_num);
     gclog_or_tty->print_cr("");
 
     gclog_or_tty->print_cr("EVACUATION PAUSES");
@@ -2188,11 +2194,11 @@
       // initiate a new cycle.
 
       set_during_initial_mark_pause();
-      // We do not allow non-full young GCs during marking.
-      if (!full_young_gcs()) {
-        set_full_young_gcs(true);
-        ergo_verbose0(ErgoPartiallyYoungGCs,
-                      "end partially-young GCs",
+      // We do not allow mixed GCs during marking.
+      if (!gcs_are_young()) {
+        set_gcs_are_young(true);
+        ergo_verbose0(ErgoMixedGCs,
+                      "end mixed GCs",
                       ergo_format_reason("concurrent cycle is about to start"));
       }
 
@@ -2623,12 +2629,12 @@
   double young_start_time_sec = os::elapsedTime();
 
   _collection_set_bytes_used_before = 0;
-  _last_young_gc_full = full_young_gcs() ? true : false;
-
-  if (_last_young_gc_full) {
-    ++_full_young_pause_num;
+  _last_gc_was_young = gcs_are_young() ? true : false;
+
+  if (_last_gc_was_young) {
+    ++_young_pause_num;
   } else {
-    ++_partial_young_pause_num;
+    ++_mixed_pause_num;
   }
 
   // The young list is laid with the survivor regions from the previous
@@ -2675,7 +2681,7 @@
   // We are doing young collections so reset this.
   non_young_start_time_sec = young_end_time_sec;
 
-  if (!full_young_gcs()) {
+  if (!gcs_are_young()) {
     bool should_continue = true;
     NumberSeq seq;
     double avg_prediction = 100000000000000000.0; // something very large
@@ -2732,14 +2738,14 @@
     } while (should_continue);
 
     if (!adaptive_young_list_length() &&
-                             cset_region_length() < _young_list_fixed_length) {
+        cset_region_length() < _young_list_fixed_length) {
       ergo_verbose2(ErgoCSetConstruction,
-                    "request partially-young GCs end",
+                    "request mixed GCs end",
                     ergo_format_reason("CSet length lower than target")
                     ergo_format_region("CSet")
                     ergo_format_region("young target"),
                     cset_region_length(), _young_list_fixed_length);
-      _should_revert_to_full_young_gcs  = true;
+      _should_revert_to_young_gcs  = true;
     }
 
     ergo_verbose2(ErgoCSetConstruction | ErgoHigh,
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -164,8 +164,8 @@
   // times for a given worker thread.
   double* _par_last_gc_worker_other_times_ms;
 
-  // indicates whether we are in full young or partially young GC mode
-  bool _full_young_gcs;
+  // indicates whether we are in young or mixed GC mode
+  bool _gcs_are_young;
 
   // if true, then it tries to dynamically adjust the length of the
   // young list
@@ -178,10 +178,10 @@
   // locker is active. This should be >= _young_list_target_length;
   size_t _young_list_max_length;
 
-  bool   _last_young_gc_full;
+  bool                  _last_gc_was_young;
 
-  unsigned              _full_young_pause_num;
-  unsigned              _partial_young_pause_num;
+  unsigned              _young_pause_num;
+  unsigned              _mixed_pause_num;
 
   bool                  _during_marking;
   bool                  _in_marking_window;
@@ -211,10 +211,10 @@
   TruncatedSeq* _pending_card_diff_seq;
   TruncatedSeq* _rs_length_diff_seq;
   TruncatedSeq* _cost_per_card_ms_seq;
-  TruncatedSeq* _fully_young_cards_per_entry_ratio_seq;
-  TruncatedSeq* _partially_young_cards_per_entry_ratio_seq;
+  TruncatedSeq* _young_cards_per_entry_ratio_seq;
+  TruncatedSeq* _mixed_cards_per_entry_ratio_seq;
   TruncatedSeq* _cost_per_entry_ms_seq;
-  TruncatedSeq* _partially_young_cost_per_entry_ms_seq;
+  TruncatedSeq* _mixed_cost_per_entry_ms_seq;
   TruncatedSeq* _cost_per_byte_ms_seq;
   TruncatedSeq* _constant_other_time_ms_seq;
   TruncatedSeq* _young_other_cost_per_region_ms_seq;
@@ -322,20 +322,22 @@
 
   size_t predict_pending_card_diff() {
     double prediction = get_new_neg_prediction(_pending_card_diff_seq);
-    if (prediction < 0.00001)
+    if (prediction < 0.00001) {
       return 0;
-    else
+    } else {
       return (size_t) prediction;
+    }
   }
 
   size_t predict_pending_cards() {
     size_t max_pending_card_num = _g1->max_pending_card_num();
     size_t diff = predict_pending_card_diff();
     size_t prediction;
-    if (diff > max_pending_card_num)
+    if (diff > max_pending_card_num) {
       prediction = max_pending_card_num;
-    else
+    } else {
       prediction = max_pending_card_num - diff;
+    }
 
     return prediction;
   }
@@ -356,57 +358,62 @@
     return (double) pending_cards * predict_cost_per_card_ms();
   }
 
-  double predict_fully_young_cards_per_entry_ratio() {
-    return get_new_prediction(_fully_young_cards_per_entry_ratio_seq);
+  double predict_young_cards_per_entry_ratio() {
+    return get_new_prediction(_young_cards_per_entry_ratio_seq);
   }
 
-  double predict_partially_young_cards_per_entry_ratio() {
-    if (_partially_young_cards_per_entry_ratio_seq->num() < 2)
-      return predict_fully_young_cards_per_entry_ratio();
-    else
-      return get_new_prediction(_partially_young_cards_per_entry_ratio_seq);
+  double predict_mixed_cards_per_entry_ratio() {
+    if (_mixed_cards_per_entry_ratio_seq->num() < 2) {
+      return predict_young_cards_per_entry_ratio();
+    } else {
+      return get_new_prediction(_mixed_cards_per_entry_ratio_seq);
+    }
   }
 
   size_t predict_young_card_num(size_t rs_length) {
     return (size_t) ((double) rs_length *
-                     predict_fully_young_cards_per_entry_ratio());
+                     predict_young_cards_per_entry_ratio());
   }
 
   size_t predict_non_young_card_num(size_t rs_length) {
     return (size_t) ((double) rs_length *
-                     predict_partially_young_cards_per_entry_ratio());
+                     predict_mixed_cards_per_entry_ratio());
   }
 
   double predict_rs_scan_time_ms(size_t card_num) {
-    if (full_young_gcs())
+    if (gcs_are_young()) {
       return (double) card_num * get_new_prediction(_cost_per_entry_ms_seq);
-    else
-      return predict_partially_young_rs_scan_time_ms(card_num);
+    } else {
+      return predict_mixed_rs_scan_time_ms(card_num);
+    }
   }
 
-  double predict_partially_young_rs_scan_time_ms(size_t card_num) {
-    if (_partially_young_cost_per_entry_ms_seq->num() < 3)
+  double predict_mixed_rs_scan_time_ms(size_t card_num) {
+    if (_mixed_cost_per_entry_ms_seq->num() < 3) {
       return (double) card_num * get_new_prediction(_cost_per_entry_ms_seq);
-    else
-      return (double) card_num *
-        get_new_prediction(_partially_young_cost_per_entry_ms_seq);
+    } else {
+      return (double) (card_num *
+                       get_new_prediction(_mixed_cost_per_entry_ms_seq));
+    }
   }
 
   double predict_object_copy_time_ms_during_cm(size_t bytes_to_copy) {
-    if (_cost_per_byte_ms_during_cm_seq->num() < 3)
-      return 1.1 * (double) bytes_to_copy *
-        get_new_prediction(_cost_per_byte_ms_seq);
-    else
+    if (_cost_per_byte_ms_during_cm_seq->num() < 3) {
+      return (1.1 * (double) bytes_to_copy) *
+              get_new_prediction(_cost_per_byte_ms_seq);
+    } else {
       return (double) bytes_to_copy *
-        get_new_prediction(_cost_per_byte_ms_during_cm_seq);
+             get_new_prediction(_cost_per_byte_ms_during_cm_seq);
+    }
   }
 
   double predict_object_copy_time_ms(size_t bytes_to_copy) {
-    if (_in_marking_window && !_in_marking_window_im)
+    if (_in_marking_window && !_in_marking_window_im) {
       return predict_object_copy_time_ms_during_cm(bytes_to_copy);
-    else
+    } else {
       return (double) bytes_to_copy *
-        get_new_prediction(_cost_per_byte_ms_seq);
+              get_new_prediction(_cost_per_byte_ms_seq);
+    }
   }
 
   double predict_constant_other_time_ms() {
@@ -414,15 +421,13 @@
   }
 
   double predict_young_other_time_ms(size_t young_num) {
-    return
-      (double) young_num *
-      get_new_prediction(_young_other_cost_per_region_ms_seq);
+    return (double) young_num *
+           get_new_prediction(_young_other_cost_per_region_ms_seq);
   }
 
   double predict_non_young_other_time_ms(size_t non_young_num) {
-    return
-      (double) non_young_num *
-      get_new_prediction(_non_young_other_cost_per_region_ms_seq);
+    return (double) non_young_num *
+           get_new_prediction(_non_young_other_cost_per_region_ms_seq);
   }
 
   void check_if_region_is_too_expensive(double predicted_time_ms);
@@ -456,7 +461,7 @@
   double predict_survivor_regions_evac_time();
 
   void cset_regions_freed() {
-    bool propagate = _last_young_gc_full && !_in_marking_window;
+    bool propagate = _last_gc_was_young && !_in_marking_window;
     _short_lived_surv_rate_group->all_surviving_words_recorded(propagate);
     _survivor_surv_rate_group->all_surviving_words_recorded(propagate);
     // also call it on any more surv rate groups
@@ -628,8 +633,8 @@
   // initial-mark work.
   volatile bool _during_initial_mark_pause;
 
-  bool _should_revert_to_full_young_gcs;
-  bool _last_full_young_gc;
+  bool _should_revert_to_young_gcs;
+  bool _last_young_gc;
 
   // This set of variables tracks the collector efficiency, in order to
   // determine whether we should initiate a new marking.
@@ -985,11 +990,11 @@
     return _young_list_max_length;
   }
 
-  bool full_young_gcs() {
-    return _full_young_gcs;
+  bool gcs_are_young() {
+    return _gcs_are_young;
   }
-  void set_full_young_gcs(bool full_young_gcs) {
-    _full_young_gcs = full_young_gcs;
+  void set_gcs_are_young(bool gcs_are_young) {
+    _gcs_are_young = gcs_are_young;
   }
 
   bool adaptive_young_list_length() {
--- a/hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -52,14 +52,13 @@
 const char* G1ErgoVerbose::to_string(int tag) {
   ErgoHeuristic n = extract_heuristic(tag);
   switch (n) {
-  case ErgoHeapSizing:            return "Heap Sizing";
-  case ErgoCSetConstruction:      return "CSet Construction";
-  case ErgoConcCycles:            return "Concurrent Cycles";
-  case ErgoPartiallyYoungGCs:     return "Partially-Young GCs";
+  case ErgoHeapSizing:        return "Heap Sizing";
+  case ErgoCSetConstruction:  return "CSet Construction";
+  case ErgoConcCycles:        return "Concurrent Cycles";
+  case ErgoMixedGCs:          return "Mixed GCs";
   default:
     ShouldNotReachHere();
     // Keep the Windows compiler happy
     return NULL;
   }
 }
-
--- a/hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -69,7 +69,7 @@
   ErgoHeapSizing = 0,
   ErgoCSetConstruction,
   ErgoConcCycles,
-  ErgoPartiallyYoungGCs,
+  ErgoMixedGCs,
 
   ErgoHeuristicNum
 } ErgoHeuristic;
--- a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -119,7 +119,7 @@
   G1CollectedHeap* _g1h;
 
   // jstat performance counters
-  //  incremental collections both fully and partially young
+  //  incremental collections both young and mixed
   CollectorCounters*   _incremental_collection_counters;
   //  full stop-the-world collections
   CollectorCounters*   _full_collection_counters;
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -672,15 +672,20 @@
 }
 
 jlong PSMarkSweep::millis_since_last_gc() {
-  jlong ret_val = os::javaTimeMillis() - _time_of_last_gc;
+  // We need a monotonically non-deccreasing time in ms but
+  // os::javaTimeMillis() does not guarantee monotonicity.
+  jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
+  jlong ret_val = now - _time_of_last_gc;
   // XXX See note in genCollectedHeap::millis_since_last_gc().
   if (ret_val < 0) {
-    NOT_PRODUCT(warning("time warp: %d", ret_val);)
+    NOT_PRODUCT(warning("time warp: "INT64_FORMAT, ret_val);)
     return 0;
   }
   return ret_val;
 }
 
 void PSMarkSweep::reset_millis_since_last_gc() {
-  _time_of_last_gc = os::javaTimeMillis();
+  // We need a monotonically non-deccreasing time in ms but
+  // os::javaTimeMillis() does not guarantee monotonicity.
+  _time_of_last_gc = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
 }
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -3398,17 +3398,22 @@
 }
 
 jlong PSParallelCompact::millis_since_last_gc() {
-  jlong ret_val = os::javaTimeMillis() - _time_of_last_gc;
+  // We need a monotonically non-deccreasing time in ms but
+  // os::javaTimeMillis() does not guarantee monotonicity.
+  jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
+  jlong ret_val = now - _time_of_last_gc;
   // XXX See note in genCollectedHeap::millis_since_last_gc().
   if (ret_val < 0) {
-    NOT_PRODUCT(warning("time warp: %d", ret_val);)
+    NOT_PRODUCT(warning("time warp: "INT64_FORMAT, ret_val);)
     return 0;
   }
   return ret_val;
 }
 
 void PSParallelCompact::reset_millis_since_last_gc() {
-  _time_of_last_gc = os::javaTimeMillis();
+  // We need a monotonically non-deccreasing time in ms but
+  // os::javaTimeMillis() does not guarantee monotonicity.
+  _time_of_last_gc = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
 }
 
 ParMarkBitMap::IterationStatus MoveAndUpdateClosure::copy_until_full()
--- a/hotspot/src/share/vm/gc_interface/collectedHeap.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_interface/collectedHeap.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -471,3 +471,26 @@
 
   return mirror;
 }
+
+/////////////// Unit tests ///////////////
+
+#ifndef PRODUCT
+void CollectedHeap::test_is_in() {
+  CollectedHeap* heap = Universe::heap();
+
+  // Test that NULL is not in the heap.
+  assert(!heap->is_in(NULL), "NULL is unexpectedly in the heap");
+
+  // Test that a pointer to before the heap start is reported as outside the heap.
+  assert(heap->_reserved.start() >= (void*)MinObjAlignment, "sanity");
+  void* before_heap = (void*)((intptr_t)heap->_reserved.start() - MinObjAlignment);
+  assert(!heap->is_in(before_heap),
+      err_msg("before_heap: " PTR_FORMAT " is unexpectedly in the heap", before_heap));
+
+  // Test that a pointer to after the heap end is reported as outside the heap.
+  assert(heap->_reserved.end() <= (void*)(uintptr_t(-1) - (uint)MinObjAlignment), "sanity");
+  void* after_heap = (void*)((intptr_t)heap->_reserved.end() + MinObjAlignment);
+  assert(!heap->is_in(after_heap),
+      err_msg("after_heap: " PTR_FORMAT " is unexpectedly in the heap", after_heap));
+}
+#endif
--- a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -217,8 +217,8 @@
     return p == NULL || is_in_reserved(p);
   }
 
-  // Returns "TRUE" if "p" points to the head of an allocated object in the
-  // heap. Since this method can be expensive in general, we restrict its
+  // Returns "TRUE" iff "p" points into the committed areas of the heap.
+  // Since this method can be expensive in general, we restrict its
   // use to assertion checking only.
   virtual bool is_in(const void* p) const = 0;
 
@@ -648,6 +648,10 @@
   // reduce the occurrence of ParallelGCThreads to uses where the
   // actual number may be germane.
   static bool use_parallel_gc_threads() { return ParallelGCThreads > 0; }
+
+  /////////////// Unit tests ///////////////
+
+  NOT_PRODUCT(static void test_is_in();)
 };
 
 // Class to set and reset the GC cause for a CollectedHeap.
--- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -957,7 +957,7 @@
   return result;
 }
 
-// Returns "TRUE" iff "p" points into the allocated area of the heap.
+// Returns "TRUE" iff "p" points into the committed areas of the heap.
 bool GenCollectedHeap::is_in(const void* p) const {
   #ifndef ASSERT
   guarantee(VerifyBeforeGC   ||
@@ -1460,26 +1460,22 @@
 };
 
 jlong GenCollectedHeap::millis_since_last_gc() {
-  jlong now = os::javaTimeMillis();
+  // We need a monotonically non-deccreasing time in ms but
+  // os::javaTimeMillis() does not guarantee monotonicity.
+  jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
   GenTimeOfLastGCClosure tolgc_cl(now);
   // iterate over generations getting the oldest
   // time that a generation was collected
   generation_iterate(&tolgc_cl, false);
   tolgc_cl.do_generation(perm_gen());
-  // XXX Despite the assert above, since javaTimeMillis()
-  // doesnot guarantee monotonically increasing return
-  // values (note, i didn't say "strictly monotonic"),
-  // we need to guard against getting back a time
-  // later than now. This should be fixed by basing
-  // on someting like gethrtime() which guarantees
-  // monotonicity. Note that cond_wait() is susceptible
-  // to a similar problem, because its interface is
-  // based on absolute time in the form of the
-  // system time's notion of UCT. See also 4506635
-  // for yet another problem of similar nature. XXX
+
+  // javaTimeNanos() is guaranteed to be monotonically non-decreasing
+  // provided the underlying platform provides such a time source
+  // (and it is bug free). So we still have to guard against getting
+  // back a time later than 'now'.
   jlong retVal = now - tolgc_cl.time();
   if (retVal < 0) {
-    NOT_PRODUCT(warning("time warp: %d", retVal);)
+    NOT_PRODUCT(warning("time warp: "INT64_FORMAT, retVal);)
     return 0;
   }
   return retVal;
--- a/hotspot/src/share/vm/memory/genCollectedHeap.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/memory/genCollectedHeap.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -198,7 +198,7 @@
   // Mostly used for testing purposes. Caller does not hold the Heap_lock on entry.
   void collect(GCCause::Cause cause, int max_level);
 
-  // Returns "TRUE" iff "p" points into the allocated area of the heap.
+  // Returns "TRUE" iff "p" points into the committed areas of the heap.
   // The methods is_in(), is_in_closed_subset() and is_in_youngest() may
   // be expensive to compute in general, so, to prevent
   // their inadvertent use in product jvm's, we restrict their use to
--- a/hotspot/src/share/vm/memory/generation.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/memory/generation.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -220,7 +220,7 @@
   MemRegion prev_used_region() const { return _prev_used_region; }
   virtual void  save_used_region()   { _prev_used_region = used_region(); }
 
-  // Returns "TRUE" iff "p" points into an allocated object in the generation.
+  // Returns "TRUE" iff "p" points into the committed areas in the generation.
   // For some kinds of generations, this may be an expensive operation.
   // To avoid performance problems stemming from its inadvertent use in
   // product jvm's, we restrict its use to assertion checking or
@@ -413,10 +413,13 @@
   // Time (in ms) when we were last collected or now if a collection is
   // in progress.
   virtual jlong time_of_last_gc(jlong now) {
-    // XXX See note in genCollectedHeap::millis_since_last_gc()
+    // Both _time_of_last_gc and now are set using a time source
+    // that guarantees monotonically non-decreasing values provided
+    // the underlying platform provides such a source. So we still
+    // have to guard against non-monotonicity.
     NOT_PRODUCT(
       if (now < _time_of_last_gc) {
-        warning("time warp: %d to %d", _time_of_last_gc, now);
+        warning("time warp: "INT64_FORMAT" to "INT64_FORMAT, _time_of_last_gc, now);
       }
     )
     return _time_of_last_gc;
--- a/hotspot/src/share/vm/memory/referenceProcessor.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -43,7 +43,9 @@
 }
 
 void ReferenceProcessor::init_statics() {
-  jlong now = os::javaTimeMillis();
+  // We need a monotonically non-deccreasing time in ms but
+  // os::javaTimeMillis() does not guarantee monotonicity.
+  jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
 
   // Initialize the soft ref timestamp clock.
   _soft_ref_timestamp_clock = now;
@@ -151,7 +153,10 @@
 void ReferenceProcessor::update_soft_ref_master_clock() {
   // Update (advance) the soft ref master clock field. This must be done
   // after processing the soft ref list.
-  jlong now = os::javaTimeMillis();
+
+  // We need a monotonically non-deccreasing time in ms but
+  // os::javaTimeMillis() does not guarantee monotonicity.
+  jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
   jlong soft_ref_clock = java_lang_ref_SoftReference::clock();
   assert(soft_ref_clock == _soft_ref_timestamp_clock, "soft ref clocks out of sync");
 
@@ -161,10 +166,11 @@
             _soft_ref_timestamp_clock, now);
   }
   )
-  // In product mode, protect ourselves from system time being adjusted
-  // externally and going backward; see note in the implementation of
-  // GenCollectedHeap::time_since_last_gc() for the right way to fix
-  // this uniformly throughout the VM; see bug-id 4741166. XXX
+  // The values of now and _soft_ref_timestamp_clock are set using
+  // javaTimeNanos(), which is guaranteed to be monotonically
+  // non-decreasing provided the underlying platform provides such
+  // a time source (and it is bug free).
+  // In product mode, however, protect ourselves from non-monotonicty.
   if (now > _soft_ref_timestamp_clock) {
     _soft_ref_timestamp_clock = now;
     java_lang_ref_SoftReference::set_clock(now);
--- a/hotspot/src/share/vm/memory/space.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/memory/space.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -304,11 +304,6 @@
   CompactibleSpace::clear(mangle_space);
 }
 
-bool Space::is_in(const void* p) const {
-  HeapWord* b = block_start_const(p);
-  return b != NULL && block_is_obj(b);
-}
-
 bool ContiguousSpace::is_in(const void* p) const {
   return _bottom <= p && p < _top;
 }
--- a/hotspot/src/share/vm/memory/space.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/memory/space.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -187,7 +187,7 @@
   // expensive operation. To prevent performance problems
   // on account of its inadvertent use in product jvm's,
   // we restrict its use to assertion checks only.
-  virtual bool is_in(const void* p) const;
+  virtual bool is_in(const void* p) const = 0;
 
   // Returns true iff the given reserved memory of the space contains the
   // given address.
--- a/hotspot/src/share/vm/oops/arrayOop.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/oops/arrayOop.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -38,9 +38,7 @@
   return (julong)(size_t)bytes == bytes;
 }
 
-bool arrayOopDesc::test_max_array_length() {
-  tty->print_cr("test_max_array_length");
-
+void arrayOopDesc::test_max_array_length() {
   assert(check_max_length_overflow(T_BOOLEAN), "size_t overflow for boolean array");
   assert(check_max_length_overflow(T_CHAR), "size_t overflow for char array");
   assert(check_max_length_overflow(T_FLOAT), "size_t overflow for float array");
@@ -54,8 +52,6 @@
   assert(check_max_length_overflow(T_NARROWOOP), "size_t overflow for narrowOop array");
 
   // T_VOID and T_ADDRESS are not supported by max_array_length()
-
-  return true;
 }
 
 
--- a/hotspot/src/share/vm/oops/arrayOop.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/oops/arrayOop.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -128,7 +128,7 @@
 #ifndef PRODUCT
   static bool check_max_length_overflow(BasicType type);
   static int32_t old_max_array_length(BasicType type);
-  static bool test_max_array_length();
+  static void test_max_array_length();
 #endif
 };
 
--- a/hotspot/src/share/vm/prims/jni.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/prims/jni.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -5037,16 +5037,25 @@
 
 #ifndef PRODUCT
 
+#include "gc_interface/collectedHeap.hpp"
 #include "utilities/quickSort.hpp"
 
+#define run_unit_test(unit_test_function_call)              \
+  tty->print_cr("Running test: " #unit_test_function_call); \
+  unit_test_function_call
+
 void execute_internal_vm_tests() {
   if (ExecuteInternalVMTests) {
-    assert(QuickSort::test_quick_sort(), "test_quick_sort failed");
-    assert(arrayOopDesc::test_max_array_length(), "test_max_array_length failed");
+    tty->print_cr("Running internal VM tests");
+    run_unit_test(arrayOopDesc::test_max_array_length());
+    run_unit_test(CollectedHeap::test_is_in());
+    run_unit_test(QuickSort::test_quick_sort());
     tty->print_cr("All internal VM tests passed");
   }
 }
 
+#undef run_unit_test
+
 #endif
 
 #ifndef USDT2
--- a/hotspot/src/share/vm/prims/jvm.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/prims/jvm.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -3515,14 +3515,14 @@
 JVM_LEAF(jint, JVM_Recv(jint fd, char *buf, jint nBytes, jint flags))
   JVMWrapper2("JVM_Recv (0x%x)", fd);
   //%note jvm_r6
-  return os::recv(fd, buf, nBytes, flags);
+  return os::recv(fd, buf, (size_t)nBytes, (uint)flags);
 JVM_END
 
 
 JVM_LEAF(jint, JVM_Send(jint fd, char *buf, jint nBytes, jint flags))
   JVMWrapper2("JVM_Send (0x%x)", fd);
   //%note jvm_r6
-  return os::send(fd, buf, nBytes, flags);
+  return os::send(fd, buf, (size_t)nBytes, (uint)flags);
 JVM_END
 
 
@@ -3543,42 +3543,51 @@
 JVM_LEAF(jint, JVM_Connect(jint fd, struct sockaddr *him, jint len))
   JVMWrapper2("JVM_Connect (0x%x)", fd);
   //%note jvm_r6
-  return os::connect(fd, him, len);
+  return os::connect(fd, him, (socklen_t)len);
 JVM_END
 
 
 JVM_LEAF(jint, JVM_Bind(jint fd, struct sockaddr *him, jint len))
   JVMWrapper2("JVM_Bind (0x%x)", fd);
   //%note jvm_r6
-  return os::bind(fd, him, len);
+  return os::bind(fd, him, (socklen_t)len);
 JVM_END
 
 
 JVM_LEAF(jint, JVM_Accept(jint fd, struct sockaddr *him, jint *len))
   JVMWrapper2("JVM_Accept (0x%x)", fd);
   //%note jvm_r6
-  return os::accept(fd, him, (int *)len);
+  socklen_t socklen = (socklen_t)(*len);
+  jint result = os::accept(fd, him, &socklen);
+  *len = (jint)socklen;
+  return result;
 JVM_END
 
 
 JVM_LEAF(jint, JVM_RecvFrom(jint fd, char *buf, int nBytes, int flags, struct sockaddr *from, int *fromlen))
   JVMWrapper2("JVM_RecvFrom (0x%x)", fd);
   //%note jvm_r6
-  return os::recvfrom(fd, buf, nBytes, flags, from, fromlen);
+  socklen_t socklen = (socklen_t)(*fromlen);
+  jint result = os::recvfrom(fd, buf, (size_t)nBytes, (uint)flags, from, &socklen);
+  *fromlen = (int)socklen;
+  return result;
 JVM_END
 
 
 JVM_LEAF(jint, JVM_GetSockName(jint fd, struct sockaddr *him, int *len))
   JVMWrapper2("JVM_GetSockName (0x%x)", fd);
   //%note jvm_r6
-  return os::get_sock_name(fd, him, len);
+  socklen_t socklen = (socklen_t)(*len);
+  jint result = os::get_sock_name(fd, him, &socklen);
+  *len = (int)socklen;
+  return result;
 JVM_END
 
 
 JVM_LEAF(jint, JVM_SendTo(jint fd, char *buf, int len, int flags, struct sockaddr *to, int tolen))
   JVMWrapper2("JVM_SendTo (0x%x)", fd);
   //%note jvm_r6
-  return os::sendto(fd, buf, len, flags, to, tolen);
+  return os::sendto(fd, buf, (size_t)len, (uint)flags, to, (socklen_t)tolen);
 JVM_END
 
 
@@ -3592,21 +3601,26 @@
 JVM_LEAF(jint, JVM_GetSockOpt(jint fd, int level, int optname, char *optval, int *optlen))
   JVMWrapper2("JVM_GetSockOpt (0x%x)", fd);
   //%note jvm_r6
-  return os::get_sock_opt(fd, level, optname, optval, optlen);
+  socklen_t socklen = (socklen_t)(*optlen);
+  jint result = os::get_sock_opt(fd, level, optname, optval, &socklen);
+  *optlen = (int)socklen;
+  return result;
 JVM_END
 
 
 JVM_LEAF(jint, JVM_SetSockOpt(jint fd, int level, int optname, const char *optval, int optlen))
   JVMWrapper2("JVM_GetSockOpt (0x%x)", fd);
   //%note jvm_r6
-  return os::set_sock_opt(fd, level, optname, optval, optlen);
+  return os::set_sock_opt(fd, level, optname, optval, (socklen_t)optlen);
 JVM_END
 
+
 JVM_LEAF(int, JVM_GetHostName(char* name, int namelen))
   JVMWrapper("JVM_GetHostName");
   return os::get_host_name(name, namelen);
 JVM_END
 
+
 // Library support ///////////////////////////////////////////////////////////////////////////
 
 JVM_ENTRY_NO_ENV(void*, JVM_LoadLibrary(const char* name))
@@ -3647,6 +3661,7 @@
   return os::dll_lookup(handle, name);
 JVM_END
 
+
 // Floating point support ////////////////////////////////////////////////////////////////////
 
 JVM_LEAF(jboolean, JVM_IsNaN(jdouble a))
@@ -3655,7 +3670,6 @@
 JVM_END
 
 
-
 // JNI version ///////////////////////////////////////////////////////////////////////////////
 
 JVM_LEAF(jboolean, JVM_IsSupportedJNIVersion(jint version))
--- a/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -43,7 +43,7 @@
 #ifdef TARGET_ARCH_ppc
 # include "bytes_ppc.hpp"
 #endif
-// FIXME: add Deprecated, LVT, LVTT attributes
+// FIXME: add Deprecated, LVTT attributes
 // FIXME: fix Synthetic attribute
 // FIXME: per Serguei, add error return handling for constantPoolOopDesc::copy_cpool_bytes()
 
@@ -136,8 +136,9 @@
   constMethodHandle const_method(thread(), method->constMethod());
   u2 line_num_cnt = 0;
   int stackmap_len = 0;
+  int local_variable_table_length = 0;
 
-  // compute number and length of attributes -- FIXME: for now no LVT
+  // compute number and length of attributes
   int attr_count = 0;
   int attr_size = 0;
   if (const_method->has_linenumber_table()) {
@@ -170,6 +171,25 @@
       attr_size += 2 + 4 + stackmap_len;
     }
   }
+  if (method->has_localvariable_table()) {
+    local_variable_table_length = method->localvariable_table_length();
+    ++attr_count;
+    if (local_variable_table_length != 0) {
+      // Compute the size of the local variable table attribute (VM stores raw):
+      // LocalVariableTable_attribute {
+      //   u2 attribute_name_index;
+      //   u4 attribute_length;
+      //   u2 local_variable_table_length;
+      //   {
+      //     u2 start_pc;
+      //     u2 length;
+      //     u2 name_index;
+      //     u2 descriptor_index;
+      //     u2 index;
+      //   }
+      attr_size += 2 + 4 + 2 + local_variable_table_length * (2 + 2 + 2 + 2 + 2);
+    }
+  }
 
   typeArrayHandle exception_table(thread(), const_method->exception_table());
   int exception_table_length = exception_table->length();
@@ -203,8 +223,9 @@
   if (stackmap_len != 0) {
     write_stackmap_table_attribute(method, stackmap_len);
   }
-
-  // FIXME: write LVT attribute
+  if (local_variable_table_length != 0) {
+    write_local_variable_table_attribute(method, local_variable_table_length);
+  }
 }
 
 // Write Exceptions attribute
@@ -371,6 +392,36 @@
   }
 }
 
+// Write LineNumberTable attribute
+// JVMSpec|   LocalVariableTable_attribute {
+// JVMSpec|     u2 attribute_name_index;
+// JVMSpec|     u4 attribute_length;
+// JVMSpec|     u2 local_variable_table_length;
+// JVMSpec|     {  u2 start_pc;
+// JVMSpec|       u2 length;
+// JVMSpec|       u2 name_index;
+// JVMSpec|       u2 descriptor_index;
+// JVMSpec|       u2 index;
+// JVMSpec|     } local_variable_table[local_variable_table_length];
+// JVMSpec|   }
+void JvmtiClassFileReconstituter::write_local_variable_table_attribute(methodHandle method, u2 num_entries) {
+    write_attribute_name_index("LocalVariableTable");
+    write_u4(2 + num_entries * (2 + 2 + 2 + 2 + 2));
+    write_u2(num_entries);
+
+    assert(method->localvariable_table_length() == num_entries, "just checking");
+
+    LocalVariableTableElement *elem = method->localvariable_table_start();
+    for (int j=0; j<method->localvariable_table_length(); j++) {
+      write_u2(elem->start_bci);
+      write_u2(elem->length);
+      write_u2(elem->name_cp_index);
+      write_u2(elem->descriptor_cp_index);
+      write_u2(elem->slot);
+      elem++;
+    }
+}
+
 // Write stack map table attribute
 // JSR-202|   StackMapTable_attribute {
 // JSR-202|     u2 attribute_name_index;
--- a/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -119,6 +119,7 @@
   void write_source_debug_extension_attribute();
   u2 line_number_table_entries(methodHandle method);
   void write_line_number_table_attribute(methodHandle method, u2 num_entries);
+  void write_local_variable_table_attribute(methodHandle method, u2 num_entries);
   void write_stackmap_table_attribute(methodHandle method, int stackmap_table_len);
   u2 inner_classes_attribute_length();
   void write_inner_classes_attribute(int length);
--- a/hotspot/src/share/vm/runtime/globals.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/runtime/globals.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -82,16 +82,19 @@
 }
 
 bool Flag::is_writeable() const {
-  return (strcmp(kind, "{manageable}") == 0 || strcmp(kind, "{product rw}") == 0);
+  return strcmp(kind, "{manageable}") == 0 ||
+         strcmp(kind, "{product rw}") == 0 ||
+         is_writeable_ext();
 }
 
-// All flags except "manageable" are assumed internal flags.
+// All flags except "manageable" are assumed to be internal flags.
 // Long term, we need to define a mechanism to specify which flags
 // are external/stable and change this function accordingly.
 bool Flag::is_external() const {
-  return (strcmp(kind, "{manageable}") == 0);
+  return strcmp(kind, "{manageable}") == 0 || is_external_ext();
 }
 
+
 // Length of format string (e.g. "%.1234s") for printing ccstr below
 #define FORMAT_BUFFER_LEN 16
 
--- a/hotspot/src/share/vm/runtime/globals.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/runtime/globals.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -245,6 +245,8 @@
 
   bool is_unlocker_ext() const;
   bool is_unlocked_ext() const;
+  bool is_writeable_ext() const;
+  bool is_external_ext() const;
 
   void print_on(outputStream* st, bool withComments = false );
   void print_as_flag(outputStream* st);
--- a/hotspot/src/share/vm/runtime/globals_ext.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/runtime/globals_ext.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -53,4 +53,12 @@
   return true;
 }
 
+inline bool Flag::is_writeable_ext() const {
+  return false;
+}
+
+inline bool Flag::is_external_ext() const {
+  return false;
+}
+
 #endif // SHARE_VM_RUNTIME_GLOBALS_EXT_HPP
--- a/hotspot/src/share/vm/runtime/os.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/runtime/os.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -584,28 +584,28 @@
   static int socket(int domain, int type, int protocol);
   static int socket_close(int fd);
   static int socket_shutdown(int fd, int howto);
-  static int recv(int fd, char *buf, int nBytes, int flags);
-  static int send(int fd, char *buf, int nBytes, int flags);
-  static int raw_send(int fd, char *buf, int nBytes, int flags);
+  static int recv(int fd, char* buf, size_t nBytes, uint flags);
+  static int send(int fd, char* buf, size_t nBytes, uint flags);
+  static int raw_send(int fd, char* buf, size_t nBytes, uint flags);
   static int timeout(int fd, long timeout);
   static int listen(int fd, int count);
-  static int connect(int fd, struct sockaddr *him, int len);
-  static int bind(int fd, struct sockaddr *him, int len);
-  static int accept(int fd, struct sockaddr *him, int *len);
-  static int recvfrom(int fd, char *buf, int nbytes, int flags,
-                             struct sockaddr *from, int *fromlen);
-  static int get_sock_name(int fd, struct sockaddr *him, int *len);
-  static int sendto(int fd, char *buf, int len, int flags,
-                           struct sockaddr *to, int tolen);
-  static int socket_available(int fd, jint *pbytes);
+  static int connect(int fd, struct sockaddr* him, socklen_t len);
+  static int bind(int fd, struct sockaddr* him, socklen_t len);
+  static int accept(int fd, struct sockaddr* him, socklen_t* len);
+  static int recvfrom(int fd, char* buf, size_t nbytes, uint flags,
+                      struct sockaddr* from, socklen_t* fromlen);
+  static int get_sock_name(int fd, struct sockaddr* him, socklen_t* len);
+  static int sendto(int fd, char* buf, size_t len, uint flags,
+                    struct sockaddr* to, socklen_t tolen);
+  static int socket_available(int fd, jint* pbytes);
 
   static int get_sock_opt(int fd, int level, int optname,
-                           char *optval, int* optlen);
+                          char* optval, socklen_t* optlen);
   static int set_sock_opt(int fd, int level, int optname,
-                           const char *optval, int optlen);
+                          const char* optval, socklen_t optlen);
   static int get_host_name(char* name, int namelen);
 
-  static struct hostent*  get_host_by_name(char* name);
+  static struct hostent* get_host_by_name(char* name);
 
   // Printing 64 bit integers
   static const char* jlong_format_specifier();
@@ -715,7 +715,6 @@
 # include "os_bsd_zero.hpp"
 #endif
 
-
   // debugging support (mostly used by debug.cpp but also fatal error handler)
   static bool find(address pc, outputStream* st = tty); // OS specific function to make sense out of an address
 
--- a/hotspot/src/share/vm/services/management.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/services/management.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -33,6 +33,7 @@
 #include "oops/objArrayKlass.hpp"
 #include "oops/oop.inline.hpp"
 #include "runtime/arguments.hpp"
+#include "runtime/globals.hpp"
 #include "runtime/handles.inline.hpp"
 #include "runtime/interfaceSupport.hpp"
 #include "runtime/javaCalls.hpp"
--- a/hotspot/src/share/vm/utilities/globalDefinitions.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/utilities/globalDefinitions.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -175,6 +175,9 @@
 const int MICROUNITS    = 1000000;      // micro units per base unit
 const int NANOUNITS     = 1000000000;   // nano units per base unit
 
+const jlong NANOSECS_PER_SEC      = CONST64(1000000000);
+const jint  NANOSECS_PER_MILLISEC = 1000000;
+
 inline const char* proper_unit_for_byte_size(size_t s) {
   if (s >= 10*M) {
     return "M";
--- a/hotspot/src/share/vm/utilities/ostream.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/utilities/ostream.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -1021,7 +1021,7 @@
 
 void networkStream::flush() {
   if (size() != 0) {
-    int result = os::raw_send(_socket, (char *)base(), (int)size(), 0);
+    int result = os::raw_send(_socket, (char *)base(), size(), 0);
     assert(result != -1, "connection error");
     assert(result == (int)size(), "didn't send enough data");
   }
--- a/hotspot/src/share/vm/utilities/quickSort.cpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/utilities/quickSort.cpp	Wed Jul 05 17:58:30 2017 +0200
@@ -93,8 +93,7 @@
   return compare_arrays(arrayToSort, expectedResult, length);
 }
 
-bool QuickSort::test_quick_sort() {
-  tty->print_cr("test_quick_sort");
+void QuickSort::test_quick_sort() {
   {
     int* test_array = NULL;
     int* expected_array = NULL;
@@ -214,7 +213,6 @@
     delete[] test_array;
     delete[] expected_array;
   }
-  return true;
 }
 
 #endif
--- a/hotspot/src/share/vm/utilities/quickSort.hpp	Fri Dec 23 16:39:22 2011 -0800
+++ b/hotspot/src/share/vm/utilities/quickSort.hpp	Wed Jul 05 17:58:30 2017 +0200
@@ -130,7 +130,7 @@
   static void print_array(const char* prefix, int* array, int length);
   static bool compare_arrays(int* actual, int* expected, int length);
   template <class C> static bool sort_and_compare(int* arrayToSort, int* expectedResult, int length, C comparator, bool idempotent = false);
-  static bool test_quick_sort();
+  static void test_quick_sort();
 #endif
 };
 
--- a/jaxp/.hgtags	Fri Dec 23 16:39:22 2011 -0800
+++ b/jaxp/.hgtags	Wed Jul 05 17:58:30 2017 +0200
@@ -139,3 +139,4 @@
 804f666d6d44e33caac12ad8da3d2780ac44ef72 jdk8-b15
 09eb517404b059607aca30cdd1af83ffc57eafeb jdk8-b17
 09eb517404b059607aca30cdd1af83ffc57eafeb jdk8-b16
+ebec6a7e8d4e481d205a2109ddeea8121d76db7f jdk8-b18
--- a/jaxp/build.xml	Fri Dec 23 16:39:22 2011 -0800
+++ b/jaxp/build.xml	Wed Jul 05 17:58:30 2017 +0200
@@ -43,14 +43,6 @@
       Run 'make help' for help using the Makefile.
     </description>
 
-    <!-- Mac is special, need to downgrade these before build.properties. -->
-    <condition property="javac.source" value="1.5">
-        <os family="mac"/>
-    </condition>
-    <condition property="javac.target" value="1.5">
-        <os family="mac"/>
-    </condition>
-
     <!-- Project build properties. -->
     <property file="build.properties"/>
 
--- a/jaxp/make/jprt.properties	Fri Dec 23 16:39:22 2011 -0800
+++ b/jaxp/make/jprt.properties	Wed Jul 05 17:58:30 2017 +0200
@@ -25,21 +25,21 @@
 
 # Properties for jprt
 
-# The release to build
+# Locked down to jdk8
 jprt.tools.default.release=jdk8
 
 # The different build flavors we want, we override here so we just get these 2
 jprt.build.flavors=product,fastdebug
 
 # Standard list of jprt build targets for this source tree
-jprt.build.targets= 						\
-    solaris_sparc_5.10-{product|fastdebug}, 			\
-    solaris_sparcv9_5.10-{product|fastdebug}, 			\
-    solaris_i586_5.10-{product|fastdebug}, 			\
-    solaris_x64_5.10-{product|fastdebug}, 			\
-    linux_i586_2.6-{product|fastdebug}, 			\
-    linux_x64_2.6-{product|fastdebug}, 				\
-    windows_i586_5.1-{product|fastdebug}, 			\
+jprt.build.targets=                                             \
+    solaris_sparc_5.10-{product|fastdebug},                     \
+    solaris_sparcv9_5.10-{product|fastdebug},                   \
+    solaris_i586_5.10-{product|fastdebug},                      \
+    solaris_x64_5.10-{product|fastdebug},                       \
+    linux_i586_2.6-{product|fastdebug},                         \
+    linux_x64_2.6-{product|fastdebug},                          \
+    windows_i586_5.1-{product|fastdebug},                       \
     windows_x64_5.2-{product|fastdebug}
 
 # Directories to be excluded from the source bundles
--- a/jaxws/.hgtags	Fri Dec 23 16:39:22 2011 -0800
+++ b/jaxws/.hgtags	Wed Jul 05 17:58:30 2017 +0200
@@ -139,3 +139,4 @@
 c9ab96ff23d52d85d5dcce1f9c0fd7a3de418c74 jdk8-b15
 3d45ab79643d5b4cc7e050ae2d9c08b4d89d665e jdk8-b17
 3d45ab79643d5b4cc7e050ae2d9c08b4d89d665e jdk8-b16
+54928c8850f5498670dd43d6c9299f36de1a6746 jdk8-b18
--- a/jaxws/build.xml	Fri Dec 23 16:39:22 2011 -0800
+++ b/jaxws/build.xml	Wed Jul 05 17:58:30 2017 +0200
@@ -43,14 +43,6 @@
       Run 'make help' for help using the Makefile.
     </description>
 
-    <!-- Mac is special, need to downgrade these before build.properties. -->
-    <condition property="javac.source" value="1.5">
-        <os family="mac"/>
-    </condition>
-    <condition property="javac.target" value="1.5">
-        <os family="mac"/>
-    </condition>
-
     <!-- Project build properties. -->
     <property file="build.properties"/>
 
--- a/jaxws/make/jprt.properties	Fri Dec 23 16:39:22 2011 -0800
+++ b/jaxws/make/jprt.properties	Wed Jul 05 17:58:30 2017 +0200
@@ -25,21 +25,21 @@
 
 # Properties for jprt
 
-# The release to build
+# Locked down to jdk8
 jprt.tools.default.release=jdk8
 
 # The different build flavors we want, we override here so we just get these 2
 jprt.build.flavors=product,fastdebug
 
 # Standard list of jprt build targets for this source tree
-jprt.build.targets= 						\
-    solaris_sparc_5.10-{product|fastdebug}, 			\
-    solaris_sparcv9_5.10-{product|fastdebug}, 			\
-    solaris_i586_5.10-{product|fastdebug}, 			\
-    solaris_x64_5.10-{product|fastdebug}, 			\
-    linux_i586_2.6-{product|fastdebug}, 			\
-    linux_x64_2.6-{product|fastdebug}, 				\
-    windows_i586_5.1-{product|fastdebug}, 			\
+jprt.build.targets=                                             \
+    solaris_sparc_5.10-{product|fastdebug},                     \
+    solaris_sparcv9_5.10-{product|fastdebug},                   \
+    solaris_i586_5.10-{product|fastdebug},                      \
+    solaris_x64_5.10-{product|fastdebug},                       \
+    linux_i586_2.6-{product|fastdebug},                         \
+    linux_x64_2.6-{product|fastdebug},                          \
+    windows_i586_5.1-{product|fastdebug},                       \
     windows_x64_5.2-{product|fastdebug}
 
 # Directories to be excluded from the source bundles
--- a/jdk/.hgtags	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/.hgtags	Wed Jul 05 17:58:30 2017 +0200
@@ -139,3 +139,4 @@
 3c248d0e2c486624cc0d7aba1e4df45ae5774ff7 jdk8-b15
 b71d1acfae5240d8c1359443cd02b5ddb587231c jdk8-b17
 929597c6e777f742ad252660045ebaa4a3ea4772 jdk8-b16
+334bd51fb3f321cd6777416ae7bafac71a84140a jdk8-b18
--- a/jdk/make/common/Rules.gmk	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/make/common/Rules.gmk	Wed Jul 05 17:58:30 2017 +0200
@@ -239,7 +239,7 @@
 	    $(CAT) $<.filtered; \
 	    $(ECHO) "# Running javac: $$numfiles files; in $(CURDIR)"; \
 	    $(ECHO) $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered; \
-	    $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered; \
+	    $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered && \
 	    $(ECHO) "# javac finished"; \
 	  fi
 	@$(java-vm-cleanup)
--- a/jdk/make/jprt.properties	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/make/jprt.properties	Wed Jul 05 17:58:30 2017 +0200
@@ -25,15 +25,15 @@
 
 # Properties for jprt
 
-# Release to build for
+# Locked down to jdk8
 jprt.tools.default.release=jdk8
 
 # The different build flavors we want, we override here so we just get these 2
 jprt.build.flavors=product,fastdebug
 
 # Standard list of jprt build targets for this source tree
-jprt.build.targets= 						\
-    solaris_sparc_5.10-{product|fastdebug}, 			\
+jprt.build.targets=                                         	\
+    solaris_sparc_5.10-{product|fastdebug},                 	\
     solaris_sparcv9_5.10-{product|fastdebug}, 			\
     solaris_i586_5.10-{product|fastdebug}, 			\
     solaris_x64_5.10-{product|fastdebug}, 			\
@@ -45,247 +45,59 @@
 # User can select the test set with jprt submit "-testset name" option
 jprt.my.test.set=${jprt.test.set}
 
-# Standard vm test target
+# Test target list (no fastdebug & limited c2 testing)
+jprt.my.test.target.set= \
+    solaris_sparc_5.10-product-c1-TESTNAME,                     \
+    solaris_sparcv9_5.10-product-c2-TESTNAME,                   \
+    solaris_i586_5.10-product-c1-TESTNAME,                      \
+    solaris_x64_5.10-product-c2-TESTNAME,                       \
+    linux_i586_2.6-product-{c1|c2}-TESTNAME,                    \
+    linux_x64_2.6-product-c2-TESTNAME,                          \
+    windows_i586_5.1-product-c1-TESTNAME,                       \
+    windows_x64_5.2-product-c2-TESTNAME
+
+# Default vm test targets (testset=default)
 jprt.vm.default.test.targets=					\
-    solaris_sparc_5.10-product-c1-jvm98, 			\
-    solaris_sparcv9_5.10-product-c2-jvm98, 			\
-    solaris_i586_5.10-product-c1-jvm98, 			\
-    solaris_x64_5.10-product-c2-jvm98, 				\
-    linux_i586_2.6-product-{c1|c2}-jvm98, 			\
-    linux_x64_2.6-product-c2-jvm98, 				\
-    windows_i586_5.1-product-c1-jvm98, 				\
-    windows_x64_5.2-product-c2-jvm98
+    ${jprt.my.test.target.set:TESTNAME=jvm98}
 
-# Select vm testlist to use (allow for testset to be empty too)
-jprt.vm.all.test.targets=${jprt.vm.default.test.targets}
-jprt.vm..test.targets=${jprt.vm.default.test.targets} 
-jprt.test.targets=${jprt.vm.${jprt.my.test.set}.test.targets} 
+# Default jdk test targets (testset=default)
+jprt.make.rule.default.test.targets=				\
+    ${jprt.my.test.target.set:TESTNAME=jdk_beans1},             \
+    ${jprt.my.test.target.set:TESTNAME=jdk_io},                 \
+    ${jprt.my.test.target.set:TESTNAME=jdk_lang},               \
+    ${jprt.my.test.target.set:TESTNAME=jdk_math},               \
+    ${jprt.my.test.target.set:TESTNAME=jdk_misc},               \
+    ${jprt.my.test.target.set:TESTNAME=jdk_net},                \
+    ${jprt.my.test.target.set:TESTNAME=jdk_nio1},               \
+    ${jprt.my.test.target.set:TESTNAME=jdk_nio2},               \
+    ${jprt.my.test.target.set:TESTNAME=jdk_nio3},               \
+    ${jprt.my.test.target.set:TESTNAME=jdk_security1},          \
+    ${jprt.my.test.target.set:TESTNAME=jdk_text},               \
+    ${jprt.my.test.target.set:TESTNAME=jdk_util}
 
-# Default jdk test targets in test/Makefile (no fastdebug & limited c2)
-jprt.make.rule.default.test.targets=				\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_beans1, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_beans1, 		\
-    solaris_i586_5.10-product-c1-jdk_beans1, 			\
-    solaris_x64_5.10-product-c2-jdk_beans1, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_beans1, 			\
-    linux_x64_2.6-product-c2-jdk_beans1, 			\
-    windows_i586_5.1-product-c1-jdk_beans1, 			\
-    windows_x64_5.2-product-c2-jdk_beans1, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_io, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_io, 			\
-    solaris_i586_5.10-product-c1-jdk_io, 			\
-    solaris_x64_5.10-product-c2-jdk_io, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_io, 			\
-    linux_x64_2.6-product-c2-jdk_io, 				\
-    windows_i586_5.1-product-c1-jdk_io, 			\
-    windows_x64_5.2-product-c2-jdk_io, 				\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_lang, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_lang, 			\
-    solaris_i586_5.10-product-c1-jdk_lang, 			\
-    solaris_x64_5.10-product-c2-jdk_lang, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_lang, 			\
-    linux_x64_2.6-product-c2-jdk_lang, 				\
-    windows_i586_5.1-product-c1-jdk_lang, 			\
-    windows_x64_5.2-product-c2-jdk_lang, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_math, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_math, 			\
-    solaris_i586_5.10-product-c1-jdk_math, 			\
-    solaris_x64_5.10-product-c2-jdk_math, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_math, 			\
-    linux_x64_2.6-product-c2-jdk_math, 				\
-    windows_i586_5.1-product-c1-jdk_math, 			\
-    windows_x64_5.2-product-c2-jdk_math, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_misc, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_misc, 			\
-    solaris_i586_5.10-product-c1-jdk_misc, 			\
-    solaris_x64_5.10-product-c2-jdk_misc, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_misc, 			\
-    linux_x64_2.6-product-c2-jdk_misc, 				\
-    windows_i586_5.1-product-c1-jdk_misc, 			\
-    windows_x64_5.2-product-c2-jdk_misc, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_net, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_net, 			\
-    solaris_i586_5.10-product-c1-jdk_net, 			\
-    solaris_x64_5.10-product-c2-jdk_net, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_net, 			\
-    linux_x64_2.6-product-c2-jdk_net, 				\
-    windows_i586_5.1-product-c1-jdk_net, 			\
-    windows_x64_5.2-product-c2-jdk_net, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_nio1, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_nio1, 			\
-    solaris_i586_5.10-product-c1-jdk_nio1, 			\
-    solaris_x64_5.10-product-c2-jdk_nio1, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_nio1, 			\
-    linux_x64_2.6-product-c2-jdk_nio1, 				\
-    windows_i586_5.1-product-c1-jdk_nio1, 			\
-    windows_x64_5.2-product-c2-jdk_nio1, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_nio2, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_nio2, 			\
-    solaris_i586_5.10-product-c1-jdk_nio2, 			\
-    solaris_x64_5.10-product-c2-jdk_nio2, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_nio2, 			\
-    linux_x64_2.6-product-c2-jdk_nio2, 				\
-    windows_i586_5.1-product-c1-jdk_nio2, 			\
-    windows_x64_5.2-product-c2-jdk_nio2, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_nio3, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_nio3, 			\
-    solaris_i586_5.10-product-c1-jdk_nio3, 			\
-    solaris_x64_5.10-product-c2-jdk_nio3, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_nio3, 			\
-    linux_x64_2.6-product-c2-jdk_nio3, 				\
-    windows_i586_5.1-product-c1-jdk_nio3, 			\
-    windows_x64_5.2-product-c2-jdk_nio3, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_security1, 		\
-    solaris_sparcv9_5.10-product-c2-jdk_security1, 		\
-    solaris_i586_5.10-product-c1-jdk_security1, 		\
-    solaris_x64_5.10-product-c2-jdk_security1, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_security1, 		\
-    linux_x64_2.6-product-c2-jdk_security1, 			\
-    windows_i586_5.1-product-c1-jdk_security1, 			\
-    windows_x64_5.2-product-c2-jdk_security1, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_text, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_text, 			\
-    solaris_i586_5.10-product-c1-jdk_text, 			\
-    solaris_x64_5.10-product-c2-jdk_text, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_text, 			\
-    linux_x64_2.6-product-c2-jdk_text, 				\
-    windows_i586_5.1-product-c1-jdk_text, 			\
-    windows_x64_5.2-product-c2-jdk_text, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_tools1, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_tools1, 		\
-    solaris_i586_5.10-product-c1-jdk_tools1, 			\
-    solaris_x64_5.10-product-c2-jdk_tools1, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_tools1, 			\
-    linux_x64_2.6-product-c2-jdk_tools1, 			\
-    windows_i586_5.1-product-c1-jdk_tools1, 			\
-    windows_x64_5.2-product-c2-jdk_tools1, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_util, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_util, 			\
-    solaris_i586_5.10-product-c1-jdk_util, 			\
-    solaris_x64_5.10-product-c2-jdk_util, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_util, 			\
-    linux_x64_2.6-product-c2-jdk_util, 				\
-    windows_i586_5.1-product-c1-jdk_util, 			\
-    windows_x64_5.2-product-c2-jdk_util
+# All vm test targets (testset=all)
+jprt.vm.all.test.targets=                                       \
+    ${jprt.vm.default.test.targets},                            \
+    ${jprt.my.test.target.set:TESTNAME=runThese},               \
+    ${jprt.my.test.target.set:TESTNAME=jbb_default}
 
-# All jdk test targets in test/Makefile (still no fastdebug & limited c2)
+# All jdk test targets (testset=all)
 jprt.make.rule.all.test.targets=    				\
-    								\
-   ${jprt.make.rule.default.test.targets}, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_awt, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_awt, 			\
-    solaris_i586_5.10-product-c1-jdk_awt, 			\
-    solaris_x64_5.10-product-c2-jdk_awt, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_awt, 			\
-    linux_x64_2.6-product-c2-jdk_awt, 				\
-    windows_i586_5.1-product-c1-jdk_awt, 			\
-    windows_x64_5.2-product-c2-jdk_awt, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_beans2, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_beans2, 		\
-    solaris_i586_5.10-product-c1-jdk_beans2, 			\
-    solaris_x64_5.10-product-c2-jdk_beans2, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_beans2, 			\
-    linux_x64_2.6-product-c2-jdk_beans2, 			\
-    windows_i586_5.1-product-c1-jdk_beans2, 			\
-    windows_x64_5.2-product-c2-jdk_beans2, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_beans3, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_beans3, 		\
-    solaris_i586_5.10-product-c1-jdk_beans3, 			\
-    solaris_x64_5.10-product-c2-jdk_beans3, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_beans3, 			\
-    linux_x64_2.6-product-c2-jdk_beans3, 			\
-    windows_i586_5.1-product-c1-jdk_beans3, 			\
-    windows_x64_5.2-product-c2-jdk_beans3, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_management1, 		\
-    solaris_sparcv9_5.10-product-c2-jdk_management1, 		\
-    solaris_i586_5.10-product-c1-jdk_management1, 		\
-    solaris_x64_5.10-product-c2-jdk_management1, 		\
-    linux_i586_2.6-product-{c1|c2}-jdk_management1, 		\
-    linux_x64_2.6-product-c2-jdk_management1, 			\
-    windows_i586_5.1-product-c1-jdk_management1, 		\
-    windows_x64_5.2-product-c2-jdk_management1, 		\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_management2, 		\
-    solaris_sparcv9_5.10-product-c2-jdk_management2, 		\
-    solaris_i586_5.10-product-c1-jdk_management2, 		\
-    solaris_x64_5.10-product-c2-jdk_management2, 		\
-    linux_i586_2.6-product-{c1|c2}-jdk_management2, 		\
-    linux_x64_2.6-product-c2-jdk_management2, 			\
-    windows_i586_5.1-product-c1-jdk_management2, 		\
-    windows_x64_5.2-product-c2-jdk_management2, 		\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_rmi, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_rmi, 			\
-    solaris_i586_5.10-product-c1-jdk_rmi, 			\
-    solaris_x64_5.10-product-c2-jdk_rmi, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_rmi, 			\
-    linux_x64_2.6-product-c2-jdk_rmi, 				\
-    windows_i586_5.1-product-c1-jdk_rmi, 			\
-    windows_x64_5.2-product-c2-jdk_rmi, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_security2, 		\
-    solaris_sparcv9_5.10-product-c2-jdk_security2, 		\
-    solaris_i586_5.10-product-c1-jdk_security2, 		\
-    solaris_x64_5.10-product-c2-jdk_security2, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_security2, 		\
-    linux_x64_2.6-product-c2-jdk_security2, 			\
-    windows_i586_5.1-product-c1-jdk_security2, 			\
-    windows_x64_5.2-product-c2-jdk_security2, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_security3, 		\
-    solaris_sparcv9_5.10-product-c2-jdk_security3, 		\
-    solaris_i586_5.10-product-c1-jdk_security3, 		\
-    solaris_x64_5.10-product-c2-jdk_security3, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_security3, 		\
-    linux_x64_2.6-product-c2-jdk_security3, 			\
-    windows_i586_5.1-product-c1-jdk_security3, 			\
-    windows_x64_5.2-product-c2-jdk_security3, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_sound, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_sound, 			\
-    solaris_i586_5.10-product-c1-jdk_sound, 			\
-    solaris_x64_5.10-product-c2-jdk_sound, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_sound, 			\
-    linux_x64_2.6-product-c2-jdk_sound, 			\
-    windows_i586_5.1-product-c1-jdk_sound, 			\
-    windows_x64_5.2-product-c2-jdk_sound, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_swing, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_swing, 			\
-    solaris_i586_5.10-product-c1-jdk_swing, 			\
-    solaris_x64_5.10-product-c2-jdk_swing, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_swing, 			\
-    linux_x64_2.6-product-c2-jdk_swing, 			\
-    windows_i586_5.1-product-c1-jdk_swing, 			\
-    windows_x64_5.2-product-c2-jdk_swing, 			\
-    								\
-    solaris_sparc_5.10-product-c1-jdk_tools2, 			\
-    solaris_sparcv9_5.10-product-c2-jdk_tools2, 		\
-    solaris_i586_5.10-product-c1-jdk_tools2, 			\
-    solaris_x64_5.10-product-c2-jdk_tools2, 			\
-    linux_i586_2.6-product-{c1|c2}-jdk_tools2, 			\
-    linux_x64_2.6-product-c2-jdk_tools2, 			\
-    windows_i586_5.1-product-c1-jdk_tools2, 			\
-    windows_x64_5.2-product-c2-jdk_tools2
+    ${jprt.make.rule.default.test.targets}, 			\
+    ${jprt.my.test.target.set:TESTNAME=jdk_awt},                \
+    ${jprt.my.test.target.set:TESTNAME=jdk_beans2},             \
+    ${jprt.my.test.target.set:TESTNAME=jdk_beans3},             \
+    ${jprt.my.test.target.set:TESTNAME=jdk_management1},        \
+    ${jprt.my.test.target.set:TESTNAME=jdk_management2},        \
+    ${jprt.my.test.target.set:TESTNAME=jdk_rmi},                \
+    ${jprt.my.test.target.set:TESTNAME=jdk_security2},          \
+    ${jprt.my.test.target.set:TESTNAME=jdk_security3},          \
+    ${jprt.my.test.target.set:TESTNAME=jdk_sound},              \
+    ${jprt.my.test.target.set:TESTNAME=jdk_swing},              \
+    ${jprt.my.test.target.set:TESTNAME=jdk_tools1},             \
+    ${jprt.my.test.target.set:TESTNAME=jdk_tools2}
 
-# JCK test targets in test/Makefile (no fastdebug & limited c2, windows broken)
+# JCK test targets in test/Makefile (no windows)
 jprt.my.jck.test.target.set=					\
     solaris_sparc_5.10-product-c1-JCK7TESTRULE, 		\
     solaris_sparcv9_5.10-product-c2-JCK7TESTRULE, 		\
@@ -301,8 +113,10 @@
     ${jprt.my.jck.test.target.set:JCK7TESTRULE=jck7compiler}
 
 # Select list to use (allow for testset to be empty too)
-jprt.make.rule..test.targets=${jprt.make.rule.default.test.targets} 
-jprt.make.rule.test.targets=${jprt.make.rule.${jprt.my.test.set}.test.targets} 
+jprt.make.rule..test.targets=${jprt.make.rule.default.test.targets}
+jprt.make.rule.test.targets=${jprt.make.rule.${jprt.my.test.set}.test.targets}
+jprt.vm..test.targets=${jprt.vm.default.test.targets}
+jprt.test.targets=${jprt.vm.${jprt.my.test.set}.test.targets}
 
 # Directories to be excluded from the source bundles
 jprt.bundle.exclude.src.dirs=build dist webrev
--- a/jdk/make/tools/src/build/tools/jdwpgen/ArrayRegionTypeNode.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/make/tools/src/build/tools/jdwpgen/ArrayRegionTypeNode.java	Wed Jul 05 17:58:30 2017 +0200
@@ -35,7 +35,7 @@
     }
 
     String javaType() {
-        return "List";
+        return "List<?>";
     }
 
     public void genJavaWrite(PrintWriter writer, int depth,
--- a/jdk/make/tools/src/build/tools/jdwpgen/OutNode.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/make/tools/src/build/tools/jdwpgen/OutNode.java	Wed Jul 05 17:58:30 2017 +0200
@@ -89,7 +89,7 @@
         if (Main.genDebug) {
             indent(writer, depth+1);
             writer.println(
-                "if ((vm.traceFlags & vm.TRACE_SENDS) != 0) {");
+                "if ((vm.traceFlags & VirtualMachineImpl.TRACE_SENDS) != 0) {");
             indent(writer, depth+2);
             writer.print(
                 "vm.printTrace(\"Sending Command(id=\" + ps.pkt.id + \") ");
--- a/jdk/src/share/classes/com/sun/java/swing/Painter.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/swing/Painter.java	Wed Jul 05 17:58:30 2017 +0200
@@ -29,5 +29,5 @@
  *
  * @deprecated Use {@link javax.swing.Painter} instead.
  */
-public interface Painter<T> extends javax.swing.Painter {
+public interface Painter<T> extends javax.swing.Painter<T> {
 }
--- a/jdk/src/share/classes/com/sun/jdi/AbsentInformationException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/AbsentInformationException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -33,6 +33,7 @@
  */
 public class AbsentInformationException extends Exception
 {
+    private static final long serialVersionUID = 4988939309582416373L;
     public AbsentInformationException()
     {
         super();
--- a/jdk/src/share/classes/com/sun/jdi/ClassNotLoadedException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/ClassNotLoadedException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -69,6 +69,7 @@
  */
 public class ClassNotLoadedException extends Exception
 {
+    private static final long serialVersionUID = -6242978768444298722L;
     private String className;
 
     public ClassNotLoadedException(String className) {
--- a/jdk/src/share/classes/com/sun/jdi/ClassNotPreparedException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/ClassNotPreparedException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -33,6 +33,7 @@
  * @since  1.3
  */
 public class ClassNotPreparedException extends RuntimeException {
+    private static final long serialVersionUID = -6120698967144079642L;
     public ClassNotPreparedException()
     {
         super();
--- a/jdk/src/share/classes/com/sun/jdi/IncompatibleThreadStateException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/IncompatibleThreadStateException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -34,6 +34,7 @@
  */
 public class IncompatibleThreadStateException extends Exception
 {
+    private static final long serialVersionUID = 6199174323414551389L;
     public IncompatibleThreadStateException()
     {
         super();
--- a/jdk/src/share/classes/com/sun/jdi/InconsistentDebugInfoException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/InconsistentDebugInfoException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -35,6 +35,7 @@
  * @since  1.3
  */
 public class InconsistentDebugInfoException extends RuntimeException {
+    private static final long serialVersionUID = 7964236415376861808L;
     public InconsistentDebugInfoException() {
         super();
     }
--- a/jdk/src/share/classes/com/sun/jdi/InternalException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/InternalException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -33,6 +33,7 @@
  * @since  1.3
  */
 public class InternalException extends RuntimeException {
+     private static final long serialVersionUID = -9171606393104480607L;
      private int errorCode;
 
      public InternalException() {
--- a/jdk/src/share/classes/com/sun/jdi/InvalidCodeIndexException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/InvalidCodeIndexException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -36,6 +36,7 @@
  */
 @Deprecated
 public class InvalidCodeIndexException extends RuntimeException {
+    private static final long serialVersionUID = 7416010225133747805L;
     public InvalidCodeIndexException() {
         super();
     }
--- a/jdk/src/share/classes/com/sun/jdi/InvalidLineNumberException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/InvalidLineNumberException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -36,6 +36,7 @@
  */
 @Deprecated
 public class InvalidLineNumberException extends RuntimeException {
+    private static final long serialVersionUID = 4048709912372692875L;
     public InvalidLineNumberException() {
         super();
     }
--- a/jdk/src/share/classes/com/sun/jdi/InvalidStackFrameException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/InvalidStackFrameException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -33,6 +33,7 @@
  * @since  1.3
  */
 public class InvalidStackFrameException extends RuntimeException {
+    private static final long serialVersionUID = -1919378296505827922L;
     public InvalidStackFrameException() {
         super();
     }
--- a/jdk/src/share/classes/com/sun/jdi/InvalidTypeException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/InvalidTypeException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -34,6 +34,7 @@
  */
 public class InvalidTypeException extends Exception
 {
+    private static final long serialVersionUID = 2256667231949650806L;
     public InvalidTypeException()
     {
         super();
--- a/jdk/src/share/classes/com/sun/jdi/InvocationException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/InvocationException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -34,6 +34,7 @@
  */
 public class InvocationException extends Exception
 {
+    private static final long serialVersionUID = 6066780907971918568L;
     ObjectReference exception;
 
     public InvocationException(ObjectReference exception)
--- a/jdk/src/share/classes/com/sun/jdi/JDIPermission.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/JDIPermission.java	Wed Jul 05 17:58:30 2017 +0200
@@ -79,7 +79,7 @@
  */
 
 public final class JDIPermission extends java.security.BasicPermission {
-
+    private static final long serialVersionUID = -6988461416938786271L;
     /**
      * The <code>JDIPermission</code> class represents access rights to the
      * <code>VirtualMachineManager</code>
--- a/jdk/src/share/classes/com/sun/jdi/NativeMethodException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/NativeMethodException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -34,6 +34,7 @@
  */
 public class NativeMethodException extends RuntimeException {
 
+    private static final long serialVersionUID = 3924951669039469992L;
     public NativeMethodException() {
         super();
     }
--- a/jdk/src/share/classes/com/sun/jdi/ObjectCollectedException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/ObjectCollectedException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -33,6 +33,7 @@
  * @since  1.3
  */
 public class ObjectCollectedException extends RuntimeException {
+    private static final long serialVersionUID = -1928428056197269588L;
     public ObjectCollectedException() {
         super();
     }
--- a/jdk/src/share/classes/com/sun/jdi/VMCannotBeModifiedException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/VMCannotBeModifiedException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -33,6 +33,7 @@
  * @since  1.5
  */
 public class VMCannotBeModifiedException extends UnsupportedOperationException {
+    private static final long serialVersionUID = -4063879815130164009L;
     public VMCannotBeModifiedException() {
         super();
     }
--- a/jdk/src/share/classes/com/sun/jdi/VMDisconnectedException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/VMDisconnectedException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -35,6 +35,7 @@
  */
 public class VMDisconnectedException extends RuntimeException {
 
+    private static final long serialVersionUID = 2892975269768351637L;
     public VMDisconnectedException() {
         super();
     }
--- a/jdk/src/share/classes/com/sun/jdi/VMMismatchException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/VMMismatchException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -34,6 +34,7 @@
  * @since  1.3
  */
 public class VMMismatchException extends RuntimeException {
+    private static final long serialVersionUID = 289169358790459564L;
     public VMMismatchException() {
         super();
     }
--- a/jdk/src/share/classes/com/sun/jdi/VMOutOfMemoryException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/VMOutOfMemoryException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -33,6 +33,7 @@
  * @since  1.3
  */
 public class VMOutOfMemoryException extends RuntimeException {
+    private static final long serialVersionUID = 71504228548910686L;
     public VMOutOfMemoryException() {
         super();
     }
--- a/jdk/src/share/classes/com/sun/jdi/connect/IllegalConnectorArgumentsException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/connect/IllegalConnectorArgumentsException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -38,6 +38,7 @@
  */
 public class IllegalConnectorArgumentsException extends Exception
 {
+    private static final long serialVersionUID = -3042212603611350941L;
     List<String> names;
 
     /**
--- a/jdk/src/share/classes/com/sun/jdi/connect/TransportTimeoutException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/connect/TransportTimeoutException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -55,7 +55,7 @@
  * @since 1.5
  */
 public class TransportTimeoutException extends java.io.IOException {
-
+    private static final long serialVersionUID = 4107035242623365074L;
     /**
      * Constructs a <tt>TransportTimeoutException</tt> with no detail
      * message.
--- a/jdk/src/share/classes/com/sun/jdi/connect/VMStartException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/connect/VMStartException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -36,6 +36,7 @@
  */
 public class VMStartException extends Exception
 {
+    private static final long serialVersionUID = 6408644824640801020L;
     Process process;
 
     public VMStartException(Process process) {
--- a/jdk/src/share/classes/com/sun/jdi/connect/spi/ClosedConnectionException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/connect/spi/ClosedConnectionException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -46,7 +46,7 @@
  * @since 1.5
  */
 public class ClosedConnectionException extends java.io.IOException {
-
+    private static final long serialVersionUID = 3877032124297204774L;
     /**
      * Constructs a <tt>ClosedConnectionException</tt> with no detail
      * message.
--- a/jdk/src/share/classes/com/sun/jdi/request/DuplicateRequestException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/request/DuplicateRequestException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -33,6 +33,7 @@
  */
 public class DuplicateRequestException extends RuntimeException
 {
+    private static final long serialVersionUID = -3719784920313411060L;
     public DuplicateRequestException()
     {
         super();
--- a/jdk/src/share/classes/com/sun/jdi/request/InvalidRequestStateException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/jdi/request/InvalidRequestStateException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -36,6 +36,7 @@
  * @since  1.3
  */
 public class InvalidRequestStateException extends RuntimeException {
+    private static final long serialVersionUID = -3774632428543322148L;
     public InvalidRequestStateException()
     {
         super();
--- a/jdk/src/share/classes/com/sun/tools/jdi/ArrayReferenceImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ArrayReferenceImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -70,8 +70,8 @@
     }
 
     public Value getValue(int index) {
-        List list = getValues(index, 1);
-        return (Value)list.get(0);
+        List<Value> list = getValues(index, 1);
+        return list.get(0);
     }
 
     public List<Value> getValues() {
--- a/jdk/src/share/classes/com/sun/tools/jdi/ArrayTypeImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ArrayTypeImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -61,7 +61,7 @@
         return findType(componentSignature());
     }
 
-    void addVisibleMethods(Map map) {
+    void addVisibleMethods(Map<String, Method> map) {
         // arrays don't have methods
     }
 
@@ -83,10 +83,10 @@
         if (PacketStream.isObjectTag(tag)) {
             // It's a reference type
             JNITypeParser parser = new JNITypeParser(componentSignature());
-            List list = vm.classesByName(parser.typeName());
-            Iterator iter = list.iterator();
+            List<ReferenceType> list = vm.classesByName(parser.typeName());
+            Iterator<ReferenceType> iter = list.iterator();
             while (iter.hasNext()) {
-                ReferenceType type = (ReferenceType)iter.next();
+                ReferenceType type = iter.next();
                 ClassLoaderReference cl = type.classLoader();
                 if ((cl == null)?
                          (classLoader() == null) :
--- a/jdk/src/share/classes/com/sun/tools/jdi/BooleanValueImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/BooleanValueImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -78,7 +78,7 @@
     }
 
     public int intValue() {
-        return(int)((value)?1:0);
+        return (value)?1:0;
     }
 
     public long longValue() {
@@ -90,7 +90,7 @@
     }
 
     public double doubleValue() {
-        return(double)((value)?1.0:0.0);
+        return (value)?1.0:0.0;
     }
 
     public String toString() {
--- a/jdk/src/share/classes/com/sun/tools/jdi/CharValueImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/CharValueImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -75,7 +75,7 @@
     }
 
     public char charValue() {
-        return(char)value;
+        return value;
     }
 
     public short shortValue() {
--- a/jdk/src/share/classes/com/sun/tools/jdi/ClassLoaderReferenceImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ClassLoaderReferenceImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -80,7 +80,7 @@
                 classes = Collections.unmodifiableList(classes);
                 if (local != null) {
                     local.visibleClasses = classes;
-                    if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
+                    if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
                         vm.printTrace(description() +
                            " temporarily caching visible classes (count = " +
                                       classes.size() + ")");
@@ -95,9 +95,9 @@
 
     Type findType(String signature) throws ClassNotLoadedException {
         List<ReferenceType> types = visibleClasses();
-        Iterator iter = types.iterator();
+        Iterator<ReferenceType> iter = types.iterator();
         while (iter.hasNext()) {
-            ReferenceType type = (ReferenceType)iter.next();
+            ReferenceType type = iter.next();
             if (type.signature().equals(signature)) {
                 return type;
             }
--- a/jdk/src/share/classes/com/sun/tools/jdi/ClassTypeImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ClassTypeImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -76,7 +76,7 @@
         List<InterfaceType> immediate = interfaces();
         list.addAll(interfaces());
 
-        Iterator iter = immediate.iterator();
+        Iterator<InterfaceType> iter = immediate.iterator();
         while (iter.hasNext()) {
             InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
             interfaze.addSuperinterfaces(list);
@@ -389,7 +389,7 @@
          * overwrite them in the hash table
          */
 
-        Iterator iter = interfaces().iterator();
+        Iterator<InterfaceType> iter = interfaces().iterator();
         while (iter.hasNext()) {
             InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
             interfaze.addVisibleMethods(methodMap);
@@ -411,7 +411,7 @@
             return true;
         } else {
             List<InterfaceType> interfaces = interfaces();
-            Iterator iter = interfaces.iterator();
+            Iterator<InterfaceType> iter = interfaces.iterator();
             while (iter.hasNext()) {
                 InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
                 if (interfaze.isAssignableTo(type)) {
--- a/jdk/src/share/classes/com/sun/tools/jdi/ConcreteMethodImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ConcreteMethodImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -192,7 +192,7 @@
             return super.codeIndexToLineInfo(stratum, codeIndex);
         }
 
-        Iterator iter = lineLocations.iterator();
+        Iterator<Location> iter = lineLocations.iterator();
         /*
          * Treat code before the beginning of the first line table
          * entry as part of the first line.  javac will generate
@@ -221,9 +221,9 @@
         List<LocalVariable> variables = getVariables();
 
         List<LocalVariable> retList = new ArrayList<LocalVariable>(2);
-        Iterator iter = variables.iterator();
+        Iterator<LocalVariable> iter = variables.iterator();
         while(iter.hasNext()) {
-            LocalVariable variable = (LocalVariable)iter.next();
+            LocalVariable variable = iter.next();
             if (variable.name().equals(name)) {
                 retList.add(variable);
             }
@@ -235,9 +235,9 @@
         List<LocalVariable> variables = getVariables();
 
         List<LocalVariable> retList = new ArrayList<LocalVariable>(variables.size());
-        Iterator iter = variables.iterator();
+        Iterator<LocalVariable> iter = variables.iterator();
         while(iter.hasNext()) {
-            LocalVariable variable = (LocalVariable)iter.next();
+            LocalVariable variable = iter.next();
             if (variable.isArgument()) {
                 retList.add(variable);
             }
@@ -291,7 +291,7 @@
         SDE.LineStratum lastLineStratum = null;
         SDE.Stratum baseStratum =
             declaringType.stratum(SDE.BASE_STRATUM_NAME);
-        Iterator it = getBaseLocations().lineLocations.iterator();
+        Iterator<Location> it = getBaseLocations().lineLocations.iterator();
         while(it.hasNext()) {
             LocationImpl loc = (LocationImpl)it.next();
             int baseLineNumber = loc.lineNumber(baseStratum);
--- a/jdk/src/share/classes/com/sun/tools/jdi/ConnectorImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ConnectorImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -47,9 +47,9 @@
 
     public Map<String,Argument> defaultArguments() {
         Map<String,Argument> defaults = new java.util.LinkedHashMap<String,Argument>();
-        Collection values = defaultArguments.values();
+        Collection<Argument> values = defaultArguments.values();
 
-        Iterator iter = values.iterator();
+        Iterator<Argument> iter = values.iterator();
         while (iter.hasNext()) {
             ArgumentImpl argument = (ArgumentImpl)iter.next();
             defaults.put(argument.name(), (Argument)argument.clone());
@@ -96,7 +96,7 @@
                                                       mustSpecify, list));
     }
 
-    ArgumentImpl argument(String name, Map arguments)
+    ArgumentImpl argument(String name, Map<String, ? extends Argument> arguments)
                 throws IllegalConnectorArgumentsException {
 
         ArgumentImpl argument = (ArgumentImpl)arguments.get(name);
@@ -130,7 +130,7 @@
 
     public String toString() {
         String string = name() + " (defaults: ";
-        Iterator iter = defaultArguments().values().iterator();
+        Iterator<Argument> iter = defaultArguments().values().iterator();
         boolean first = true;
         while (iter.hasNext()) {
             ArgumentImpl argument = (ArgumentImpl)iter.next();
@@ -222,7 +222,7 @@
 
     class BooleanArgumentImpl extends ConnectorImpl.ArgumentImpl
                               implements Connector.BooleanArgument {
-
+        private static final long serialVersionUID = 1624542968639361316L;
         BooleanArgumentImpl(String name, String label, String description,
                             boolean value,
                             boolean mustSpecify) {
@@ -277,7 +277,7 @@
 
     class IntegerArgumentImpl extends ConnectorImpl.ArgumentImpl
                               implements Connector.IntegerArgument {
-
+        private static final long serialVersionUID = 763286081923797770L;
         private final int min;
         private final int max;
 
@@ -378,7 +378,7 @@
 
     class StringArgumentImpl extends ConnectorImpl.ArgumentImpl
                               implements Connector.StringArgument {
-
+        private static final long serialVersionUID = 7500484902692107464L;
         StringArgumentImpl(String name, String label, String description,
                            String value,
                            boolean mustSpecify) {
@@ -396,7 +396,7 @@
 
     class SelectedArgumentImpl extends ConnectorImpl.ArgumentImpl
                               implements Connector.SelectedArgument {
-
+        private static final long serialVersionUID = -5689584530908382517L;
         private final List<String> choices;
 
         SelectedArgumentImpl(String name, String label, String description,
--- a/jdk/src/share/classes/com/sun/tools/jdi/DoubleValueImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/DoubleValueImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -101,7 +101,7 @@
     }
 
     public double doubleValue() {
-        return(double)value;
+        return value;
     }
 
     byte checkedByteValue() throws InvalidTypeException {
--- a/jdk/src/share/classes/com/sun/tools/jdi/EventRequestManagerImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/EventRequestManagerImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -43,7 +43,7 @@
 class EventRequestManagerImpl extends MirrorImpl
                                        implements EventRequestManager
 {
-    List[] requestLists;
+    List<? extends EventRequest>[] requestLists;
     private static int methodExitEventCmd = 0;
 
     static int JDWPtoJDISuspendPolicy(byte jdwpPolicy) {
@@ -91,7 +91,7 @@
          * access/modification should be protected by synchronizing on
          * the enclosing instance of EventRequestImpl.
          */
-        List filters = new ArrayList();
+        List<Object> filters = new ArrayList<>();
 
         boolean isEnabled = false;
         boolean deleted = false;
@@ -195,7 +195,6 @@
          */
         synchronized void set() {
             JDWP.EventRequest.Set.Modifier[] mods =
-                (JDWP.EventRequest.Set.Modifier[])
                 filters.toArray(
                     new JDWP.EventRequest.Set.Modifier[filters.size()]);
             try {
@@ -582,10 +581,10 @@
             /*
              * Make sure this isn't a duplicate
              */
-            List requests = stepRequests();
-            Iterator iter = requests.iterator();
+            List<StepRequest> requests = stepRequests();
+            Iterator<StepRequest> iter = requests.iterator();
             while (iter.hasNext()) {
-                StepRequest request = (StepRequest)iter.next();
+                StepRequest request = iter.next();
                 if ((request != this) &&
                         request.isEnabled() &&
                         request.thread().equals(thread)) {
@@ -735,7 +734,7 @@
         }
         requestLists = new List[highest+1];
         for (int i=0; i <= highest; i++) {
-            requestLists[i] = new ArrayList();
+            requestLists[i] = new ArrayList<>();
         }
     }
 
@@ -852,7 +851,7 @@
     public void deleteEventRequests(List<? extends EventRequest> eventRequests) {
         validateMirrors(eventRequests);
         // copy the eventRequests to avoid ConcurrentModificationException
-        Iterator iter = (new ArrayList(eventRequests)).iterator();
+        Iterator<? extends EventRequest> iter = (new ArrayList<>(eventRequests)).iterator();
         while (iter.hasNext()) {
             ((EventRequestImpl)iter.next()).delete();
         }
@@ -869,76 +868,76 @@
     }
 
     public List<StepRequest> stepRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.SINGLE_STEP);
+        return (List<StepRequest>)unmodifiableRequestList(JDWP.EventKind.SINGLE_STEP);
     }
 
     public List<ClassPrepareRequest> classPrepareRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.CLASS_PREPARE);
+        return (List<ClassPrepareRequest>)unmodifiableRequestList(JDWP.EventKind.CLASS_PREPARE);
     }
 
     public List<ClassUnloadRequest> classUnloadRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.CLASS_UNLOAD);
+        return (List<ClassUnloadRequest>)unmodifiableRequestList(JDWP.EventKind.CLASS_UNLOAD);
     }
 
     public List<ThreadStartRequest> threadStartRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.THREAD_START);
+        return (List<ThreadStartRequest>)unmodifiableRequestList(JDWP.EventKind.THREAD_START);
     }
 
     public List<ThreadDeathRequest> threadDeathRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.THREAD_DEATH);
+        return (List<ThreadDeathRequest>)unmodifiableRequestList(JDWP.EventKind.THREAD_DEATH);
     }
 
     public List<ExceptionRequest> exceptionRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.EXCEPTION);
+        return (List<ExceptionRequest>)unmodifiableRequestList(JDWP.EventKind.EXCEPTION);
     }
 
     public List<BreakpointRequest> breakpointRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.BREAKPOINT);
+        return (List<BreakpointRequest>)unmodifiableRequestList(JDWP.EventKind.BREAKPOINT);
     }
 
     public List<AccessWatchpointRequest> accessWatchpointRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.FIELD_ACCESS);
+        return (List<AccessWatchpointRequest>)unmodifiableRequestList(JDWP.EventKind.FIELD_ACCESS);
     }
 
     public List<ModificationWatchpointRequest> modificationWatchpointRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.FIELD_MODIFICATION);
+        return (List<ModificationWatchpointRequest>)unmodifiableRequestList(JDWP.EventKind.FIELD_MODIFICATION);
     }
 
     public List<MethodEntryRequest> methodEntryRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.METHOD_ENTRY);
+        return (List<MethodEntryRequest>)unmodifiableRequestList(JDWP.EventKind.METHOD_ENTRY);
     }
 
     public List<MethodExitRequest> methodExitRequests() {
-        return unmodifiableRequestList(
+        return (List<MethodExitRequest>)unmodifiableRequestList(
                                EventRequestManagerImpl.methodExitEventCmd);
     }
 
     public List<MonitorContendedEnterRequest> monitorContendedEnterRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.MONITOR_CONTENDED_ENTER);
+        return (List<MonitorContendedEnterRequest>)unmodifiableRequestList(JDWP.EventKind.MONITOR_CONTENDED_ENTER);
     }
 
     public List<MonitorContendedEnteredRequest> monitorContendedEnteredRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.MONITOR_CONTENDED_ENTERED);
+        return (List<MonitorContendedEnteredRequest>)unmodifiableRequestList(JDWP.EventKind.MONITOR_CONTENDED_ENTERED);
     }
 
     public List<MonitorWaitRequest> monitorWaitRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.MONITOR_WAIT);
+        return (List<MonitorWaitRequest>)unmodifiableRequestList(JDWP.EventKind.MONITOR_WAIT);
     }
 
     public List<MonitorWaitedRequest> monitorWaitedRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.MONITOR_WAITED);
+        return (List<MonitorWaitedRequest>)unmodifiableRequestList(JDWP.EventKind.MONITOR_WAITED);
     }
 
     public List<VMDeathRequest> vmDeathRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.VM_DEATH);
+        return (List<VMDeathRequest>)unmodifiableRequestList(JDWP.EventKind.VM_DEATH);
     }
 
-    List unmodifiableRequestList(int eventCmd) {
+    List<? extends EventRequest> unmodifiableRequestList(int eventCmd) {
         return Collections.unmodifiableList(requestList(eventCmd));
     }
 
     EventRequest request(int eventCmd, int requestId) {
-        List rl = requestList(eventCmd);
+        List<? extends EventRequest> rl = requestList(eventCmd);
         for (int i = rl.size() - 1; i >= 0; i--) {
             EventRequestImpl er = (EventRequestImpl)rl.get(i);
             if (er.id == requestId) {
--- a/jdk/src/share/classes/com/sun/tools/jdi/EventSetImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/EventSetImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -47,7 +47,7 @@
  * that is on the queues are all for client requests.
  */
 public class EventSetImpl extends ArrayList<Event> implements EventSet {
-
+    private static final long serialVersionUID = -4857338819787924570L;
     private VirtualMachineImpl vm; // we implement Mirror
     private Packet pkt;
     private byte suspendPolicy;
@@ -607,7 +607,7 @@
         PacketStream ps = new PacketStream(vm, pkt);
         JDWP.Event.Composite compEvt = new JDWP.Event.Composite(vm, ps);
         suspendPolicy = compEvt.suspendPolicy;
-        if ((vm.traceFlags & vm.TRACE_EVENTS) != 0) {
+        if ((vm.traceFlags & VirtualMachine.TRACE_EVENTS) != 0) {
             switch(suspendPolicy) {
                 case JDWP.SuspendPolicy.ALL:
                     vm.printTrace("EventSet: SUSPEND_ALL");
@@ -626,7 +626,7 @@
         ThreadReference fix6485605 = null;
         for (int i = 0; i < compEvt.events.length; i++) {
             EventImpl evt = createEvent(compEvt.events[i]);
-            if ((vm.traceFlags & vm.TRACE_EVENTS) != 0) {
+            if ((vm.traceFlags & VirtualMachine.TRACE_EVENTS) != 0) {
                 try {
                     vm.printTrace("Event: " + evt);
                 } catch (VMDisconnectedException ee) {
--- a/jdk/src/share/classes/com/sun/tools/jdi/FloatValueImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/FloatValueImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -97,7 +97,7 @@
     }
 
     public float floatValue() {
-        return(float)value;
+        return value;
     }
 
     public double doubleValue() {
--- a/jdk/src/share/classes/com/sun/tools/jdi/GenericAttachingConnector.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/GenericAttachingConnector.java	Wed Jul 05 17:58:30 2017 +0200
@@ -105,7 +105,7 @@
     /**
      * Attach to a target VM using the specified address and Connector arguments.
      */
-    public VirtualMachine attach(String address, Map args)
+    public VirtualMachine attach(String address, Map<String, ? extends Connector.Argument> args)
         throws IOException, IllegalConnectorArgumentsException
     {
         String ts  = argument(ARG_TIMEOUT, args).value();
--- a/jdk/src/share/classes/com/sun/tools/jdi/IntegerValueImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/IntegerValueImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -83,7 +83,7 @@
     }
 
     public int intValue() {
-        return(int)value;
+        return value;
     }
 
     public long longValue() {
--- a/jdk/src/share/classes/com/sun/tools/jdi/InterfaceTypeImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/InterfaceTypeImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -128,9 +128,9 @@
          * list being built.
          */
         List<InterfaceType> immediate = new ArrayList<InterfaceType>(superinterfaces());
-        Iterator iter = immediate.iterator();
+        Iterator<InterfaceType> iter = immediate.iterator();
         while (iter.hasNext()) {
-            InterfaceType interfaze = (InterfaceType)iter.next();
+            InterfaceType interfaze = iter.next();
             if (list.contains(interfaze)) {
                 iter.remove();
             }
--- a/jdk/src/share/classes/com/sun/tools/jdi/InternalEventHandler.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/InternalEventHandler.java	Wed Jul 05 17:58:30 2017 +0200
@@ -59,7 +59,7 @@
                             ClassUnloadEvent cuEvent = (ClassUnloadEvent)event;
                             vm.removeReferenceType(cuEvent.classSignature());
 
-                            if ((vm.traceFlags & vm.TRACE_EVENTS) != 0) {
+                            if ((vm.traceFlags & VirtualMachine.TRACE_EVENTS) != 0) {
                                 vm.printTrace("Handled Unload Event for " +
                                               cuEvent.classSignature());
                             }
@@ -68,7 +68,7 @@
                             ((ReferenceTypeImpl)cpEvent.referenceType())
                                                             .markPrepared();
 
-                            if ((vm.traceFlags & vm.TRACE_EVENTS) != 0) {
+                            if ((vm.traceFlags & VirtualMachine.TRACE_EVENTS) != 0) {
                                 vm.printTrace("Handled Prepare Event for " +
                                               cpEvent.referenceType().name());
                             }
--- a/jdk/src/share/classes/com/sun/tools/jdi/JDWPException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/JDWPException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -27,7 +27,7 @@
 import com.sun.jdi.*;
 
 class JDWPException extends Exception {
-
+    private static final long serialVersionUID = -6321344442751299874L;
     short errorCode;
 
     JDWPException(short errorCode) {
--- a/jdk/src/share/classes/com/sun/tools/jdi/LinkedHashMap.java	Fri Dec 23 16:39:22 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,904 +0,0 @@
-/*
- * Copyright (c) 1998, 2000, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  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 com.sun.tools.jdi;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Hash table based implementation of the Map interface.  This implementation
- * provides all of the optional Map operations, and permits null values and
- * the null key.  (HashMap is roughly equivalent to Hashtable, except that it
- * is unsynchronized and permits nulls.) In addition, elements in the map are
- * ordered and doubly linked together.
- * <p>
- * This implementation provides constant-time performance for the basic
- * operations (get and put), assuming the the hash function disperses the
- * elements properly among the buckets.  Iteration over Collection views
- * requires time proportional to its size (the number of key-value mappings)
- * and returns elements in the order they are linked. In a HashMap the
- * iteration would require time  proportional to the capacity of the map
- * plus the map size.
- * <p>
- * An instance of LinkedHashMap has two parameters that affect its efficiency:
- * its <i>capacity</i> and its <i>load factor</i>. The load factor should be
- * between 0.0 and 1.0. When the number of mappings in the LinkedHashMap exceeds
- * the product of the load factor and the current capacity, the capacity is
- * increased by calling the rehash method which requires time proportional
- * to the number of key-value mappings in the map. Larger load factors
- * use memory more efficiently, at the expense of larger expected time per
- * lookup.
- * <p>
- * If many mappings are to be stored in a LinkedHashMap, creating it with a
- * sufficiently large capacity will allow the mappings to be stored more
- * efficiently than letting it perform automatic rehashing as needed to grow
- * the table.
- * <p>
- * <strong>Note that this implementation is not synchronized.</strong> If
- * multiple threads access a LinkedHashMap concurrently, and at least one of the
- * threads modifies the LinkedHashMap structurally, it <em>must</em> be
- * synchronized externally.  (A structural modification is any operation that
- * adds or deletes one or more mappings; merely changing the value associated
- * with a key that is already contained in the Table is not a structural
- * modification.)  This is typically accomplished by synchronizing on some
- * object that naturally encapsulates the LinkedHashMap.  If no such object
- * exists, the LinkedHashMap should be "wrapped" using the
- * Collections.synchronizedSet method.  This is best done at creation time, to
- * prevent accidental unsynchronized access to the LinkedHashMap:
- * <pre>
- *      Map m = Collections.synchronizedMap(new LinkedHashMap(...));
- * </pre>
- * <p>
- * The Iterators returned by the iterator methods of the Collections returned
- * by all of LinkedHashMap's "collection view methods" are <em>fail-fast</em>:
- * if the LinkedHashMap is structurally modified at any time after the Iterator
- * is created, in any way except through the Iterator's own remove or add
- * methods, the Iterator will throw a ConcurrentModificationException.  Thus,
- * in the face of concurrent modification, the Iterator fails quickly and
- * cleanly, rather than risking arbitrary, non-deterministic behavior at an
- * undetermined time in the future.
- *
- * @author  Josh Bloch
- * @author  Arthur van Hoff
- * @author  Zhenghua Li
- * @see     Object#hashCode()
- * @see     java.util.Collection
- * @see     java.util.Map
- * @see     java.util.TreeMap
- * @see     java.util.Hashtable
- * @see     java.util.HashMap
- */
-
-import java.io.Serializable;
-
-public class LinkedHashMap extends AbstractMap implements Map, Serializable {
-    /**
-     * The hash table data.
-     */
-    private transient Entry table[];
-
-    /**
-     * The head of the double linked list.
-     */
-    private transient Entry header;
-
-    /**
-     * The total number of mappings in the hash table.
-     */
-    private transient int count;
-
-    /**
-     * Rehashes the table when count exceeds this threshold.
-     */
-    private int threshold;
-
-    /**
-     * The load factor for the LinkedHashMap.
-     */
-    private float loadFactor;
-
-    /**
-     * The number of times this LinkedHashMap has been structurally modified
-     * Structural modifications are those that change the number of mappings in
-     * the LinkedHashMap or otherwise modify its internal structure (e.g.,
-     * rehash).  This field is used to make iterators on Collection-views of
-     * the LinkedHashMap fail-fast.  (See ConcurrentModificationException).
-     */
-    private transient int modCount = 0;
-
-    /**
-     * Constructs a new, empty LinkedHashMap with the specified initial
-     * capacity and the specified load factor.
-     *
-     * @param      initialCapacity   the initial capacity of the LinkedHashMap.
-     * @param      loadFactor        a number between 0.0 and 1.0.
-     * @exception  IllegalArgumentException  if the initial capacity is less
-     *               than or equal to zero, or if the load factor is less than
-     *               or equal to zero.
-     */
-    public LinkedHashMap(int initialCapacity, float loadFactor) {
-        if (initialCapacity < 0)
-            throw new IllegalArgumentException("Illegal Initial Capacity: "+
-                                               initialCapacity);
-        if ((loadFactor > 1) || (loadFactor <= 0))
-            throw new IllegalArgumentException("Illegal Load factor: "+
-                                               loadFactor);
-        if (initialCapacity==0)
-            initialCapacity = 1;
-        this.loadFactor = loadFactor;
-        table = new Entry[initialCapacity];
-        threshold = (int)(initialCapacity * loadFactor);
-        header = new Entry(-1, null, null, null);
-        header.before = header.after = header;
-    }
-
-    /**
-     * Constructs a new, empty LinkedHashMap with the specified initial capacity
-     * and default load factor.
-     *
-     * @param   initialCapacity   the initial capacity of the LinkedHashMap.
-     */
-    public LinkedHashMap(int initialCapacity) {
-        this(initialCapacity, 0.75f);
-    }
-
-    /**
-     * Constructs a new, empty LinkedHashMap with a default capacity and load
-     * factor.
-     */
-    public LinkedHashMap() {
-        this(101, 0.75f);
-    }
-
-    /**
-     * Constructs a new LinkedHashMap with the same mappings as the given
-     * Map.  The LinkedHashMap is created with a capacity of thrice the number
-     * of mappings in the given Map or 11 (whichever is greater), and a
-     * default load factor.
-     */
-    public LinkedHashMap(Map t) {
-        this(Math.max(3*t.size(), 11), 0.75f);
-        putAll(t);
-    }
-
-    /**
-     * Returns the number of key-value mappings in this Map.
-     */
-    public int size() {
-        return count;
-    }
-
-    /**
-     * Returns true if this Map contains no key-value mappings.
-     */
-    public boolean isEmpty() {
-        return count == 0;
-    }
-
-    /**
-     * Returns true if this LinkedHashMap maps one or more keys to the specified
-     * value.
-     *
-     * @param value value whose presence in this Map is to be tested.
-     */
-    public boolean containsValue(Object value) {
-        if (value==null) {
-            for (Entry e = header.after; e != header; e = e.after)
-                if (e.value==null)
-                    return true;
-        } else {
-            for (Entry e = header.after; e != header; e = e.after)
-                if (value.equals(e.value))
-                    return true;
-        }
-        return false;
-    }
-
-    /**
-     * Returns true if this LinkedHashMap contains a mapping for the specified
-     * key.
-     *
-     * @param key key whose presence in this Map is to be tested.
-     */
-    public boolean containsKey(Object key) {
-        Entry tab[] = table;
-        if (key != null) {
-            int hash = key.hashCode();
-            int index = (hash & 0x7FFFFFFF) % tab.length;
-            for (Entry e = tab[index]; e != null; e = e.next)
-                if (e.hash==hash && e.key.equals(key))
-                    return true;
-        } else {
-            for (Entry e = tab[0]; e != null; e = e.next)
-                if (e.key==null)
-                    return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns the value to which this LinkedHashMap maps the specified key.
-     * Returns null if the LinkedHashMap contains no mapping for this key.
-     * A return value of null does not <em>necessarily</em> indicate that the
-     * LinkedHashMap contains no mapping for the key; it's also possible that
-     * the LinkedHashMap explicitly maps the key to null.  The containsKey
-     * operation may be used to distinguish these two cases.
-     *
-     * @param key key whose associated value is to be returned.
-     */
-    public Object get(Object key) {
-        Entry e = getEntry(key);
-        return e==null ? null : e.value;
-    }
-
-    /**
-     * Returns the entry associated with the specified key in the LinkedHashMap.
-     * Returns null if the LinkedHashMap contains no mapping for this key.
-     */
-    private Entry getEntry(Object key) {
-        Entry tab[] = table;
-
-        if (key != null) {
-            int hash = key.hashCode();
-            int index = (hash & 0x7FFFFFFF) % tab.length;
-            for (Entry e = tab[index]; e != null; e = e.next)
-                if ((e.hash == hash) && e.key.equals(key))
-                    return e;
-        } else {
-            for (Entry e = tab[0]; e != null; e = e.next)
-                if (e.key==null)
-                    return e;
-        }
-
-        return null;
-    }
-
-    /**
-     * Rehashes the contents of the LinkedHashMap into a LinkedHashMap with a
-     * larger capacity. This method is called automatically when the
-     * number of keys in the LinkedHashMap exceeds this LinkedHashMap's capacity
-     * and load factor.
-     */
-    private void rehash() {
-        int oldCapacity = table.length;
-        Entry oldMap[] = table;
-
-        int newCapacity = oldCapacity * 2 + 1;
-        Entry newMap[] = new Entry[newCapacity];
-
-        modCount++;
-        threshold = (int)(newCapacity * loadFactor);
-        table = newMap;
-
-        for (Entry e = header.after; e != header; e = e.after) {
-            int index = (e.hash & 0x7FFFFFFF) % newCapacity;
-            e.next = newMap[index];
-            newMap[index] = e;
-        }
-    }
-
-    /**
-     * Remove an entry from the linked list.
-     */
-    private void listRemove(Entry entry) {
-        if (entry == null) {
-            return;
-        }
-        entry.before.after = entry.after;
-        entry.after.before = entry.before;
-    }
-
-   /**
-    * Add the specified entry before the specified existing entry to
-    * the linked list.
-    */
-    private void listAddBefore(Entry entry, Entry existEntry) {
-        entry.after = existEntry;
-        entry.before = existEntry.before;
-        entry.before.after = entry;
-        entry.after.before = entry;
-    }
-
-    /**
-     * Returns the position of the mapping for the specified key
-     * in the ordered map.
-     *
-     * @param key the specified key.
-     * @return index of the key mapping.
-     */
-    public int indexOf(Object key) {
-        int i = 0;
-        if (key == null) {
-            for (Entry e = header.after; e != header; e = e.after, i++)
-                if (e.key == null)
-                    return i;
-        } else {
-            for (Entry e = header.after; e != header; e = e.after, i++)
-                if(key.equals(e.key))
-                    return i;
-        }
-        return -1;
-    }
-
-    /**
-     * Associates the specified value with the specified key in this
-     * LinkedHashMap. If the LinkedHashMap previously contained a mapping for
-     * this key, the old value is replaced and the position of this mapping
-     * entry in the double linked list remains the same. Otherwise, a new
-     * mapping entry is created and inserted into the list before the specified
-     * existing mapping entry. The method returns the previous value associated
-     * with the specified key, or null if there was no mapping for key.  A null
-     * return can also indicate that the LinkedHashMap previously associated
-     * null with the specified key.
-     */
-    private Object putAhead(Object key, Object value, Entry existEntry) {
-        // Makes sure the key is not already in the LinkedHashMap.
-        Entry tab[] = table;
-        int hash = 0;
-        int index = 0;
-
-        if (key != null) {
-            hash = key.hashCode();
-            index = (hash & 0x7FFFFFFF) % tab.length;
-            for (Entry e = tab[index] ; e != null ; e = e.next) {
-                if ((e.hash == hash) && e.key.equals(key)) {
-                    Object old = e.value;
-                    e.value = value;
-                    return old;
-                }
-            }
-        } else {
-            for (Entry e = tab[0] ; e != null ; e = e.next) {
-                if (e.key == null) {
-                    Object old = e.value;
-                    e.value = value;
-                    return old;
-                }
-            }
-        }
-
-        modCount++;
-        if (count >= threshold) {
-            // Rehash the table if the threshold is exceeded
-            rehash();
-            tab = table;
-            index = (hash & 0x7FFFFFFF) % tab.length;
-        }
-
-        // Creates the new entry.
-        Entry e = new Entry(hash, key, value, tab[index]);
-        tab[index] = e;
-        listAddBefore(e, existEntry);
-        count++;
-        return null;
-    }
-
-    /**
-     * Associates the specified value with the specified key in this
-     * LinkedHashMap and position the mapping at the specified index.
-     * If the LinkedHashMap previously contained a mapping for this key,
-     * the old value is replaced and the position of this mapping entry
-     * in the double linked list remains the same. Otherwise, a new mapping
-     * entry is created and inserted into the list at the specified
-     * position.
-     *
-     * @param index     the position to put the key-value mapping.
-     * @param key       key with which the specified value is to be associated.
-     * @param value     value to be associated with the specified key.
-     * @return previous value associated with specified key, or null if there
-     *         was no mapping for key.  A null return can also indicate that
-     *         the LinkedHashMap previously associated null with the specified
-     *         key.
-     */
-    public Object put(int index, Object key, Object value) {
-        if (index < 0 || index > count)
-            throw new IndexOutOfBoundsException();
-        Entry e = header.after;
-        if (index == count)
-            return putAhead(key, value, header); //fast approach for append
-        else {
-            for (int i = 0; i < index; i++)
-                e = e.after;
-            return putAhead(key, value, e);
-        }
-    }
-
-
-    /**
-     * Associates the specified value with the specified key in this
-     * LinkedHashMap. If the LinkedHashMap previously contained a mapping for
-     * this key, the old value is replaced. The mapping entry is also appended
-     * to the end of the ordered linked list.
-     *
-     * @param key key with which the specified value is to be associated.
-     * @param value value to be associated with the specified key.
-     * @return previous value associated with specified key, or null if there
-     *         was no mapping for key.  A null return can also indicate that
-     *         the LinkedHashMap previously associated null with the specified
-     *         key.
-     */
-    public Object put(Object key, Object value) {
-        return putAhead(key, value, header);
-    }
-
-    /**
-     * Removes the mapping for this key from this LinkedHashMap if present.
-     * The mapping would also be removed from the double linked list.
-     *
-     * @param key key whose mapping is to be removed from the Map.
-     * @return previous value associated with specified key, or null if there
-     *         was no mapping for key.  A null return can also indicate that
-     *         the LinkedHashMap previously associated null with the specified
-     *         key.
-     */
-    public Object remove(Object key) {
-        Entry tab[] = table;
-
-        if (key != null) {
-            int hash = key.hashCode();
-            int index = (hash & 0x7FFFFFFF) % tab.length;
-
-            for (Entry e = tab[index], prev = null; e != null;
-                 prev = e, e = e.next) {
-                if ((e.hash == hash) && e.key.equals(key)) {
-                    modCount++;
-                    if (prev != null)
-                        prev.next = e.next;
-                    else
-                        tab[index] = e.next;
-
-                    count--;
-                    Object oldValue = e.value;
-                    e.value = null;
-
-                    listRemove(e);
-                    return oldValue;
-                }
-            }
-        } else {
-            for (Entry e = tab[0], prev = null; e != null;
-                 prev = e, e = e.next) {
-                if (e.key == null) {
-                    modCount++;
-                    if (prev != null)
-                        prev.next = e.next;
-                    else
-                        tab[0] = e.next;
-
-                    count--;
-                    Object oldValue = e.value;
-                    e.value = null;
-
-                    listRemove(e);
-                    return oldValue;
-                }
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Copies all of the mappings from the specified Map to this LinkedHashMap
-     * These mappings will replace any mappings that this LinkedHashMap had for
-     * any of the keys currently in the specified Map.
-     *
-      * @param t Mappings to be stored in this Map.
-     */
-    public void putAll(Map t) {
-        Iterator i = t.entrySet().iterator();
-        while (i.hasNext()) {
-            Map.Entry e = (Map.Entry) i.next();
-            put(e.getKey(), e.getValue());
-        }
-    }
-
-    /**
-     * Removes all mappings from this LinkedHashMap.
-     */
-    public void clear() {
-        Entry tab[] = table;
-        modCount++;
-        for (int index = tab.length; --index >= 0; )
-            tab[index] = null;
-        count = 0;
-        header.before = header.after = header;
-    }
-
-    /**
-     * Returns a shallow copy of this LinkedHashMap. The keys and values
-     * themselves are not cloned.
-     */
-    public Object clone() {
-        return new LinkedHashMap(this);
-    }
-
-    // Views
-
-    private transient Set keySet = null;
-    private transient Set entries = null;
-    private transient Collection values = null;
-
-    /**
-     * Returns a Set view of the keys contained in this LinkedHashMap.  The Set
-     * is backed by the LinkedHashMap, so changes to the LinkedHashMap are
-     * reflected in the Set, and vice-versa.  The Set supports element removal,
-     * which removes the corresponding mapping from the LinkedHashMap, via the
-     * Iterator.remove, Set.remove, removeAll retainAll, and clear operations.
-     * It does not support the add or addAll operations.
-     */
-    public Set keySet() {
-        if (keySet == null) {
-            keySet = new AbstractSet() {
-                public Iterator iterator() {
-                    return new HashIterator(KEYS);
-                }
-                public int size() {
-                    return count;
-                }
-                public boolean contains(Object o) {
-                    return containsKey(o);
-                }
-                public boolean remove(Object o) {
-                    return LinkedHashMap.this.remove(o) != null;
-                }
-                public void clear() {
-                    LinkedHashMap.this.clear();
-                }
-            };
-        }
-        return keySet;
-    }
-
-    /**
-     * Returns a Collection view of the values contained in this LinkedHashMap.
-     * The Collection is backed by the LinkedHashMap, so changes to the
-     * LinkedHashMap are reflected in the Collection, and vice-versa.  The
-     * Collection supports element removal, which removes the corresponding
-     * mapping from the LinkedHashMap, via the Iterator.remove,
-     * Collection.remove, removeAll, retainAll and clear operations.  It does
-     * not support the add or addAll operations.
-     */
-    public Collection values() {
-        if (values==null) {
-            values = new AbstractCollection() {
-                public Iterator iterator() {
-                    return new HashIterator(VALUES);
-                }
-                public int size() {
-                    return count;
-                }
-                public boolean contains(Object o) {
-                    return containsValue(o);
-                }
-                public void clear() {
-                    LinkedHashMap.this.clear();
-                }
-            };
-        }
-        return values;
-    }
-
-    /**
-     * Returns a Collection view of the mappings contained in this
-     * LinkedHashMap. Each element in the returned collection is a Map.Entry.
-     * The Collection is backed by the LinkedHashMap, so changes to the
-     * LinkedHashMap are reflected in the Collection, and vice-versa.  The
-     * Collection supports element removal, which removes the corresponding
-     * mapping from the LinkedHashMap, via the Iterator.remove,
-     * Collection.remove, removeAll, retainAll and clear operations.  It does
-     * not support the add or addAll operations.
-     *
-     * @see   java.util.Map.Entry
-     */
-    public Set entrySet() {
-        if (entries==null) {
-            entries = new AbstractSet() {
-                public Iterator iterator() {
-                    return new HashIterator(ENTRIES);
-                }
-
-                public boolean contains(Object o) {
-                    if (!(o instanceof Map.Entry))
-                        return false;
-                    Map.Entry entry = (Map.Entry)o;
-                    Object key = entry.getKey();
-                    Entry tab[] = table;
-                    int hash = (key==null ? 0 : key.hashCode());
-                    int index = (hash & 0x7FFFFFFF) % tab.length;
-
-                    for (Entry e = tab[index]; e != null; e = e.next)
-                        if (e.hash==hash && e.equals(entry))
-                            return true;
-                    return false;
-                }
-
-                public boolean remove(Object o) {
-                    if (!(o instanceof Map.Entry))
-                        return false;
-                    Map.Entry entry = (Map.Entry)o;
-                    Object key = entry.getKey();
-                    Entry tab[] = table;
-                    int hash = (key==null ? 0 : key.hashCode());
-                    int index = (hash & 0x7FFFFFFF) % tab.length;
-
-                    for (Entry e = tab[index], prev = null; e != null;
-                         prev = e, e = e.next) {
-                        if (e.hash==hash && e.equals(entry)) {
-                            modCount++;
-                            if (prev != null)
-                                prev.next = e.next;
-                            else
-                                tab[index] = e.next;
-
-                            count--;
-                            e.value = null;
-                            listRemove(e);
-                            return true;
-                        }
-                    }
-                    return false;
-                }
-
-                public int size() {
-                    return count;
-                }
-
-                public void clear() {
-                    LinkedHashMap.this.clear();
-                }
-            };
-        }
-
-        return entries;
-    }
-
-    /**
-     * Compares the specified Object with this Map for equality.
-     * Returns true if the given object is also a LinkedHashMap and the two
-     * Maps represent the same mappings in the same order.  More formally,
-     * two Maps <code>t1</code> and <code>t2</code> represent the same mappings
-     * if <code>t1.keySet().equals(t2.keySet())</code> and for every
-     * key <code>k</code> in <code>t1.keySet()</code>, <code>
-     * (t1.get(k)==null ? t2.get(k)==null : t1.get(k).equals(t2.get(k)))
-     * </code>.
-     * <p>
-     * This implementation first checks if the specified Object is this Map;
-     * if so it returns true.  Then, it checks if the specified Object is
-     * a Map whose size is identical to the size of this Set; if not, it
-     * it returns false.  If so, it iterates over this Map and the specified
-     * Map's entrySet() Collection, and checks that the specified Map contains
-     * each mapping that this Map contains at the same position.  If the
-     * specified Map fails to contain such a mapping in the right order, false
-     * is returned.  If the iteration completes, true is returned.
-     *
-     * @param o Object to be compared for equality with this Map.
-     * @return true if the specified Object is equal to this Map.
-     *
-     */
-    public boolean equals(Object o) {
-        if (o == this)
-            return true;
-
-        if (!(o instanceof LinkedHashMap))
-            return false;
-        LinkedHashMap t = (LinkedHashMap) o;
-        if (t.size() != size())
-            return false;
-
-        Iterator i1 = entrySet().iterator();
-        Iterator i2 = t.entrySet().iterator();
-
-        while (i1.hasNext()) {
-            Entry e1 = (Entry) i1.next();
-            Entry e2 = (Entry) i2.next();
-
-            Object key1 = e1.getKey();
-            Object value1 = e1.getValue();
-            Object key2 = e2.getKey();
-            Object value2 = e2.getValue();
-
-            if ((key1 == null ? key2 == null : key1.equals(key2)) &&
-                (value1 == null ? value2 == null : value1.equals(value2))) {
-                continue;
-            } else {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * LinkedHashMap collision list entry.
-     */
-    private static class Entry implements Map.Entry {
-        int hash;
-        Object key;
-        Object value;
-        Entry next;
-
-        // These fields comprise the doubly linked list that is used for
-        // iteration.
-        Entry before, after;
-
-        Entry(int hash, Object key, Object value, Entry next) {
-            this.hash = hash;
-            this.key = key;
-            this.value = value;
-            this.next = next;
-        }
-
-        // Map.Entry Ops
-
-        public Object getKey() {
-            return key;
-        }
-
-        public Object getValue() {
-            return value;
-        }
-
-        public Object setValue(Object value) {
-            Object oldValue = this.value;
-            this.value = value;
-            return oldValue;
-        }
-
-        public boolean equals(Object o) {
-            if (!(o instanceof Map.Entry))
-                return false;
-            Map.Entry e = (Map.Entry)o;
-
-            return (key==null ? e.getKey()==null : key.equals(e.getKey())) &&
-               (value==null ? e.getValue()==null : value.equals(e.getValue()));
-        }
-
-        public int hashCode() {
-            return hash ^ (value==null ? 0 : value.hashCode());
-        }
-
-        public String toString() {
-            return key+"="+value;
-        }
-    }
-
-    // Types of Iterators
-    private static final int KEYS = 0;
-    private static final int VALUES = 1;
-    private static final int ENTRIES = 2;
-
-    private class HashIterator implements Iterator {
-        private Entry[] table = LinkedHashMap.this.table;
-        private Entry entry = null;
-        private Entry lastReturned = null;
-        private int type;
-
-        /**
-         * The modCount value that the iterator believes that the backing
-         * List should have.  If this expectation is violated, the iterator
-         * has detected concurrent modification.
-         */
-        private int expectedModCount = modCount;
-
-        HashIterator(int type) {
-            this.type = type;
-            this.entry = LinkedHashMap.this.header.after;
-        }
-
-        public boolean hasNext() {
-            return entry != header;
-        }
-
-        public Object next() {
-            if (modCount != expectedModCount)
-                throw new ConcurrentModificationException();
-            if (entry == LinkedHashMap.this.header)
-                throw new NoSuchElementException();
-
-            Entry e = lastReturned = entry;
-            entry = e.after;
-            return type == KEYS ? e.key : (type == VALUES ? e.value : e);
-        }
-
-        public void remove() {
-            if (lastReturned == null)
-                throw new IllegalStateException();
-            if (modCount != expectedModCount)
-                throw new ConcurrentModificationException();
-
-            Entry[] tab = LinkedHashMap.this.table;
-            int index = (lastReturned.hash & 0x7FFFFFFF) % tab.length;
-
-            for (Entry e = tab[index], prev = null; e != null;
-                 prev = e, e = e.next) {
-                if (e == lastReturned) {
-                    modCount++;
-                    expectedModCount++;
-                    if (prev == null)
-                        tab[index] = e.next;
-                    else
-                        prev.next = e.next;
-                    count--;
-                    listRemove(e);
-                    lastReturned = null;
-                    return;
-                }
-            }
-            throw new ConcurrentModificationException();
-        }
-    }
-
-    /**
-     * Save the state of the LinkedHashMap to a stream (i.e., serialize it).
-     * The objects will be written out in the order they are linked
-     * in the list.
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws IOException
-    {
-        // Write out the threshold, loadfactor, and any hidden stuff
-        s.defaultWriteObject();
-
-        // Write out number of buckets
-        s.writeInt(table.length);
-
-        // Write out size (number of Mappings)
-        s.writeInt(count);
-
-        // Write out keys and values (alternating)
-        for (Entry e = header.after; e != header; e = e.after) {
-            s.writeObject(e.key);
-            s.writeObject(e.value);
-        }
-    }
-
-    /**
-     * Reconstitute the LinkedHashMap from a stream (i.e., deserialize it).
-     */
-    private void readObject(java.io.ObjectInputStream s)
-         throws IOException, ClassNotFoundException
-    {
-        // Read in the threshold, loadfactor, and any hidden stuff
-        s.defaultReadObject();
-
-        // Read in number of buckets and allocate the bucket array;
-        int numBuckets = s.readInt();
-        table = new Entry[numBuckets];
-        header = new Entry(-1, null, null, null);
-        header.before = header;
-        header.after = header;
-
-        // Read in size (number of Mappings)
-        int size = s.readInt();
-
-        // Read the keys and values, and put the mappings in the LinkedHashMap
-        for (int i=0; i<size; i++) {
-            Object key = s.readObject();
-            Object value = s.readObject();
-            put(key, value);
-        }
-    }
-}
--- a/jdk/src/share/classes/com/sun/tools/jdi/LongValueImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/LongValueImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -93,7 +93,7 @@
     }
 
     public long longValue() {
-        return(long)value;
+        return value;
     }
 
     public float floatValue() {
--- a/jdk/src/share/classes/com/sun/tools/jdi/MethodImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/MethodImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -362,7 +362,7 @@
         int argSize = arguments.size();
 
         JNITypeParser parser = new JNITypeParser(signature());
-        List signatures = parser.argumentSignatures();
+        List<String> signatures = parser.argumentSignatures();
 
         if (signatures.size() != argSize) {
             throw new IllegalArgumentException("Invalid argument count: expected " +
--- a/jdk/src/share/classes/com/sun/tools/jdi/MirrorImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/MirrorImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -83,8 +83,8 @@
      * Throw NullPointerException on null mirrors.
      * Throw VMMismatchException on wrong VM.
      */
-    void validateMirrors(Collection mirrors) {
-        Iterator iter = mirrors.iterator();
+    void validateMirrors(Collection<? extends Mirror> mirrors) {
+        Iterator<? extends Mirror> iter = mirrors.iterator();
         while (iter.hasNext()) {
             MirrorImpl mirror = (MirrorImpl)iter.next();
             if (!vm.equals(mirror.vm)) {
@@ -96,8 +96,8 @@
      * Allow null mirrors.
      * Throw VMMismatchException on wrong VM.
      */
-    void validateMirrorsOrNulls(Collection mirrors) {
-        Iterator iter = mirrors.iterator();
+    void validateMirrorsOrNulls(Collection<? extends Mirror> mirrors) {
+        Iterator<? extends Mirror> iter = mirrors.iterator();
         while (iter.hasNext()) {
             MirrorImpl mirror = (MirrorImpl)iter.next();
             if ((mirror != null) && !vm.equals(mirror.vm)) {
--- a/jdk/src/share/classes/com/sun/tools/jdi/ObjectReferenceImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ObjectReferenceImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -110,7 +110,7 @@
     public boolean vmNotSuspended(VMAction action) {
         // make sure that cache and listener management are synchronized
         synchronized (vm.state()) {
-            if (cache != null && (vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
+            if (cache != null && (vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
                 vm.printTrace("Clearing temporary cache for " + description());
             }
             disableCache();
@@ -163,8 +163,8 @@
     public Value getValue(Field sig) {
         List<Field> list = new ArrayList<Field>(1);
         list.add(sig);
-        Map map = getValues(list);
-        return(Value)map.get(sig);
+        Map<Field, Value> map = getValues(list);
+        return map.get(sig);
     }
 
     public Map<Field,Value> getValues(List<? extends Field> theFields) {
@@ -487,7 +487,7 @@
                 info = JDWP.ObjectReference.MonitorInfo.process(vm, this);
                 if (local != null) {
                     local.monitorInfo = info;
-                    if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
+                    if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
                         vm.printTrace("ObjectReference " + uniqueID() +
                                       " temporarily caching monitor info");
                     }
--- a/jdk/src/share/classes/com/sun/tools/jdi/ProcessAttachingConnector.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ProcessAttachingConnector.java	Wed Jul 05 17:58:30 2017 +0200
@@ -127,7 +127,7 @@
         } else {
             if (lib.equals("dt_shmem")) {
                 try {
-                    Class c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService");
+                    Class<?> c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService");
                     ts = (TransportService)c.newInstance();
                 } catch (Exception x) { }
             }
--- a/jdk/src/share/classes/com/sun/tools/jdi/RawCommandLineLauncher.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/RawCommandLineLauncher.java	Wed Jul 05 17:58:30 2017 +0200
@@ -53,7 +53,7 @@
         super();
 
         try {
-            Class c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService");
+            Class<?> c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService");
             transportService = (TransportService)c.newInstance();
             transport = new Transport() {
                 public String name() {
--- a/jdk/src/share/classes/com/sun/tools/jdi/ReferenceTypeImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ReferenceTypeImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -99,7 +99,7 @@
         // Fetch all methods for the class, check performance impact
         // Needs no synchronization now, since methods() returns
         // unmodifiable local data
-        Iterator it = methods().iterator();
+        Iterator<Method> it = methods().iterator();
         while (it.hasNext()) {
             MethodImpl method = (MethodImpl)it.next();
             if (method.ref() == ref) {
@@ -113,7 +113,7 @@
         // Fetch all fields for the class, check performance impact
         // Needs no synchronization now, since fields() returns
         // unmodifiable local data
-        Iterator it = fields().iterator();
+        Iterator<Field>it = fields().iterator();
         while (it.hasNext()) {
             FieldImpl field = (FieldImpl)it.next();
             if (field.ref() == ref) {
@@ -385,7 +385,7 @@
 
         /* Add inherited, visible fields */
         List<? extends ReferenceType> types = inheritedTypes();
-        Iterator iter = types.iterator();
+        Iterator<? extends ReferenceType> iter = types.iterator();
         while (iter.hasNext()) {
             /*
              * TO DO: Be defensive and check for cyclic interface inheritance
@@ -419,7 +419,7 @@
 
             /* Add inherited fields */
             List<? extends ReferenceType> types = inheritedTypes();
-            Iterator iter = types.iterator();
+            Iterator<? extends ReferenceType> iter = types.iterator();
             while (iter.hasNext()) {
                 ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next();
                 type.addAllFields(fieldList, typeSet);
@@ -434,13 +434,10 @@
     }
 
     public Field fieldByName(String fieldName) {
-        java.util.List searchList;
-        Field f;
-
-        searchList = visibleFields();
+        List<Field> searchList = visibleFields();
 
         for (int i=0; i<searchList.size(); i++) {
-            f = (Field)searchList.get(i);
+            Field f = searchList.get(i);
 
             if (f.name().equals(fieldName)) {
                 return f;
@@ -575,13 +572,13 @@
     }
 
     public List<ReferenceType> nestedTypes() {
-        List all = vm.allClasses();
+        List<ReferenceType> all = vm.allClasses();
         List<ReferenceType> nested = new ArrayList<ReferenceType>();
         String outername = name();
         int outerlen = outername.length();
-        Iterator iter = all.iterator();
+        Iterator<ReferenceType> iter = all.iterator();
         while (iter.hasNext()) {
-            ReferenceType refType = (ReferenceType)iter.next();
+            ReferenceType refType = iter.next();
             String name = refType.name();
             int len = name.length();
             /* The separator is historically '$' but could also be '#' */
@@ -598,8 +595,8 @@
     public Value getValue(Field sig) {
         List<Field> list = new ArrayList<Field>(1);
         list.add(sig);
-        Map map = getValues(list);
-        return(Value)map.get(sig);
+        Map<Field, Value> map = getValues(list);
+        return map.get(sig);
     }
 
 
@@ -847,7 +844,7 @@
         SDE.Stratum stratum = stratum(stratumID);
         List<Location> list = new ArrayList<Location>();  // location list
 
-        for (Iterator iter = methods().iterator(); iter.hasNext(); ) {
+        for (Iterator<Method> iter = methods().iterator(); iter.hasNext(); ) {
             MethodImpl method = (MethodImpl)iter.next();
             try {
                 list.addAll(
@@ -887,7 +884,7 @@
 
         List<Location> list = new ArrayList<Location>();
 
-        Iterator iter = methods.iterator();
+        Iterator<Method> iter = methods.iterator();
         while(iter.hasNext()) {
             MethodImpl method = (MethodImpl)iter.next();
             // eliminate native and abstract to eliminate
--- a/jdk/src/share/classes/com/sun/tools/jdi/ShortValueImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ShortValueImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -79,7 +79,7 @@
     }
 
     public short shortValue() {
-        return(short)value;
+        return value;
     }
 
     public int intValue() {
--- a/jdk/src/share/classes/com/sun/tools/jdi/SunCommandLineLauncher.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/SunCommandLineLauncher.java	Wed Jul 05 17:58:30 2017 +0200
@@ -64,7 +64,7 @@
          * transport or the socket transport
          */
         try {
-            Class c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService");
+            Class<?> c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService");
             transportService = (TransportService)c.newInstance();
             transport = new Transport() {
                 public String name() {
--- a/jdk/src/share/classes/com/sun/tools/jdi/TargetVM.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/TargetVM.java	Wed Jul 05 17:58:30 2017 +0200
@@ -178,7 +178,7 @@
         // Closing a queue causes a VMDisconnectEvent to
         // be put onto the queue.
         synchronized(eventQueues) {
-            Iterator iter = eventQueues.iterator();
+            Iterator<EventQueue> iter = eventQueues.iterator();
             while (iter.hasNext()) {
                 ((EventQueueImpl)iter.next()).close();
             }
@@ -187,9 +187,9 @@
         // indirectly throw VMDisconnectedException to
         // command requesters.
         synchronized(waitingQueue) {
-            Iterator iter = waitingQueue.values().iterator();
+            Iterator<Packet> iter = waitingQueue.values().iterator();
             while (iter.hasNext()) {
-                Packet packet = (Packet)iter.next();
+                Packet packet = iter.next();
                 synchronized(packet) {
                     packet.notify();
                 }
@@ -252,7 +252,7 @@
     void notifyDequeueEventSet() {
         int maxQueueSize = 0;
         synchronized(eventQueues) {
-            Iterator iter = eventQueues.iterator();
+            Iterator<EventQueue> iter = eventQueues.iterator();
             while (iter.hasNext()) {
                 EventQueueImpl queue = (EventQueueImpl)iter.next();
                 maxQueueSize = Math.max(maxQueueSize, queue.size());
@@ -265,7 +265,7 @@
         int maxQueueSize = 0;
 
         synchronized(eventQueues) {
-            Iterator iter = eventQueues.iterator();
+            Iterator<EventQueue> iter = eventQueues.iterator();
             while (iter.hasNext()) {
                 EventQueueImpl queue = (EventQueueImpl)iter.next();
                 queue.enqueue(eventSet);
--- a/jdk/src/share/classes/com/sun/tools/jdi/ThreadAction.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ThreadAction.java	Wed Jul 05 17:58:30 2017 +0200
@@ -33,6 +33,7 @@
  * with JDI events.
  */
 class ThreadAction extends EventObject {
+    private static final long serialVersionUID = 5690763191100515283L;
     // Event ids
     /*static final int THREAD_SUSPENDED = 1;*/
     static final int THREAD_RESUMABLE = 2;
--- a/jdk/src/share/classes/com/sun/tools/jdi/ThreadGroupReferenceImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ThreadGroupReferenceImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -118,7 +118,7 @@
                                                   .process(vm, this);
                 if (local != null) {
                     local.kids = kids;
-                    if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
+                    if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
                         vm.printTrace(description() +
                                       " temporarily caching children ");
                     }
--- a/jdk/src/share/classes/com/sun/tools/jdi/ThreadReferenceImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/ThreadReferenceImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -240,7 +240,7 @@
     public void stop(ObjectReference throwable) throws InvalidTypeException {
         validateMirror(throwable);
         // Verify that the given object is a Throwable instance
-        List list = vm.classesByName("java.lang.Throwable");
+        List<ReferenceType> list = vm.classesByName("java.lang.Throwable");
         ClassTypeImpl throwableClass = (ClassTypeImpl)list.get(0);
         if ((throwable == null) ||
             !throwableClass.isAssignableFrom(throwable)) {
@@ -296,10 +296,10 @@
         try {
             StackFrame frame = frame(0);
             Location location = frame.location();
-            List requests = vm.eventRequestManager().breakpointRequests();
-            Iterator iter = requests.iterator();
+            List<BreakpointRequest> requests = vm.eventRequestManager().breakpointRequests();
+            Iterator<BreakpointRequest> iter = requests.iterator();
             while (iter.hasNext()) {
-                BreakpointRequest request = (BreakpointRequest)iter.next();
+                BreakpointRequest request = iter.next();
                 if (location.equals(request.location())) {
                     return true;
                 }
@@ -352,8 +352,8 @@
     }
 
     public StackFrame frame(int index) throws IncompatibleThreadStateException  {
-        List list = privateFrames(index, 1);
-        return (StackFrame)list.get(0);
+        List<StackFrame> list = privateFrames(index, 1);
+        return list.get(0);
     }
 
     /**
@@ -447,7 +447,7 @@
                 snapshot.ownedMonitors = Arrays.asList(
                                  (ObjectReference[])JDWP.ThreadReference.OwnedMonitors.
                                          process(vm, this).owned);
-                if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
+                if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
                     vm.printTrace(description() +
                                   " temporarily caching owned monitors"+
                                   " (count = " + snapshot.ownedMonitors.size() + ")");
@@ -475,7 +475,7 @@
                     process(vm, this).monitor;
                 snapshot.triedCurrentContended = true;
                 if ((snapshot.contendedMonitor != null) &&
-                    ((vm.traceFlags & vm.TRACE_OBJREFS) != 0)) {
+                    ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0)) {
                     vm.printTrace(description() +
                                   " temporarily caching contended monitor"+
                                   " (id = " + snapshot.contendedMonitor.uniqueID() + ")");
@@ -509,7 +509,7 @@
                     snapshot.ownedMonitorsInfo.add(mon);
                 }
 
-                if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
+                if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
                     vm.printTrace(description() +
                                   " temporarily caching owned monitors"+
                                   " (count = " + snapshot.ownedMonitorsInfo.size() + ")");
@@ -601,9 +601,9 @@
 
     void removeListener(ThreadListener listener) {
         synchronized (vm.state()) {
-            Iterator iter = listeners.iterator();
+            Iterator<WeakReference<ThreadListener>> iter = listeners.iterator();
             while (iter.hasNext()) {
-                WeakReference ref = (WeakReference)iter.next();
+                WeakReference<ThreadListener> ref = iter.next();
                 if (listener.equals(ref.get())) {
                     iter.remove();
                     break;
@@ -619,10 +619,10 @@
      */
     private void processThreadAction(ThreadAction action) {
         synchronized (vm.state()) {
-            Iterator iter = listeners.iterator();
+            Iterator<WeakReference<ThreadListener>> iter = listeners.iterator();
             while (iter.hasNext()) {
-                WeakReference ref = (WeakReference)iter.next();
-                ThreadListener listener = (ThreadListener)ref.get();
+                WeakReference<ThreadListener> ref = iter.next();
+                ThreadListener listener = ref.get();
                 if (listener != null) {
                     switch (action.id()) {
                         case ThreadAction.THREAD_RESUMABLE:
--- a/jdk/src/share/classes/com/sun/tools/jdi/VMAction.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/VMAction.java	Wed Jul 05 17:58:30 2017 +0200
@@ -33,6 +33,8 @@
  * with JDI events.
  */
 class VMAction extends EventObject {
+    private static final long serialVersionUID = -1701944679310296090L;
+
     // Event ids
     static final int VM_SUSPENDED = 1;
     static final int VM_NOT_SUSPENDED = 2;
--- a/jdk/src/share/classes/com/sun/tools/jdi/VMState.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/VMState.java	Wed Jul 05 17:58:30 2017 +0200
@@ -34,7 +34,7 @@
     private final VirtualMachineImpl vm;
 
     // Listeners
-    private final List<WeakReference> listeners = new ArrayList<WeakReference>(); // synchronized (this)
+    private final List<WeakReference<VMListener>> listeners = new ArrayList<WeakReference<VMListener>>(); // synchronized (this)
     private boolean notifyingListeners = false;  // synchronized (this)
 
     /*
@@ -129,7 +129,7 @@
      */
     synchronized void thaw(ThreadReference resumingThread) {
         if (cache != null) {
-            if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
+            if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
                 vm.printTrace("Clearing VM suspended cache");
             }
             disableCache();
@@ -142,10 +142,10 @@
             // Prevent recursion
             notifyingListeners = true;
 
-            Iterator iter = listeners.iterator();
+            Iterator<WeakReference<VMListener>> iter = listeners.iterator();
             while (iter.hasNext()) {
-                WeakReference ref = (WeakReference)iter.next();
-                VMListener listener = (VMListener)ref.get();
+                WeakReference<VMListener> ref = iter.next();
+                VMListener listener = ref.get();
                 if (listener != null) {
                     boolean keep = true;
                     switch (action.id()) {
@@ -178,9 +178,9 @@
     }
 
     synchronized void removeListener(VMListener listener) {
-        Iterator iter = listeners.iterator();
+        Iterator<WeakReference<VMListener>> iter = listeners.iterator();
         while (iter.hasNext()) {
-            WeakReference ref = (WeakReference)iter.next();
+            WeakReference<VMListener> ref = iter.next();
             if (listener.equals(ref.get())) {
                 iter.remove();
                 break;
@@ -202,7 +202,7 @@
                                         process(vm).threads);
                 if (local != null) {
                     local.threads = threads;
-                    if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
+                    if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
                         vm.printTrace("Caching all threads (count = " +
                                       threads.size() + ") while VM suspended");
                     }
@@ -229,7 +229,7 @@
                                        process(vm).groups);
                 if (local != null) {
                     local.groups = groups;
-                    if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
+                    if ((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0) {
                         vm.printTrace(
                           "Caching top level thread groups (count = " +
                           groups.size() + ") while VM suspended");
--- a/jdk/src/share/classes/com/sun/tools/jdi/VirtualMachineImpl.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/jdi/VirtualMachineImpl.java	Wed Jul 05 17:58:30 2017 +0200
@@ -300,9 +300,9 @@
         if (!canRedefineClasses()) {
             throw new UnsupportedOperationException();
         }
-        Iterator it = classToBytes.entrySet().iterator();
+        Iterator<?> it = classToBytes.entrySet().iterator();
         for (int i = 0; it.hasNext(); i++) {
-            Map.Entry entry = (Map.Entry)it.next();
+            Map.Entry<?,?> entry = (Map.Entry)it.next();
             ReferenceTypeImpl refType = (ReferenceTypeImpl)entry.getKey();
             validateMirror(refType);
             defs[i] = new JDWP.VirtualMachine.RedefineClasses
@@ -801,7 +801,7 @@
          * we can't differentiate here, we first remove all
          * matching classes from our cache...
          */
-        Iterator iter = typesBySignature.iterator();
+        Iterator<ReferenceType> iter = typesBySignature.iterator();
         int matches = 0;
         while (iter.hasNext()) {
             ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next();
@@ -833,7 +833,7 @@
         if (typesByID == null) {
             return new ArrayList<ReferenceType>(0);
         }
-        Iterator iter = typesBySignature.iterator();
+        Iterator<ReferenceType> iter = typesBySignature.iterator();
         List<ReferenceType> list = new ArrayList<ReferenceType>();
         while (iter.hasNext()) {
             ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next();
@@ -1041,10 +1041,10 @@
     }
 
     Type findBootType(String signature) throws ClassNotLoadedException {
-        List types = allClasses();
-        Iterator iter = types.iterator();
+        List<ReferenceType> types = allClasses();
+        Iterator<ReferenceType> iter = types.iterator();
         while (iter.hasNext()) {
-            ReferenceType type = (ReferenceType)iter.next();
+            ReferenceType type = iter.next();
             if ((type.classLoader() == null) &&
                 (type.signature().equals(signature))) {
                 return type;
@@ -1227,7 +1227,7 @@
     }
 
     private void processQueue() {
-        Reference ref;
+        Reference<?> ref;
         //if ((traceFlags & TRACE_OBJREFS) != 0) {
         //    printTrace("Checking for softly reachable objects");
         //}
--- a/jdk/src/share/classes/java/awt/AWTEvent.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/awt/AWTEvent.java	Wed Jul 05 17:58:30 2017 +0200
@@ -278,9 +278,9 @@
     private static synchronized Field get_InputEvent_CanAccessSystemClipboard() {
         if (inputEvent_CanAccessSystemClipboard_Field == null) {
             inputEvent_CanAccessSystemClipboard_Field =
-                (Field)java.security.AccessController.doPrivileged(
-                    new java.security.PrivilegedAction() {
-                            public Object run() {
+                java.security.AccessController.doPrivileged(
+                    new java.security.PrivilegedAction<Field>() {
+                            public Field run() {
                                 Field field = null;
                                 try {
                                     field = InputEvent.class.
--- a/jdk/src/share/classes/java/awt/AWTEventMulticaster.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/awt/AWTEventMulticaster.java	Wed Jul 05 17:58:30 2017 +0200
@@ -953,7 +953,7 @@
      * AWTEventMulticaster.  Additionally, only listeners of type listenerType
      * are counted.  Method modified to fix bug 4513402.  -bchristi
      */
-    private static int getListenerCount(EventListener l, Class listenerType) {
+    private static int getListenerCount(EventListener l, Class<?> listenerType) {
         if (l instanceof AWTEventMulticaster) {
             AWTEventMulticaster mc = (AWTEventMulticaster)l;
             return getListenerCount(mc.a, listenerType) +
@@ -1017,6 +1017,7 @@
      *
      * @since 1.4
      */
+    @SuppressWarnings("unchecked")
     public static <T extends EventListener> T[]
         getListeners(EventListener l, Class<T> listenerType)
     {
--- a/jdk/src/share/classes/java/awt/Component.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/awt/Component.java	Wed Jul 05 17:58:30 2017 +0200
@@ -382,7 +382,7 @@
      * @serial
      * @see #add
      */
-    Vector popups;
+    Vector<PopupMenu> popups;
 
     /**
      * A component's name.
@@ -441,7 +441,7 @@
      * @see #getFocusTraversalKeys
      * @since 1.4
      */
-    Set[] focusTraversalKeys;
+    Set<AWTKeyStroke>[] focusTraversalKeys;
 
     private static final String[] focusTraversalKeyPropertyNames = {
         "forwardFocusTraversalKeys",
@@ -598,12 +598,12 @@
             initIDs();
         }
 
-        String s = (String) java.security.AccessController.doPrivileged(
-                                                                        new GetPropertyAction("awt.image.incrementaldraw"));
+        String s = java.security.AccessController.doPrivileged(
+                                                               new GetPropertyAction("awt.image.incrementaldraw"));
         isInc = (s == null || s.equals("true"));
 
-        s = (String) java.security.AccessController.doPrivileged(
-                                                                 new GetPropertyAction("awt.image.redrawrate"));
+        s = java.security.AccessController.doPrivileged(
+                                                        new GetPropertyAction("awt.image.redrawrate"));
         incRate = (s != null) ? Integer.parseInt(s) : 100;
     }
 
@@ -986,6 +986,7 @@
         appContext = AppContext.getAppContext();
     }
 
+    @SuppressWarnings({"rawtypes", "unchecked"})
     void initializeFocusTraversalKeys() {
         focusTraversalKeys = new Set[3];
     }
@@ -1369,13 +1370,13 @@
             throw new HeadlessException();
         }
 
-        PointerInfo pi = (PointerInfo)java.security.AccessController.doPrivileged(
-                                                                                  new java.security.PrivilegedAction() {
-                                                                                      public Object run() {
-                                                                                          return MouseInfo.getPointerInfo();
-                                                                                      }
-                                                                                  }
-                                                                                  );
+        PointerInfo pi = java.security.AccessController.doPrivileged(
+                                                                     new java.security.PrivilegedAction<PointerInfo>() {
+                                                                         public PointerInfo run() {
+                                                                             return MouseInfo.getPointerInfo();
+                                                                         }
+                                                                     }
+                                                                     );
 
         synchronized (getTreeLock()) {
             Component inTheSameWindow = findUnderMouseInWindow(pi);
@@ -2334,7 +2335,7 @@
         peer.setBounds(nativeX, nativeY, width, height, op);
     }
 
-
+    @SuppressWarnings("deprecation")
     private void notifyNewBounds(boolean resized, boolean moved) {
         if (componentListener != null
             || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0
@@ -4690,6 +4691,7 @@
         dispatchEventImpl(e);
     }
 
+    @SuppressWarnings("deprecation")
     void dispatchEventImpl(AWTEvent e) {
         int id = e.getID();
 
@@ -5242,7 +5244,7 @@
      * @since 1.4
      */
     public synchronized ComponentListener[] getComponentListeners() {
-        return (ComponentListener[]) (getListeners(ComponentListener.class));
+        return getListeners(ComponentListener.class);
     }
 
     /**
@@ -5311,7 +5313,7 @@
      * @since 1.4
      */
     public synchronized FocusListener[] getFocusListeners() {
-        return (FocusListener[]) (getListeners(FocusListener.class));
+        return getListeners(FocusListener.class);
     }
 
     /**
@@ -5402,7 +5404,7 @@
      * @since    1.4
      */
     public synchronized HierarchyListener[] getHierarchyListeners() {
-        return (HierarchyListener[])(getListeners(HierarchyListener.class));
+        return getListeners(HierarchyListener.class);
     }
 
     /**
@@ -5564,8 +5566,7 @@
      * @since    1.4
      */
     public synchronized HierarchyBoundsListener[] getHierarchyBoundsListeners() {
-        return (HierarchyBoundsListener[])
-            (getListeners(HierarchyBoundsListener.class));
+        return getListeners(HierarchyBoundsListener.class);
     }
 
     /*
@@ -5644,7 +5645,7 @@
      * @since    1.4
      */
     public synchronized KeyListener[] getKeyListeners() {
-        return (KeyListener[]) (getListeners(KeyListener.class));
+        return getListeners(KeyListener.class);
     }
 
     /**
@@ -5713,7 +5714,7 @@
      * @since    1.4
      */
     public synchronized MouseListener[] getMouseListeners() {
-        return (MouseListener[]) (getListeners(MouseListener.class));
+        return getListeners(MouseListener.class);
     }
 
     /**
@@ -5782,7 +5783,7 @@
      * @since    1.4
      */
     public synchronized MouseMotionListener[] getMouseMotionListeners() {
-        return (MouseMotionListener[]) (getListeners(MouseMotionListener.class));
+        return getListeners(MouseMotionListener.class);
     }
 
     /**
@@ -5855,7 +5856,7 @@
      * @since    1.4
      */
     public synchronized MouseWheelListener[] getMouseWheelListeners() {
-        return (MouseWheelListener[]) (getListeners(MouseWheelListener.class));
+        return getListeners(MouseWheelListener.class);
     }
 
     /**
@@ -5922,7 +5923,7 @@
      * @since    1.4
      */
     public synchronized InputMethodListener[] getInputMethodListeners() {
-        return (InputMethodListener[]) (getListeners(InputMethodListener.class));
+        return getListeners(InputMethodListener.class);
     }
 
     /**
@@ -5967,6 +5968,7 @@
      *
      * @since 1.3
      */
+    @SuppressWarnings("unchecked")
     public <T extends EventListener> T[] getListeners(Class<T> listenerType) {
         EventListener l = null;
         if  (listenerType == ComponentListener.class) {
@@ -6909,7 +6911,7 @@
 
             int npopups = (popups != null? popups.size() : 0);
             for (int i = 0 ; i < npopups ; i++) {
-                PopupMenu popup = (PopupMenu)popups.elementAt(i);
+                PopupMenu popup = popups.elementAt(i);
                 popup.addNotify();
             }
 
@@ -6979,7 +6981,7 @@
 
             int npopups = (popups != null? popups.size() : 0);
             for (int i = 0 ; i < npopups ; i++) {
-                PopupMenu popup = (PopupMenu)popups.elementAt(i);
+                PopupMenu popup = popups.elementAt(i);
                 popup.removeNotify();
             }
             // If there is any input context for this component, notify
@@ -7238,7 +7240,7 @@
     // would erroneously generate an IllegalArgumentException for
     // DOWN_CYCLE_TRAVERSAL_KEY.
     final void setFocusTraversalKeys_NoIDCheck(int id, Set<? extends AWTKeyStroke> keystrokes) {
-        Set oldKeys;
+        Set<AWTKeyStroke> oldKeys;
 
         synchronized (this) {
             if (focusTraversalKeys == null) {
@@ -7246,20 +7248,12 @@
             }
 
             if (keystrokes != null) {
-                for (Iterator iter = keystrokes.iterator(); iter.hasNext(); ) {
-                    Object obj = iter.next();
-
-                    if (obj == null) {
+                for (AWTKeyStroke keystroke : keystrokes ) {
+
+                    if (keystroke == null) {
                         throw new IllegalArgumentException("cannot set null focus traversal key");
                     }
 
-                    // Fix for 6195828:
-                    //According to javadoc this method should throw IAE instead of ClassCastException
-                    if (!(obj instanceof AWTKeyStroke)) {
-                        throw new IllegalArgumentException("object is expected to be AWTKeyStroke");
-                    }
-                    AWTKeyStroke keystroke = (AWTKeyStroke)obj;
-
                     if (keystroke.getKeyChar() != KeyEvent.CHAR_UNDEFINED) {
                         throw new IllegalArgumentException("focus traversal keys cannot map to KEY_TYPED events");
                     }
@@ -7279,16 +7273,16 @@
 
             oldKeys = focusTraversalKeys[id];
             focusTraversalKeys[id] = (keystrokes != null)
-                ? Collections.unmodifiableSet(new HashSet(keystrokes))
+                ? Collections.unmodifiableSet(new HashSet<AWTKeyStroke>(keystrokes))
                 : null;
         }
 
         firePropertyChange(focusTraversalKeyPropertyNames[id], oldKeys,
                            keystrokes);
     }
-    final Set getFocusTraversalKeys_NoIDCheck(int id) {
+    final Set<AWTKeyStroke> getFocusTraversalKeys_NoIDCheck(int id) {
         // Okay to return Set directly because it is an unmodifiable view
-        Set keystrokes = (focusTraversalKeys != null)
+        Set<AWTKeyStroke> keystrokes = (focusTraversalKeys != null)
             ? focusTraversalKeys[id]
             : null;
 
@@ -7686,7 +7680,7 @@
         }
 
         Window window = getContainingWindow();
-        if (window == null || !((Window)window).isFocusableWindow()) {
+        if (window == null || !window.isFocusableWindow()) {
             if (focusLog.isLoggable(PlatformLogger.FINEST)) {
                 focusLog.finest("Component doesn't have toplevel");
             }
@@ -8025,7 +8019,7 @@
                 popup.parent.remove(popup);
             }
             if (popups == null) {
-                popups = new Vector();
+                popups = new Vector<PopupMenu>();
             }
             popups.addElement(popup);
             popup.parent = this;
@@ -8044,6 +8038,7 @@
      * @see       #add(PopupMenu)
      * @since     JDK1.1
      */
+    @SuppressWarnings("unchecked")
     public void remove(MenuComponent popup) {
         synchronized (getTreeLock()) {
             if (popups == null) {
@@ -8556,26 +8551,26 @@
         //
         // Swing classes MUST be loaded by the bootstrap class loader,
         // otherwise we don't consider them.
-        for (Class klass = Component.this.getClass(); klass != null;
+        for (Class<?> klass = Component.this.getClass(); klass != null;
                    klass = klass.getSuperclass()) {
             if (klass.getPackage() == swingPackage &&
                       klass.getClassLoader() == null) {
-                final Class swingClass = klass;
+                final Class<?> swingClass = klass;
                 // Find the first override of the compWriteObjectNotify method
-                Method[] methods = (Method[])AccessController.doPrivileged(
-                                                                           new PrivilegedAction() {
-                                                                               public Object run() {
-                                                                                   return swingClass.getDeclaredMethods();
-                                                                               }
-                                                                           });
+                Method[] methods = AccessController.doPrivileged(
+                                                                 new PrivilegedAction<Method[]>() {
+                                                                     public Method[] run() {
+                                                                         return swingClass.getDeclaredMethods();
+                                                                     }
+                                                                 });
                 for (int counter = methods.length - 1; counter >= 0;
                      counter--) {
                     final Method method = methods[counter];
                     if (method.getName().equals("compWriteObjectNotify")){
                         // We found it, use doPrivileged to make it accessible
                         // to use.
-                        AccessController.doPrivileged(new PrivilegedAction() {
-                                public Object run() {
+                        AccessController.doPrivileged(new PrivilegedAction<Void>() {
+                                public Void run() {
                                     method.setAccessible(true);
                                     return null;
                                 }
@@ -8804,7 +8799,7 @@
         if (popups != null) {
             int npopups = popups.size();
             for (int i = 0 ; i < npopups ; i++) {
-                PopupMenu popup = (PopupMenu)popups.elementAt(i);
+                PopupMenu popup = popups.elementAt(i);
                 popup.parent = this;
             }
         }
@@ -9658,7 +9653,7 @@
         if (obj == null) return false;
         if (className == null) return false;
 
-        Class cls = obj.getClass();
+        Class<?> cls = obj.getClass();
         while (cls != null) {
             if (cls.getName().equals(className)) {
                 return true;
--- a/jdk/src/share/classes/java/awt/Font.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/awt/Font.java	Wed Jul 05 17:58:30 2017 +0200
@@ -254,7 +254,7 @@
      * @serial
      * @see #getAttributes()
      */
-    private Hashtable fRequestedAttributes;
+    private Hashtable<Object, Object> fRequestedAttributes;
 
     /*
      * Constants to be used for logical font family names.
@@ -446,6 +446,7 @@
     //       We implement this functionality in a package-private method
     //       to insure that it cannot be overridden by client subclasses.
     //       DO NOT INVOKE CLIENT CODE ON THIS THREAD!
+    @SuppressWarnings("deprecation")
     final FontPeer getPeer_NoClientCode() {
         if(peer == null) {
             Toolkit tk = Toolkit.getDefaultToolkit();
@@ -907,11 +908,11 @@
                             break;
                         }
                         if (tracker != null) {
-                            if (totalSize+bytesRead > tracker.MAX_FILE_SIZE) {
+                            if (totalSize+bytesRead > CreatedFontTracker.MAX_FILE_SIZE) {
                                 throw new IOException("File too big.");
                             }
                             if (totalSize+tracker.getNumBytes() >
-                                tracker.MAX_TOTAL_BYTES)
+                                CreatedFontTracker.MAX_TOTAL_BYTES)
                               {
                                 throw new IOException("Total files too big.");
                             }
@@ -2126,11 +2127,11 @@
         return false;   // REMIND always safe, but prevents caller optimize
     }
 
-    private transient SoftReference flmref;
+    private transient SoftReference<FontLineMetrics> flmref;
     private FontLineMetrics defaultLineMetrics(FontRenderContext frc) {
         FontLineMetrics flm = null;
         if (flmref == null
-            || (flm = (FontLineMetrics)flmref.get()) == null
+            || (flm = flmref.get()) == null
             || !flm.frc.equals(frc)) {
 
             /* The device transform in the frc is not used in obtaining line
@@ -2194,7 +2195,7 @@
                                              ssOffset, italicAngle);
 
             flm = new FontLineMetrics(0, cm, frc);
-            flmref = new SoftReference(flm);
+            flmref = new SoftReference<FontLineMetrics>(flm);
         }
 
         return (FontLineMetrics)flm.clone();
--- a/jdk/src/share/classes/java/awt/Toolkit.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/awt/Toolkit.java	Wed Jul 05 17:58:30 2017 +0200
@@ -706,9 +706,9 @@
         final Properties properties = new Properties();
 
 
-        atNames = (String)java.security.AccessController.doPrivileged(
-            new java.security.PrivilegedAction() {
-            public Object run() {
+        atNames = java.security.AccessController.doPrivileged(
+            new java.security.PrivilegedAction<String>() {
+            public String run() {
 
                 // Try loading the per-user accessibility properties file.
                 try {
@@ -798,7 +798,7 @@
             while (parser.hasMoreTokens()) {
                 atName = parser.nextToken();
                 try {
-                    Class clazz;
+                    Class<?> clazz;
                     if (cl != null) {
                         clazz = cl.loadClass(atName);
                     } else {
@@ -860,8 +860,8 @@
                 java.lang.Compiler.disable();
 
                 java.security.AccessController.doPrivileged(
-                        new java.security.PrivilegedAction() {
-                    public Object run() {
+                        new java.security.PrivilegedAction<Void>() {
+                    public Void run() {
                         String nm = null;
                         Class cls = null;
                         try {
@@ -1653,8 +1653,8 @@
 
     static {
         java.security.AccessController.doPrivileged(
-                                 new java.security.PrivilegedAction() {
-            public Object run() {
+                                 new java.security.PrivilegedAction<Void>() {
+            public Void run() {
                 try {
                     resources =
                         ResourceBundle.getBundle("sun.awt.resources.awt",
@@ -1984,7 +1984,7 @@
     private int[] calls = new int[LONG_BITS];
     private static volatile long enabledOnToolkitMask;
     private AWTEventListener eventListener = null;
-    private WeakHashMap listener2SelectiveListener = new WeakHashMap();
+    private WeakHashMap<AWTEventListener, SelectiveAWTEventListener> listener2SelectiveListener = new WeakHashMap<>();
 
     /*
      * Extracts a "pure" AWTEventListener from a AWTEventListenerProxy,
@@ -2051,7 +2051,7 @@
         }
         synchronized (this) {
             SelectiveAWTEventListener selectiveListener =
-            (SelectiveAWTEventListener)listener2SelectiveListener.get(localL);
+                listener2SelectiveListener.get(localL);
 
             if (selectiveListener == null) {
                 // Create a new selectiveListener.
@@ -2121,7 +2121,7 @@
 
         synchronized (this) {
             SelectiveAWTEventListener selectiveListener =
-            (SelectiveAWTEventListener)listener2SelectiveListener.get(localL);
+                listener2SelectiveListener.get(localL);
 
             if (selectiveListener != null) {
                 listener2SelectiveListener.remove(localL);
@@ -2244,7 +2244,7 @@
         synchronized (this) {
             EventListener[] la = ToolkitEventMulticaster.getListeners(eventListener,AWTEventListener.class);
 
-            java.util.List list = new ArrayList(la.length);
+            java.util.List<AWTEventListenerProxy> list = new ArrayList<>(la.length);
 
             for (int i = 0; i < la.length; i++) {
                 SelectiveAWTEventListener sael = (SelectiveAWTEventListener)la[i];
@@ -2254,7 +2254,7 @@
                                                        sael.getListener()));
                 }
             }
-            return (AWTEventListener[])list.toArray(new AWTEventListener[0]);
+            return list.toArray(new AWTEventListener[0]);
         }
     }
 
@@ -2457,7 +2457,9 @@
         }
     }
 
+    @SuppressWarnings("serial")
     private static class DesktopPropertyChangeSupport extends PropertyChangeSupport {
+
         private static final StringBuilder PROP_CHANGE_SUPPORT_KEY =
                 new StringBuilder("desktop property change support key");
         private final Object source;
--- a/jdk/src/share/classes/java/awt/image/ColorModel.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/awt/image/ColorModel.java	Wed Jul 05 17:58:30 2017 +0200
@@ -357,7 +357,7 @@
             this.transparency         = transparency;
         }
 
-        nBits = (int[]) bits.clone();
+        nBits = bits.clone();
         this.pixel_bits = pixel_bits;
         if (pixel_bits <= 0) {
             throw new IllegalArgumentException("Number of pixel bits must "+
@@ -474,7 +474,7 @@
      */
     public int[] getComponentSize() {
         if (nBits != null) {
-            return (int[]) nBits.clone();
+            return nBits.clone();
         }
 
         return null;
@@ -1692,10 +1692,10 @@
     static short[] s8Tol16 = null; // 8-bit non-linear sRGB to 16-bit linear LUT
 
                                 // Maps to hold LUTs for grayscale conversions
-    static Map g8Tos8Map = null;     // 8-bit gray values to 8-bit sRGB values
-    static Map lg16Toog8Map = null;  // 16-bit linear to 8-bit "other" gray
-    static Map g16Tos8Map = null;    // 16-bit gray values to 8-bit sRGB values
-    static Map lg16Toog16Map = null; // 16-bit linear to 16-bit "other" gray
+    static Map<ICC_ColorSpace, byte[]> g8Tos8Map = null;     // 8-bit gray values to 8-bit sRGB values
+    static Map<ICC_ColorSpace, byte[]> lg16Toog8Map = null;  // 16-bit linear to 8-bit "other" gray
+    static Map<ICC_ColorSpace, byte[]> g16Tos8Map = null;    // 16-bit gray values to 8-bit sRGB values
+    static Map<ICC_ColorSpace, short[]> lg16Toog16Map = null; // 16-bit linear to 16-bit "other" gray
 
     static boolean isLinearRGBspace(ColorSpace cs) {
         // Note: CMM.LINEAR_RGBspace will be null if the linear
@@ -1799,7 +1799,7 @@
             return getLinearRGB8TosRGB8LUT();
         }
         if (g8Tos8Map != null) {
-            byte[] g8Tos8LUT = (byte []) g8Tos8Map.get(grayCS);
+            byte[] g8Tos8LUT = g8Tos8Map.get(grayCS);
             if (g8Tos8LUT != null) {
                 return g8Tos8LUT;
             }
@@ -1827,7 +1827,7 @@
             g8Tos8LUT[i] = tmp[j];
         }
         if (g8Tos8Map == null) {
-            g8Tos8Map = Collections.synchronizedMap(new WeakHashMap(2));
+            g8Tos8Map = Collections.synchronizedMap(new WeakHashMap<ICC_ColorSpace, byte[]>(2));
         }
         g8Tos8Map.put(grayCS, g8Tos8LUT);
         return g8Tos8LUT;
@@ -1840,7 +1840,7 @@
      */
     static byte[] getLinearGray16ToOtherGray8LUT(ICC_ColorSpace grayCS) {
         if (lg16Toog8Map != null) {
-            byte[] lg16Toog8LUT = (byte []) lg16Toog8Map.get(grayCS);
+            byte[] lg16Toog8LUT = lg16Toog8Map.get(grayCS);
             if (lg16Toog8LUT != null) {
                 return lg16Toog8LUT;
             }
@@ -1866,7 +1866,7 @@
                 (byte) (((float) (tmp[i] & 0xffff)) * (1.0f /257.0f) + 0.5f);
         }
         if (lg16Toog8Map == null) {
-            lg16Toog8Map = Collections.synchronizedMap(new WeakHashMap(2));
+            lg16Toog8Map = Collections.synchronizedMap(new WeakHashMap<ICC_ColorSpace, byte[]>(2));
         }
         lg16Toog8Map.put(grayCS, lg16Toog8LUT);
         return lg16Toog8LUT;
@@ -1884,7 +1884,7 @@
             return getLinearRGB16TosRGB8LUT();
         }
         if (g16Tos8Map != null) {
-            byte[] g16Tos8LUT = (byte []) g16Tos8Map.get(grayCS);
+            byte[] g16Tos8LUT = g16Tos8Map.get(grayCS);
             if (g16Tos8LUT != null) {
                 return g16Tos8LUT;
             }
@@ -1916,7 +1916,7 @@
                 (byte) (((float) (tmp[j] & 0xffff)) * (1.0f /257.0f) + 0.5f);
         }
         if (g16Tos8Map == null) {
-            g16Tos8Map = Collections.synchronizedMap(new WeakHashMap(2));
+            g16Tos8Map = Collections.synchronizedMap(new WeakHashMap<ICC_ColorSpace, byte[]>(2));
         }
         g16Tos8Map.put(grayCS, g16Tos8LUT);
         return g16Tos8LUT;
@@ -1929,7 +1929,7 @@
      */
     static short[] getLinearGray16ToOtherGray16LUT(ICC_ColorSpace grayCS) {
         if (lg16Toog16Map != null) {
-            short[] lg16Toog16LUT = (short []) lg16Toog16Map.get(grayCS);
+            short[] lg16Toog16LUT = lg16Toog16Map.get(grayCS);
             if (lg16Toog16LUT != null) {
                 return lg16Toog16LUT;
             }
@@ -1950,7 +1950,7 @@
             transformList);
         short[] lg16Toog16LUT = t.colorConvert(tmp, null);
         if (lg16Toog16Map == null) {
-            lg16Toog16Map = Collections.synchronizedMap(new WeakHashMap(2));
+            lg16Toog16Map = Collections.synchronizedMap(new WeakHashMap<ICC_ColorSpace, short[]>(2));
         }
         lg16Toog16Map.put(grayCS, lg16Toog16LUT);
         return lg16Toog16LUT;
--- a/jdk/src/share/classes/java/lang/Boolean.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Boolean.java	Wed Jul 05 17:58:30 2017 +0200
@@ -60,7 +60,8 @@
      *
      * @since   JDK1.1
      */
-    public static final Class<Boolean> TYPE = Class.getPrimitiveClass("boolean");
+    @SuppressWarnings("unchecked")
+    public static final Class<Boolean> TYPE = (Class<Boolean>) Class.getPrimitiveClass("boolean");
 
     /**
      * The value of the Boolean.
--- a/jdk/src/share/classes/java/lang/Byte.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Byte.java	Wed Jul 05 17:58:30 2017 +0200
@@ -59,6 +59,7 @@
      * The {@code Class} instance representing the primitive type
      * {@code byte}.
      */
+    @SuppressWarnings("unchecked")
     public static final Class<Byte>     TYPE = (Class<Byte>) Class.getPrimitiveClass("byte");
 
     /**
--- a/jdk/src/share/classes/java/lang/Character.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Character.java	Wed Jul 05 17:58:30 2017 +0200
@@ -172,7 +172,7 @@
      * @since   1.1
      */
     @SuppressWarnings("unchecked")
-    public static final Class<Character> TYPE = Class.getPrimitiveClass("char");
+    public static final Class<Character> TYPE = (Class<Character>) Class.getPrimitiveClass("char");
 
     /*
      * Normative general types
--- a/jdk/src/share/classes/java/lang/CharacterName.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/CharacterName.java	Wed Jul 05 17:58:30 2017 +0200
@@ -101,6 +101,8 @@
         if (lookup[cp>>8] == null ||
             (off = lookup[cp>>8][cp&0xff]) == 0)
             return null;
-        return new String(strPool, 0, off >>> 8, off & 0xff);  // ASCII
+        @SuppressWarnings("deprecation")
+        String result = new String(strPool, 0, off >>> 8, off & 0xff);  // ASCII
+        return result;
     }
 }
--- a/jdk/src/share/classes/java/lang/Class.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Class.java	Wed Jul 05 17:58:30 2017 +0200
@@ -631,6 +631,7 @@
      *     <cite>The Java&trade; Virtual Machine Specification</cite>
      * @since 1.5
      */
+    @SuppressWarnings("unchecked")
     public TypeVariable<Class<T>>[] getTypeParameters() {
         if (getGenericSignature() != null)
             return (TypeVariable<Class<T>>[])getGenericInfo().getTypeParameters();
@@ -1303,7 +1304,7 @@
 
         return java.security.AccessController.doPrivileged(
             new java.security.PrivilegedAction<Class<?>[]>() {
-                public Class[] run() {
+                public Class<?>[] run() {
                     List<Class<?>> list = new ArrayList<>();
                     Class<?> currentClass = Class.this;
                     while (currentClass != null) {
@@ -1315,7 +1316,7 @@
                         }
                         currentClass = currentClass.getSuperclass();
                     }
-                    return list.toArray(new Class[0]);
+                    return list.toArray(new Class<?>[0]);
                 }
             });
     }
@@ -2150,7 +2151,7 @@
      * Return the Virtual Machine's Class object for the named
      * primitive type.
      */
-    static native Class getPrimitiveClass(String name);
+    static native Class<?> getPrimitiveClass(String name);
 
 
     /*
@@ -2395,7 +2396,9 @@
         }
         // No cached value available; request value from VM
         if (isInterface()) {
-            res = new Constructor[0];
+            @SuppressWarnings("unchecked")
+            Constructor<T>[] temporaryRes = (Constructor<T>[]) new Constructor<?>[0];
+            res = temporaryRes;
         } else {
             res = getDeclaredConstructors0(publicOnly);
         }
@@ -2951,7 +2954,9 @@
                                 return null;
                             }
                         });
-                enumConstants = (T[])values.invoke(null);
+                @SuppressWarnings("unchecked")
+                T[] temporaryConstants = (T[])values.invoke(null);
+                enumConstants = temporaryConstants;
             }
             // These can happen when users concoct enum-like classes
             // that don't comply with the enum spec.
@@ -2996,6 +3001,7 @@
      *
      * @since 1.5
      */
+    @SuppressWarnings("unchecked")
     public T cast(Object obj) {
         if (obj != null && !isInstance(obj))
             throw new ClassCastException(cannotCastMsg(obj));
@@ -3026,6 +3032,7 @@
      *    the class itself).
      * @since 1.5
      */
+    @SuppressWarnings("unchecked")
     public <U> Class<? extends U> asSubclass(Class<U> clazz) {
         if (clazz.isAssignableFrom(this))
             return (Class<? extends U>) this;
@@ -3037,6 +3044,7 @@
      * @throws NullPointerException {@inheritDoc}
      * @since 1.5
      */
+    @SuppressWarnings("unchecked")
     public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {
         if (annotationClass == null)
             throw new NullPointerException();
--- a/jdk/src/share/classes/java/lang/ClassLoader.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/ClassLoader.java	Wed Jul 05 17:58:30 2017 +0200
@@ -1167,7 +1167,8 @@
      * @since  1.2
      */
     public Enumeration<URL> getResources(String name) throws IOException {
-        Enumeration[] tmp = new Enumeration[2];
+        @SuppressWarnings("unchecked")
+        Enumeration<URL>[] tmp = (Enumeration<URL>[]) new Enumeration<?>[2];
         if (parent != null) {
             tmp[0] = parent.getResources(name);
         } else {
--- a/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java	Wed Jul 05 17:58:30 2017 +0200
@@ -92,15 +92,15 @@
     };
 
     // A hash table that contains the above entries
-    static Hashtable entryTable = new Hashtable();
+    static Hashtable<Integer, HashSet<Entry>> entryTable = new Hashtable<>();
     static {
         // create hashtable from the entry
         for (int i = 0; i < entry.length; i ++) {
             Entry cur = entry[i];
             Integer cp = new Integer(cur.getCodePoint());
-            HashSet set = (HashSet)entryTable.get(cp);
+            HashSet<Entry> set = entryTable.get(cp);
             if (set == null) {
-                set = new HashSet();
+                set = new HashSet<Entry>();
             }
             set.add(cur);
             entryTable.put(cp, set);
@@ -151,13 +151,13 @@
     }
 
     private static char[] lookUpTable(String src, int index, Locale locale, boolean bLowerCasing) {
-        HashSet set = (HashSet)entryTable.get(new Integer(src.codePointAt(index)));
+        HashSet<Entry> set = entryTable.get(new Integer(src.codePointAt(index)));
 
         if (set != null) {
-            Iterator iter = set.iterator();
+            Iterator<Entry> iter = set.iterator();
             String currentLang = locale.getLanguage();
             while (iter.hasNext()) {
-                Entry entry = (Entry)iter.next();
+                Entry entry = iter.next();
                 String conditionLang= entry.getLanguage();
                 if (((conditionLang == null) || (conditionLang.equals(currentLang))) &&
                         isConditionMet(src, index, locale, entry.getCondition())) {
--- a/jdk/src/share/classes/java/lang/Double.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Double.java	Wed Jul 05 17:58:30 2017 +0200
@@ -128,6 +128,7 @@
      *
      * @since JDK1.1
      */
+    @SuppressWarnings("unchecked")
     public static final Class<Double>   TYPE = (Class<Double>) Class.getPrimitiveClass("double");
 
     /**
@@ -715,7 +716,7 @@
      * @return the {@code double} value represented by this object
      */
     public double doubleValue() {
-        return (double)value;
+        return value;
     }
 
     /**
--- a/jdk/src/share/classes/java/lang/EnumConstantNotPresentException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/EnumConstantNotPresentException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -36,6 +36,7 @@
  * @see     java.lang.reflect.AnnotatedElement
  * @since   1.5
  */
+@SuppressWarnings("rawtypes") /* rawtypes are part of the public api */
 public class EnumConstantNotPresentException extends RuntimeException {
     private static final long serialVersionUID = -6046998521960521108L;
 
--- a/jdk/src/share/classes/java/lang/Float.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Float.java	Wed Jul 05 17:58:30 2017 +0200
@@ -126,7 +126,8 @@
      *
      * @since JDK1.1
      */
-    public static final Class<Float> TYPE = Class.getPrimitiveClass("float");
+    @SuppressWarnings("unchecked")
+    public static final Class<Float> TYPE = (Class<Float>) Class.getPrimitiveClass("float");
 
     /**
      * Returns a string representation of the {@code float}
--- a/jdk/src/share/classes/java/lang/Integer.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Integer.java	Wed Jul 05 17:58:30 2017 +0200
@@ -68,6 +68,7 @@
      *
      * @since   JDK1.1
      */
+    @SuppressWarnings("unchecked")
     public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
 
     /**
--- a/jdk/src/share/classes/java/lang/Long.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Long.java	Wed Jul 05 17:58:30 2017 +0200
@@ -66,6 +66,7 @@
      *
      * @since   JDK1.1
      */
+    @SuppressWarnings("unchecked")
     public static final Class<Long>     TYPE = (Class<Long>) Class.getPrimitiveClass("long");
 
     /**
@@ -734,7 +735,7 @@
      * {@code long} value.
      */
     public long longValue() {
-        return (long)value;
+        return value;
     }
 
     /**
--- a/jdk/src/share/classes/java/lang/Short.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Short.java	Wed Jul 05 17:58:30 2017 +0200
@@ -58,6 +58,7 @@
      * The {@code Class} instance representing the primitive type
      * {@code short}.
      */
+    @SuppressWarnings("unchecked")
     public static final Class<Short>    TYPE = (Class<Short>) Class.getPrimitiveClass("short");
 
     /**
--- a/jdk/src/share/classes/java/lang/System.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/System.java	Wed Jul 05 17:58:30 2017 +0200
@@ -1032,7 +1032,7 @@
      */
     @Deprecated
     public static void runFinalizersOnExit(boolean value) {
-        Runtime.getRuntime().runFinalizersOnExit(value);
+        Runtime.runFinalizersOnExit(value);
     }
 
     /**
--- a/jdk/src/share/classes/java/lang/ThreadLocal.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/ThreadLocal.java	Wed Jul 05 17:58:30 2017 +0200
@@ -144,8 +144,11 @@
         ThreadLocalMap map = getMap(t);
         if (map != null) {
             ThreadLocalMap.Entry e = map.getEntry(this);
-            if (e != null)
-                return (T)e.value;
+            if (e != null) {
+                @SuppressWarnings("unchecked")
+                T result = (T)e.value;
+                return result;
+            }
         }
         return setInitialValue();
     }
@@ -268,11 +271,11 @@
          * entry can be expunged from table.  Such entries are referred to
          * as "stale entries" in the code that follows.
          */
-        static class Entry extends WeakReference<ThreadLocal> {
+        static class Entry extends WeakReference<ThreadLocal<?>> {
             /** The value associated with this ThreadLocal. */
             Object value;
 
-            Entry(ThreadLocal k, Object v) {
+            Entry(ThreadLocal<?> k, Object v) {
                 super(k);
                 value = v;
             }
@@ -325,7 +328,7 @@
          * ThreadLocalMaps are constructed lazily, so we only create
          * one when we have at least one entry to put in it.
          */
-        ThreadLocalMap(ThreadLocal firstKey, Object firstValue) {
+        ThreadLocalMap(ThreadLocal<?> firstKey, Object firstValue) {
             table = new Entry[INITIAL_CAPACITY];
             int i = firstKey.threadLocalHashCode & (INITIAL_CAPACITY - 1);
             table[i] = new Entry(firstKey, firstValue);
@@ -348,7 +351,8 @@
             for (int j = 0; j < len; j++) {
                 Entry e = parentTable[j];
                 if (e != null) {
-                    ThreadLocal key = e.get();
+                    @SuppressWarnings("unchecked")
+                    ThreadLocal<Object> key = (ThreadLocal<Object>) e.get();
                     if (key != null) {
                         Object value = key.childValue(e.value);
                         Entry c = new Entry(key, value);
@@ -372,7 +376,7 @@
          * @param  key the thread local object
          * @return the entry associated with key, or null if no such
          */
-        private Entry getEntry(ThreadLocal key) {
+        private Entry getEntry(ThreadLocal<?> key) {
             int i = key.threadLocalHashCode & (table.length - 1);
             Entry e = table[i];
             if (e != null && e.get() == key)
@@ -390,12 +394,12 @@
          * @param  e the entry at table[i]
          * @return the entry associated with key, or null if no such
          */
-        private Entry getEntryAfterMiss(ThreadLocal key, int i, Entry e) {
+        private Entry getEntryAfterMiss(ThreadLocal<?> key, int i, Entry e) {
             Entry[] tab = table;
             int len = tab.length;
 
             while (e != null) {
-                ThreadLocal k = e.get();
+                ThreadLocal<?> k = e.get();
                 if (k == key)
                     return e;
                 if (k == null)
@@ -413,7 +417,7 @@
          * @param key the thread local object
          * @param value the value to be set
          */
-        private void set(ThreadLocal key, Object value) {
+        private void set(ThreadLocal<?> key, Object value) {
 
             // We don't use a fast path as with get() because it is at
             // least as common to use set() to create new entries as
@@ -427,7 +431,7 @@
             for (Entry e = tab[i];
                  e != null;
                  e = tab[i = nextIndex(i, len)]) {
-                ThreadLocal k = e.get();
+                ThreadLocal<?> k = e.get();
 
                 if (k == key) {
                     e.value = value;
@@ -449,7 +453,7 @@
         /**
          * Remove the entry for key.
          */
-        private void remove(ThreadLocal key) {
+        private void remove(ThreadLocal<?> key) {
             Entry[] tab = table;
             int len = tab.length;
             int i = key.threadLocalHashCode & (len-1);
@@ -479,7 +483,7 @@
          * @param  staleSlot index of the first stale entry encountered while
          *         searching for key.
          */
-        private void replaceStaleEntry(ThreadLocal key, Object value,
+        private void replaceStaleEntry(ThreadLocal<?> key, Object value,
                                        int staleSlot) {
             Entry[] tab = table;
             int len = tab.length;
@@ -501,7 +505,7 @@
             for (int i = nextIndex(staleSlot, len);
                  (e = tab[i]) != null;
                  i = nextIndex(i, len)) {
-                ThreadLocal k = e.get();
+                ThreadLocal<?> k = e.get();
 
                 // If we find key, then we need to swap it
                 // with the stale entry to maintain hash table order.
@@ -563,7 +567,7 @@
             for (i = nextIndex(staleSlot, len);
                  (e = tab[i]) != null;
                  i = nextIndex(i, len)) {
-                ThreadLocal k = e.get();
+                ThreadLocal<?> k = e.get();
                 if (k == null) {
                     e.value = null;
                     tab[i] = null;
@@ -650,7 +654,7 @@
             for (int j = 0; j < oldLen; ++j) {
                 Entry e = oldTab[j];
                 if (e != null) {
-                    ThreadLocal k = e.get();
+                    ThreadLocal<?> k = e.get();
                     if (k == null) {
                         e.value = null; // Help the GC
                     } else {
--- a/jdk/src/share/classes/java/lang/Void.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Void.java	Wed Jul 05 17:58:30 2017 +0200
@@ -40,7 +40,8 @@
      * The {@code Class} object representing the pseudo-type corresponding to
      * the keyword {@code void}.
      */
-    public static final Class<Void> TYPE = Class.getPrimitiveClass("void");
+    @SuppressWarnings("unchecked")
+    public static final Class<Void> TYPE = (Class<Void>) Class.getPrimitiveClass("void");
 
     /*
      * The Void class cannot be instantiated.
--- a/jdk/src/share/classes/java/net/HttpCookie.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/net/HttpCookie.java	Wed Jul 05 17:58:30 2017 +0200
@@ -72,6 +72,10 @@
     private boolean httpOnly;   // HttpOnly ... i.e. not accessible to scripts
     private int version = 1;    // Version=1 ... RFC 2965 style
 
+    // The original header this cookie was consructed from, if it was
+    // constructed by parsing a header, otherwise null.
+    private final String header;
+
     // Hold the creation time (in seconds) of the http cookie for later
     // expiration calculation
     private final long whenCreated;
@@ -128,6 +132,10 @@
      * @see #setVersion
      */
     public HttpCookie(String name, String value) {
+        this(name, value, null /*header*/);
+    }
+
+    private HttpCookie(String name, String value, String header) {
         name = name.trim();
         if (name.length() == 0 || !isToken(name) || isReserved(name)) {
             throw new IllegalArgumentException("Illegal cookie name");
@@ -140,6 +148,7 @@
 
         whenCreated = System.currentTimeMillis();
         portlist = null;
+        this.header = header;
     }
 
     /**
@@ -163,6 +172,15 @@
      *          if the header string is {@code null}
      */
     public static List<HttpCookie> parse(String header) {
+        return parse(header, false);
+    }
+
+    // Private version of parse() that will store the original header used to
+    // create the cookie, in the cookie itself. This can be useful for filtering
+    // Set-Cookie[2] headers, using the internal parsing logic defined in this
+    // class.
+    private static List<HttpCookie> parse(String header, boolean retainHeader) {
+
         int version = guessCookieVersion(header);
 
         // if header start with set-cookie or set-cookie2, strip it off
@@ -178,7 +196,7 @@
         // so the parse logic is slightly different
         if (version == 0) {
             // Netscape draft cookie
-            HttpCookie cookie = parseInternal(header);
+            HttpCookie cookie = parseInternal(header, retainHeader);
             cookie.setVersion(0);
             cookies.add(cookie);
         } else {
@@ -187,7 +205,7 @@
             // it'll separate them with comma
             List<String> cookieStrings = splitMultiCookies(header);
             for (String cookieStr : cookieStrings) {
-                HttpCookie cookie = parseInternal(cookieStr);
+                HttpCookie cookie = parseInternal(cookieStr, retainHeader);
                 cookie.setVersion(1);
                 cookies.add(cookie);
             }
@@ -804,7 +822,8 @@
      * @throws  IllegalArgumentException
      *          if header string violates the cookie specification
      */
-    private static HttpCookie parseInternal(String header)
+    private static HttpCookie parseInternal(String header,
+                                            boolean retainHeader)
     {
         HttpCookie cookie = null;
         String namevaluePair = null;
@@ -819,7 +838,13 @@
             if (index != -1) {
                 String name = namevaluePair.substring(0, index).trim();
                 String value = namevaluePair.substring(index + 1).trim();
-                cookie = new HttpCookie(name, stripOffSurroundingQuote(value));
+                if (retainHeader)
+                    cookie = new HttpCookie(name,
+                                            stripOffSurroundingQuote(value),
+                                            header);
+                else
+                    cookie = new HttpCookie(name,
+                                            stripOffSurroundingQuote(value));
             } else {
                 // no "=" in name-value pair; it's an error
                 throw new IllegalArgumentException("Invalid cookie name-value pair");
@@ -972,6 +997,28 @@
         }
     }
 
+    static {
+        sun.misc.SharedSecrets.setJavaNetHttpCookieAccess(
+            new sun.misc.JavaNetHttpCookieAccess() {
+                public List<HttpCookie> parse(String header) {
+                    return HttpCookie.parse(header, true);
+                }
+
+                public String header(HttpCookie cookie) {
+                    return cookie.header;
+                }
+            }
+        );
+    }
+
+    /*
+     * Returns the original header this cookie was consructed from, if it was
+     * constructed by parsing a header, otherwise null.
+     */
+    private String header() {
+        return header;
+    }
+
     /*
      * Constructs a string representation of this cookie. The string format is
      * as Netscape spec, but without leading "Cookie:" token.
--- a/jdk/src/share/classes/java/nio/file/spi/FileSystemProvider.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/nio/file/spi/FileSystemProvider.java	Wed Jul 05 17:58:30 2017 +0200
@@ -373,11 +373,13 @@
     {
         if (options.length > 0) {
             for (OpenOption opt: options) {
-                if (opt != StandardOpenOption.READ)
+                // All OpenOption values except for APPEND and WRITE are allowed
+                if (opt == StandardOpenOption.APPEND ||
+                    opt == StandardOpenOption.WRITE)
                     throw new UnsupportedOperationException("'" + opt + "' not allowed");
             }
         }
-        return Channels.newInputStream(Files.newByteChannel(path));
+        return Channels.newInputStream(Files.newByteChannel(path, options));
     }
 
     /**
--- a/jdk/src/share/classes/java/util/Locale.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/Locale.java	Wed Jul 05 17:58:30 2017 +0200
@@ -737,10 +737,6 @@
      */
     public static Locale getDefault() {
         // do not synchronize this method - see 4071298
-        // it's OK if more than one default locale happens to be created
-        if (defaultLocale == null) {
-            initDefault();
-        }
         return defaultLocale;
     }
 
@@ -762,16 +758,23 @@
      */
     public static Locale getDefault(Locale.Category category) {
         // do not synchronize this method - see 4071298
-        // it's OK if more than one default locale happens to be created
         switch (category) {
         case DISPLAY:
             if (defaultDisplayLocale == null) {
-                initDefault(category);
+                synchronized(Locale.class) {
+                    if (defaultDisplayLocale == null) {
+                        defaultDisplayLocale = initDefault(category);
+                    }
+                }
             }
             return defaultDisplayLocale;
         case FORMAT:
             if (defaultFormatLocale == null) {
-                initDefault(category);
+                synchronized(Locale.class) {
+                    if (defaultFormatLocale == null) {
+                        defaultFormatLocale = initDefault(category);
+                    }
+                }
             }
             return defaultFormatLocale;
         default:
@@ -780,7 +783,7 @@
         return getDefault();
     }
 
-    private static void initDefault() {
+    private static Locale initDefault() {
         String language, region, script, country, variant;
         language = AccessController.doPrivileged(
             new GetPropertyAction("user.language", "en"));
@@ -806,16 +809,12 @@
             variant = AccessController.doPrivileged(
                 new GetPropertyAction("user.variant", ""));
         }
-        defaultLocale = getInstance(language, script, country, variant, null);
+
+        return getInstance(language, script, country, variant, null);
     }
 
-    private static void initDefault(Locale.Category category) {
-        // make sure defaultLocale is initialized
-        if (defaultLocale == null) {
-            initDefault();
-        }
-
-        Locale defaultCategoryLocale = getInstance(
+    private static Locale initDefault(Locale.Category category) {
+        return getInstance(
             AccessController.doPrivileged(
                 new GetPropertyAction(category.languageKey, defaultLocale.getLanguage())),
             AccessController.doPrivileged(
@@ -825,15 +824,6 @@
             AccessController.doPrivileged(
                 new GetPropertyAction(category.variantKey, defaultLocale.getVariant())),
             null);
-
-        switch (category) {
-        case DISPLAY:
-            defaultDisplayLocale = defaultCategoryLocale;
-            break;
-        case FORMAT:
-            defaultFormatLocale = defaultCategoryLocale;
-            break;
-        }
     }
 
     /**
@@ -1916,9 +1906,9 @@
      */
     private transient volatile int hashCodeValue = 0;
 
-    private static Locale defaultLocale = null;
-    private static Locale defaultDisplayLocale = null;
-    private static Locale defaultFormatLocale = null;
+    private volatile static Locale defaultLocale = initDefault();
+    private volatile static Locale defaultDisplayLocale = null;
+    private volatile static Locale defaultFormatLocale = null;
 
     /**
      * Return an array of the display names of the variant.
--- a/jdk/src/share/classes/java/util/concurrent/ArrayBlockingQueue.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/ArrayBlockingQueue.java	Wed Jul 05 17:58:30 2017 +0200
@@ -131,8 +131,9 @@
     /**
      * Returns item at index i.
      */
+    @SuppressWarnings("unchecked")
     final E itemAt(int i) {
-        return this.<E>cast(items[i]);
+        return (E) items[i];
     }
 
     /**
@@ -162,7 +163,8 @@
      */
     private E extract() {
         final Object[] items = this.items;
-        E x = this.<E>cast(items[takeIndex]);
+        @SuppressWarnings("unchecked")
+        E x = (E) items[takeIndex];
         items[takeIndex] = null;
         takeIndex = inc(takeIndex);
         --count;
@@ -647,7 +649,9 @@
             int n = 0;
             int max = count;
             while (n < max) {
-                c.add(this.<E>cast(items[i]));
+                @SuppressWarnings("unchecked")
+                E x = (E) items[i];
+                c.add(x);
                 items[i] = null;
                 i = inc(i);
                 ++n;
@@ -684,7 +688,9 @@
             int n = 0;
             int max = (maxElements < count) ? maxElements : count;
             while (n < max) {
-                c.add(this.<E>cast(items[i]));
+                @SuppressWarnings("unchecked")
+                E x = (E) items[i];
+                c.add(x);
                 items[i] = null;
                 i = inc(i);
                 ++n;
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentHashMap.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentHashMap.java	Wed Jul 05 17:58:30 2017 +0200
@@ -37,9 +37,6 @@
 import java.util.concurrent.locks.*;
 import java.util.*;
 import java.io.Serializable;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
 
 /**
  * A hash table supporting full concurrency of retrievals and
@@ -228,7 +225,7 @@
         static {
             try {
                 UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = HashEntry.class;
+                Class<?> k = HashEntry.class;
                 nextOffset = UNSAFE.objectFieldOffset
                     (k.getDeclaredField("next"));
             } catch (Exception e) {
@@ -433,7 +430,7 @@
             int newCapacity = oldCapacity << 1;
             threshold = (int)(newCapacity * loadFactor);
             HashEntry<K,V>[] newTable =
-                (HashEntry<K,V>[]) new HashEntry[newCapacity];
+                (HashEntry<K,V>[]) new HashEntry<?,?>[newCapacity];
             int sizeMask = newCapacity - 1;
             for (int i = 0; i < oldCapacity ; i++) {
                 HashEntry<K,V> e = oldTable[i];
@@ -677,7 +674,7 @@
             int cap = proto.table.length;
             float lf = proto.loadFactor;
             int threshold = (int)(cap * lf);
-            HashEntry<K,V>[] tab = (HashEntry<K,V>[])new HashEntry[cap];
+            HashEntry<K,V>[] tab = (HashEntry<K,V>[])new HashEntry<?,?>[cap];
             if ((seg = (Segment<K,V>)UNSAFE.getObjectVolatile(ss, u))
                 == null) { // recheck
                 Segment<K,V> s = new Segment<K,V>(lf, threshold, tab);
@@ -694,7 +691,7 @@
     // Hash-based segment and entry accesses
 
     /**
-     * Get the segment for the given hash
+     * Gets the segment for the given hash code.
      */
     @SuppressWarnings("unchecked")
     private Segment<K,V> segmentForHash(int h) {
@@ -703,7 +700,7 @@
     }
 
     /**
-     * Gets the table entry for the given segment and hash
+     * Gets the table entry for the given segment and hash code.
      */
     @SuppressWarnings("unchecked")
     static final <K,V> HashEntry<K,V> entryForHash(Segment<K,V> seg, int h) {
@@ -758,8 +755,8 @@
         // create segments and segments[0]
         Segment<K,V> s0 =
             new Segment<K,V>(loadFactor, (int)(cap * loadFactor),
-                             (HashEntry<K,V>[])new HashEntry[cap]);
-        Segment<K,V>[] ss = (Segment<K,V>[])new Segment[ssize];
+                             (HashEntry<K,V>[])new HashEntry<?,?>[cap]);
+        Segment<K,V>[] ss = (Segment<K,V>[])new Segment<?,?>[ssize];
         UNSAFE.putOrderedObject(ss, SBASE, s0); // ordered write of segments[0]
         this.segments = ss;
     }
@@ -916,6 +913,7 @@
      *
      * @throws NullPointerException if the specified key is null
      */
+    @SuppressWarnings("unchecked")
     public V get(Object key) {
         Segment<K,V> s; // manually integrate access methods to reduce overhead
         HashEntry<K,V>[] tab;
@@ -1026,7 +1024,7 @@
      * full compatibility with class {@link java.util.Hashtable},
      * which supported this method prior to introduction of the
      * Java Collections framework.
-
+     *
      * @param  value a value to search for
      * @return <tt>true</tt> if and only if some key maps to the
      *         <tt>value</tt> argument in this table as
@@ -1262,7 +1260,7 @@
         }
 
         /**
-         * Set nextEntry to first node of next non-empty table
+         * Sets nextEntry to first node of next non-empty table
          * (in backwards order, to simplify checks).
          */
         final void advance() {
@@ -1326,12 +1324,14 @@
     final class WriteThroughEntry
         extends AbstractMap.SimpleEntry<K,V>
     {
+        static final long serialVersionUID = 7249069246763182397L;
+
         WriteThroughEntry(K k, V v) {
             super(k,v);
         }
 
         /**
-         * Set our entry's value and write through to the map. The
+         * Sets our entry's value and writes through to the map. The
          * value to return is somewhat arbitrary here. Since a
          * WriteThroughEntry does not necessarily track asynchronous
          * changes, the most recent "previous" value could be
@@ -1427,15 +1427,16 @@
     /* ---------------- Serialization Support -------------- */
 
     /**
-     * Save the state of the <tt>ConcurrentHashMap</tt> instance to a
-     * stream (i.e., serialize it).
+     * Saves the state of the <tt>ConcurrentHashMap</tt> instance to a
+     * stream (i.e., serializes it).
      * @param s the stream
      * @serialData
      * the key (Object) and value (Object)
      * for each key-value mapping, followed by a null pair.
      * The key-value mappings are emitted in no particular order.
      */
-    private void writeObject(java.io.ObjectOutputStream s) throws IOException {
+    private void writeObject(java.io.ObjectOutputStream s)
+            throws java.io.IOException {
         // force all segments for serialization compatibility
         for (int k = 0; k < segments.length; ++k)
             ensureSegment(k);
@@ -1463,13 +1464,13 @@
     }
 
     /**
-     * Reconstitute the <tt>ConcurrentHashMap</tt> instance from a
-     * stream (i.e., deserialize it).
+     * Reconstitutes the <tt>ConcurrentHashMap</tt> instance from a
+     * stream (i.e., deserializes it).
      * @param s the stream
      */
     @SuppressWarnings("unchecked")
     private void readObject(java.io.ObjectInputStream s)
-        throws IOException, ClassNotFoundException {
+            throws java.io.IOException, ClassNotFoundException {
         s.defaultReadObject();
 
         // Re-initialize segments to be minimally sized, and let grow.
@@ -1479,7 +1480,7 @@
             Segment<K,V> seg = segments[k];
             if (seg != null) {
                 seg.threshold = (int)(cap * seg.loadFactor);
-                seg.table = (HashEntry<K,V>[]) new HashEntry[cap];
+                seg.table = (HashEntry<K,V>[]) new HashEntry<?,?>[cap];
             }
         }
 
@@ -1504,8 +1505,8 @@
         int ss, ts;
         try {
             UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class tc = HashEntry[].class;
-            Class sc = Segment[].class;
+            Class<?> tc = HashEntry[].class;
+            Class<?> sc = Segment[].class;
             TBASE = UNSAFE.arrayBaseOffset(tc);
             SBASE = UNSAFE.arrayBaseOffset(sc);
             ts = UNSAFE.arrayIndexScale(tc);
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedDeque.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedDeque.java	Wed Jul 05 17:58:30 2017 +0200
@@ -335,7 +335,7 @@
         static {
             try {
                 UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = Node.class;
+                Class<?> k = Node.class;
                 prevOffset = UNSAFE.objectFieldOffset
                     (k.getDeclaredField("prev"));
                 itemOffset = UNSAFE.objectFieldOffset
@@ -1457,7 +1457,7 @@
         NEXT_TERMINATOR.prev = NEXT_TERMINATOR;
         try {
             UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = ConcurrentLinkedDeque.class;
+            Class<?> k = ConcurrentLinkedDeque.class;
             headOffset = UNSAFE.objectFieldOffset
                 (k.getDeclaredField("head"));
             tailOffset = UNSAFE.objectFieldOffset
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedQueue.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentLinkedQueue.java	Wed Jul 05 17:58:30 2017 +0200
@@ -208,7 +208,7 @@
         static {
             try {
                 UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = Node.class;
+                Class<?> k = Node.class;
                 itemOffset = UNSAFE.objectFieldOffset
                     (k.getDeclaredField("item"));
                 nextOffset = UNSAFE.objectFieldOffset
@@ -823,7 +823,7 @@
     static {
         try {
             UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = ConcurrentLinkedQueue.class;
+            Class<?> k = ConcurrentLinkedQueue.class;
             headOffset = UNSAFE.objectFieldOffset
                 (k.getDeclaredField("head"));
             tailOffset = UNSAFE.objectFieldOffset
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java	Wed Jul 05 17:58:30 2017 +0200
@@ -35,7 +35,6 @@
 
 package java.util.concurrent;
 import java.util.*;
-import java.util.concurrent.atomic.*;
 
 /**
  * A scalable concurrent {@link ConcurrentNavigableMap} implementation.
@@ -90,6 +89,7 @@
  * @param <V> the type of mapped values
  * @since 1.6
  */
+@SuppressWarnings("unchecked")
 public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
     implements ConcurrentNavigableMap<K,V>,
                Cloneable,
@@ -352,11 +352,11 @@
     private transient int randomSeed;
 
     /** Lazily initialized key set */
-    private transient KeySet keySet;
+    private transient KeySet<K> keySet;
     /** Lazily initialized entry set */
-    private transient EntrySet entrySet;
+    private transient EntrySet<K,V> entrySet;
     /** Lazily initialized values collection */
-    private transient Values values;
+    private transient Values<V> values;
     /** Lazily initialized descending key set */
     private transient ConcurrentNavigableMap<K,V> descendingMap;
 
@@ -517,7 +517,7 @@
         static {
             try {
                 UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = Node.class;
+                Class<?> k = Node.class;
                 valueOffset = UNSAFE.objectFieldOffset
                     (k.getDeclaredField("value"));
                 nextOffset = UNSAFE.objectFieldOffset
@@ -597,7 +597,7 @@
         static {
             try {
                 UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = Index.class;
+                Class<?> k = Index.class;
                 rightOffset = UNSAFE.objectFieldOffset
                     (k.getDeclaredField("right"));
             } catch (Exception e) {
@@ -933,7 +933,7 @@
              * direction.
              */
             level = max + 1;
-            Index<K,V>[] idxs = (Index<K,V>[])new Index[level+1];
+            Index<K,V>[] idxs = (Index<K,V>[])new Index<?,?>[level+1];
             Index<K,V> idx = null;
             for (int i = 1; i <= level; ++i)
                 idxs[i] = idx = new Index<K,V>(z, idx, null);
@@ -1436,16 +1436,16 @@
      * @return a shallow copy of this map
      */
     public ConcurrentSkipListMap<K,V> clone() {
-        ConcurrentSkipListMap<K,V> clone = null;
         try {
-            clone = (ConcurrentSkipListMap<K,V>) super.clone();
+            @SuppressWarnings("unchecked")
+            ConcurrentSkipListMap<K,V> clone =
+                (ConcurrentSkipListMap<K,V>) super.clone();
+            clone.initialize();
+            clone.buildFromSorted(this);
+            return clone;
         } catch (CloneNotSupportedException e) {
             throw new InternalError();
         }
-
-        clone.initialize();
-        clone.buildFromSorted(this);
-        return clone;
     }
 
     /**
@@ -1507,7 +1507,7 @@
     /* ---------------- Serialization -------------- */
 
     /**
-     * Save the state of this map to a stream.
+     * Saves the state of this map to a stream (that is, serializes it).
      *
      * @serialData The key (Object) and value (Object) for each
      * key-value mapping represented by the map, followed by
@@ -1532,7 +1532,9 @@
     }
 
     /**
-     * Reconstitute the map from a stream.
+     * Reconstitutes the map from a stream (that is, deserializes it).
+     *
+     * @param s the stream
      */
     private void readObject(final java.io.ObjectInputStream s)
         throws java.io.IOException, ClassNotFoundException {
@@ -1755,13 +1757,13 @@
      * @return a navigable set view of the keys in this map
      */
     public NavigableSet<K> keySet() {
-        KeySet ks = keySet;
-        return (ks != null) ? ks : (keySet = new KeySet(this));
+        KeySet<K> ks = keySet;
+        return (ks != null) ? ks : (keySet = new KeySet<K>(this));
     }
 
     public NavigableSet<K> navigableKeySet() {
-        KeySet ks = keySet;
-        return (ks != null) ? ks : (keySet = new KeySet(this));
+        KeySet<K> ks = keySet;
+        return (ks != null) ? ks : (keySet = new KeySet<K>(this));
     }
 
     /**
@@ -1783,8 +1785,8 @@
      * reflect any modifications subsequent to construction.
      */
     public Collection<V> values() {
-        Values vs = values;
-        return (vs != null) ? vs : (values = new Values(this));
+        Values<V> vs = values;
+        return (vs != null) ? vs : (values = new Values<V>(this));
     }
 
     /**
@@ -1812,8 +1814,8 @@
      *         sorted in ascending key order
      */
     public Set<Map.Entry<K,V>> entrySet() {
-        EntrySet es = entrySet;
-        return (es != null) ? es : (entrySet = new EntrySet(this));
+        EntrySet<K,V> es = entrySet;
+        return (es != null) ? es : (entrySet = new EntrySet<K,V>(this));
     }
 
     public ConcurrentNavigableMap<K,V> descendingMap() {
@@ -2304,8 +2306,8 @@
 
     static final class KeySet<E>
             extends AbstractSet<E> implements NavigableSet<E> {
-        private final ConcurrentNavigableMap<E,Object> m;
-        KeySet(ConcurrentNavigableMap<E,Object> map) { m = map; }
+        private final ConcurrentNavigableMap<E,?> m;
+        KeySet(ConcurrentNavigableMap<E,?> map) { m = map; }
         public int size() { return m.size(); }
         public boolean isEmpty() { return m.isEmpty(); }
         public boolean contains(Object o) { return m.containsKey(o); }
@@ -2319,11 +2321,11 @@
         public E first() { return m.firstKey(); }
         public E last() { return m.lastKey(); }
         public E pollFirst() {
-            Map.Entry<E,Object> e = m.pollFirstEntry();
+            Map.Entry<E,?> e = m.pollFirstEntry();
             return (e == null) ? null : e.getKey();
         }
         public E pollLast() {
-            Map.Entry<E,Object> e = m.pollLastEntry();
+            Map.Entry<E,?> e = m.pollLastEntry();
             return (e == null) ? null : e.getKey();
         }
         public Iterator<E> iterator() {
@@ -2374,20 +2376,20 @@
             return tailSet(fromElement, true);
         }
         public NavigableSet<E> descendingSet() {
-            return new KeySet(m.descendingMap());
+            return new KeySet<E>(m.descendingMap());
         }
     }
 
     static final class Values<E> extends AbstractCollection<E> {
-        private final ConcurrentNavigableMap<Object, E> m;
-        Values(ConcurrentNavigableMap<Object, E> map) {
+        private final ConcurrentNavigableMap<?, E> m;
+        Values(ConcurrentNavigableMap<?, E> map) {
             m = map;
         }
         public Iterator<E> iterator() {
             if (m instanceof ConcurrentSkipListMap)
-                return ((ConcurrentSkipListMap<Object,E>)m).valueIterator();
+                return ((ConcurrentSkipListMap<?,E>)m).valueIterator();
             else
-                return ((SubMap<Object,E>)m).valueIterator();
+                return ((SubMap<?,E>)m).valueIterator();
         }
         public boolean isEmpty() {
             return m.isEmpty();
@@ -2421,14 +2423,14 @@
         public boolean contains(Object o) {
             if (!(o instanceof Map.Entry))
                 return false;
-            Map.Entry<K1,V1> e = (Map.Entry<K1,V1>)o;
+            Map.Entry<?,?> e = (Map.Entry<?,?>)o;
             V1 v = m.get(e.getKey());
             return v != null && v.equals(e.getValue());
         }
         public boolean remove(Object o) {
             if (!(o instanceof Map.Entry))
                 return false;
-            Map.Entry<K1,V1> e = (Map.Entry<K1,V1>)o;
+            Map.Entry<?,?> e = (Map.Entry<?,?>)o;
             return m.remove(e.getKey(),
                             e.getValue());
         }
@@ -2568,9 +2570,9 @@
             if (lo == null)
                 return m.findFirst();
             else if (loInclusive)
-                return m.findNear(lo, m.GT|m.EQ);
+                return m.findNear(lo, GT|EQ);
             else
-                return m.findNear(lo, m.GT);
+                return m.findNear(lo, GT);
         }
 
         /**
@@ -2581,9 +2583,9 @@
             if (hi == null)
                 return m.findLast();
             else if (hiInclusive)
-                return m.findNear(hi, m.LT|m.EQ);
+                return m.findNear(hi, LT|EQ);
             else
-                return m.findNear(hi, m.LT);
+                return m.findNear(hi, LT);
         }
 
         /**
@@ -2665,15 +2667,15 @@
          */
         private Map.Entry<K,V> getNearEntry(K key, int rel) {
             if (isDescending) { // adjust relation for direction
-                if ((rel & m.LT) == 0)
-                    rel |= m.LT;
+                if ((rel & LT) == 0)
+                    rel |= LT;
                 else
-                    rel &= ~m.LT;
+                    rel &= ~LT;
             }
             if (tooLow(key))
-                return ((rel & m.LT) != 0) ? null : lowestEntry();
+                return ((rel & LT) != 0) ? null : lowestEntry();
             if (tooHigh(key))
-                return ((rel & m.LT) != 0) ? highestEntry() : null;
+                return ((rel & LT) != 0) ? highestEntry() : null;
             for (;;) {
                 Node<K,V> n = m.findNear(key, rel);
                 if (n == null || !inBounds(n.key))
@@ -2688,13 +2690,13 @@
         // Almost the same as getNearEntry, except for keys
         private K getNearKey(K key, int rel) {
             if (isDescending) { // adjust relation for direction
-                if ((rel & m.LT) == 0)
-                    rel |= m.LT;
+                if ((rel & LT) == 0)
+                    rel |= LT;
                 else
-                    rel &= ~m.LT;
+                    rel &= ~LT;
             }
             if (tooLow(key)) {
-                if ((rel & m.LT) == 0) {
+                if ((rel & LT) == 0) {
                     ConcurrentSkipListMap.Node<K,V> n = loNode();
                     if (isBeforeEnd(n))
                         return n.key;
@@ -2702,7 +2704,7 @@
                 return null;
             }
             if (tooHigh(key)) {
-                if ((rel & m.LT) != 0) {
+                if ((rel & LT) != 0) {
                     ConcurrentSkipListMap.Node<K,V> n = hiNode();
                     if (n != null) {
                         K last = n.key;
@@ -2734,7 +2736,7 @@
         public V get(Object key) {
             if (key == null) throw new NullPointerException();
             K k = (K)key;
-            return ((!inBounds(k)) ? null : m.get(k));
+            return (!inBounds(k)) ? null : m.get(k);
         }
 
         public V put(K key, V value) {
@@ -2901,35 +2903,35 @@
         /* ----------------  Relational methods -------------- */
 
         public Map.Entry<K,V> ceilingEntry(K key) {
-            return getNearEntry(key, (m.GT|m.EQ));
+            return getNearEntry(key, GT|EQ);
         }
 
         public K ceilingKey(K key) {
-            return getNearKey(key, (m.GT|m.EQ));
+            return getNearKey(key, GT|EQ);
         }
 
         public Map.Entry<K,V> lowerEntry(K key) {
-            return getNearEntry(key, (m.LT));
+            return getNearEntry(key, LT);
         }
 
         public K lowerKey(K key) {
-            return getNearKey(key, (m.LT));
+            return getNearKey(key, LT);
         }
 
         public Map.Entry<K,V> floorEntry(K key) {
-            return getNearEntry(key, (m.LT|m.EQ));
+            return getNearEntry(key, LT|EQ);
         }
 
         public K floorKey(K key) {
-            return getNearKey(key, (m.LT|m.EQ));
+            return getNearKey(key, LT|EQ);
         }
 
         public Map.Entry<K,V> higherEntry(K key) {
-            return getNearEntry(key, (m.GT));
+            return getNearEntry(key, GT);
         }
 
         public K higherKey(K key) {
-            return getNearKey(key, (m.GT));
+            return getNearKey(key, GT);
         }
 
         public K firstKey() {
@@ -2960,22 +2962,22 @@
 
         public NavigableSet<K> keySet() {
             KeySet<K> ks = keySetView;
-            return (ks != null) ? ks : (keySetView = new KeySet(this));
+            return (ks != null) ? ks : (keySetView = new KeySet<K>(this));
         }
 
         public NavigableSet<K> navigableKeySet() {
             KeySet<K> ks = keySetView;
-            return (ks != null) ? ks : (keySetView = new KeySet(this));
+            return (ks != null) ? ks : (keySetView = new KeySet<K>(this));
         }
 
         public Collection<V> values() {
             Collection<V> vs = valuesView;
-            return (vs != null) ? vs : (valuesView = new Values(this));
+            return (vs != null) ? vs : (valuesView = new Values<V>(this));
         }
 
         public Set<Map.Entry<K,V>> entrySet() {
             Set<Map.Entry<K,V>> es = entrySetView;
-            return (es != null) ? es : (entrySetView = new EntrySet(this));
+            return (es != null) ? es : (entrySetView = new EntrySet<K,V>(this));
         }
 
         public NavigableSet<K> descendingKeySet() {
@@ -3109,7 +3111,7 @@
     static {
         try {
             UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = ConcurrentSkipListMap.class;
+            Class<?> k = ConcurrentSkipListMap.class;
             headOffset = UNSAFE.objectFieldOffset
                 (k.getDeclaredField("head"));
         } catch (Exception e) {
--- a/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListSet.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListSet.java	Wed Jul 05 17:58:30 2017 +0200
@@ -35,7 +35,6 @@
 
 package java.util.concurrent;
 import java.util.*;
-import sun.misc.Unsafe;
 
 /**
  * A scalable concurrent {@link NavigableSet} implementation based on
@@ -158,15 +157,15 @@
      * @return a shallow copy of this set
      */
     public ConcurrentSkipListSet<E> clone() {
-        ConcurrentSkipListSet<E> clone = null;
         try {
-            clone = (ConcurrentSkipListSet<E>) super.clone();
-            clone.setMap(new ConcurrentSkipListMap(m));
+            @SuppressWarnings("unchecked")
+            ConcurrentSkipListSet<E> clone =
+                (ConcurrentSkipListSet<E>) super.clone();
+            clone.setMap(new ConcurrentSkipListMap<E,Object>(m));
+            return clone;
         } catch (CloneNotSupportedException e) {
             throw new InternalError();
         }
-
-        return clone;
     }
 
     /* ---------------- Set operations -------------- */
@@ -322,8 +321,8 @@
     public boolean removeAll(Collection<?> c) {
         // Override AbstractSet version to avoid unnecessary call to size()
         boolean modified = false;
-        for (Iterator<?> i = c.iterator(); i.hasNext(); )
-            if (remove(i.next()))
+        for (Object e : c)
+            if (remove(e))
                 modified = true;
         return modified;
     }
@@ -468,7 +467,7 @@
      * @return a reverse order view of this set
      */
     public NavigableSet<E> descendingSet() {
-        return new ConcurrentSkipListSet(m.descendingMap());
+        return new ConcurrentSkipListSet<E>(m.descendingMap());
     }
 
     // Support for resetting map in clone
@@ -481,7 +480,7 @@
     static {
         try {
             UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = ConcurrentSkipListSet.class;
+            Class<?> k = ConcurrentSkipListSet.class;
             mapOffset = UNSAFE.objectFieldOffset
                 (k.getDeclaredField("m"));
         } catch (Exception e) {
--- a/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java	Wed Jul 05 17:58:30 2017 +0200
@@ -36,7 +36,6 @@
 package java.util.concurrent;
 import java.util.*;
 import java.util.concurrent.locks.*;
-import sun.misc.Unsafe;
 
 /**
  * A thread-safe variant of {@link java.util.ArrayList} in which all mutative
@@ -281,9 +280,11 @@
      */
     public Object clone() {
         try {
-            CopyOnWriteArrayList c = (CopyOnWriteArrayList)(super.clone());
-            c.resetLock();
-            return c;
+            @SuppressWarnings("unchecked")
+            CopyOnWriteArrayList<E> clone =
+                (CopyOnWriteArrayList<E>) super.clone();
+            clone.resetLock();
+            return clone;
         } catch (CloneNotSupportedException e) {
             // this shouldn't happen, since we are Cloneable
             throw new InternalError();
@@ -1330,7 +1331,7 @@
     static {
         try {
             UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = CopyOnWriteArrayList.class;
+            Class<?> k = CopyOnWriteArrayList.class;
             lockOffset = UNSAFE.objectFieldOffset
                 (k.getDeclaredField("lock"));
         } catch (Exception e) {
--- a/jdk/src/share/classes/java/util/concurrent/DelayQueue.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/DelayQueue.java	Wed Jul 05 17:58:30 2017 +0200
@@ -531,7 +531,7 @@
             // not just a .equals element.
             lock.lock();
             try {
-                for (Iterator it = q.iterator(); it.hasNext(); ) {
+                for (Iterator<E> it = q.iterator(); it.hasNext(); ) {
                     if (it.next() == x) {
                         it.remove();
                         return;
--- a/jdk/src/share/classes/java/util/concurrent/Exchanger.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/Exchanger.java	Wed Jul 05 17:58:30 2017 +0200
@@ -279,6 +279,7 @@
      * into hole.  This class cannot be parameterized as "V" because
      * of the use of non-V CANCEL sentinels.
      */
+    @SuppressWarnings("serial")
     private static final class Node extends AtomicReference<Object> {
         /** The element offered by the Thread creating this node. */
         public final Object item;
@@ -303,6 +304,7 @@
      * would improve throughput more than enough to outweigh using
      * extra space.
      */
+    @SuppressWarnings("serial")
     private static final class Slot extends AtomicReference<Object> {
         // Improve likelihood of isolation on <= 64 byte cache lines
         long q0, q1, q2, q3, q4, q5, q6, q7, q8, q9, qa, qb, qc, qd, qe;
@@ -616,13 +618,14 @@
      * @throws InterruptedException if the current thread was
      *         interrupted while waiting
      */
+    @SuppressWarnings("unchecked")
     public V exchange(V x) throws InterruptedException {
         if (!Thread.interrupted()) {
-            Object v = doExchange((x == null) ? NULL_ITEM : x, false, 0);
-            if (v == NULL_ITEM)
+            Object o = doExchange((x == null) ? NULL_ITEM : x, false, 0);
+            if (o == NULL_ITEM)
                 return null;
-            if (v != CANCEL)
-                return (V)v;
+            if (o != CANCEL)
+                return (V)o;
             Thread.interrupted(); // Clear interrupt status on IE throw
         }
         throw new InterruptedException();
@@ -670,15 +673,16 @@
      * @throws TimeoutException if the specified waiting time elapses
      *         before another thread enters the exchange
      */
+    @SuppressWarnings("unchecked")
     public V exchange(V x, long timeout, TimeUnit unit)
         throws InterruptedException, TimeoutException {
         if (!Thread.interrupted()) {
-            Object v = doExchange((x == null) ? NULL_ITEM : x,
+            Object o = doExchange((x == null) ? NULL_ITEM : x,
                                   true, unit.toNanos(timeout));
-            if (v == NULL_ITEM)
+            if (o == NULL_ITEM)
                 return null;
-            if (v != CANCEL)
-                return (V)v;
+            if (o != CANCEL)
+                return (V)o;
             if (!Thread.interrupted())
                 throw new TimeoutException();
         }
--- a/jdk/src/share/classes/java/util/concurrent/ForkJoinPool.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/ForkJoinPool.java	Wed Jul 05 17:58:30 2017 +0200
@@ -2150,7 +2150,7 @@
         int s;
         try {
             UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = ForkJoinPool.class;
+            Class<?> k = ForkJoinPool.class;
             ctlOffset = UNSAFE.objectFieldOffset
                 (k.getDeclaredField("ctl"));
             stealCountOffset = UNSAFE.objectFieldOffset
@@ -2163,7 +2163,7 @@
                 (k.getDeclaredField("scanGuard"));
             nextWorkerNumberOffset = UNSAFE.objectFieldOffset
                 (k.getDeclaredField("nextWorkerNumber"));
-            Class a = ForkJoinTask[].class;
+            Class<?> a = ForkJoinTask[].class;
             ABASE = UNSAFE.arrayBaseOffset(a);
             s = UNSAFE.arrayIndexScale(a);
         } catch (Exception e) {
--- a/jdk/src/share/classes/java/util/concurrent/ForkJoinTask.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/ForkJoinTask.java	Wed Jul 05 17:58:30 2017 +0200
@@ -520,7 +520,7 @@
         if (e == null || (ex = e.ex) == null)
             return null;
         if (e.thrower != Thread.currentThread().getId()) {
-            Class ec = ex.getClass();
+            Class<? extends Throwable> ec = ex.getClass();
             try {
                 Constructor<?> noArgCtor = null;
                 Constructor<?>[] cs = ec.getConstructors();// public ctors only
--- a/jdk/src/share/classes/java/util/concurrent/ForkJoinWorkerThread.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/ForkJoinWorkerThread.java	Wed Jul 05 17:58:30 2017 +0200
@@ -192,7 +192,7 @@
 
     /**
      * The work-stealing queue array. Size must be a power of two.
-     * Initialized when started (as oposed to when constructed), to
+     * Initialized when started (as opposed to when constructed), to
      * improve memory locality.
      */
     ForkJoinTask<?>[] queue;
@@ -360,7 +360,7 @@
      */
     protected void onStart() {
         queue = new ForkJoinTask<?>[INITIAL_QUEUE_CAPACITY];
-        int r = pool.workerSeedGenerator.nextInt();
+        int r = ForkJoinPool.workerSeedGenerator.nextInt();
         seed = (r == 0) ? 1 : r; //  must be nonzero
     }
 
@@ -846,7 +846,7 @@
                     (b = v.queueBase) != v.queueTop &&
                     (q = v.queue) != null &&
                     (i = (q.length - 1) & b) >= 0 &&
-                    q[i] ==  t) {
+                    q[i] == t) {
                     long u = (i << ASHIFT) + ABASE;
                     if (v.queueBase == b &&
                         UNSAFE.compareAndSwapObject(q, u, t, null)) {
@@ -984,7 +984,7 @@
         int s;
         try {
             UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class a = ForkJoinTask[].class;
+            Class<?> a = ForkJoinTask[].class;
             ABASE = UNSAFE.arrayBaseOffset(a);
             s = UNSAFE.arrayIndexScale(a);
         } catch (Exception e) {
--- a/jdk/src/share/classes/java/util/concurrent/LinkedTransferQueue.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/LinkedTransferQueue.java	Wed Jul 05 17:58:30 2017 +0200
@@ -330,8 +330,8 @@
      *    of less-contended queues.  During spins threads check their
      *    interrupt status and generate a thread-local random number
      *    to decide to occasionally perform a Thread.yield. While
-     *    yield has underdefined specs, we assume that might it help,
-     *    and will not hurt in limiting impact of spinning on busy
+     *    yield has underdefined specs, we assume that it might help,
+     *    and will not hurt, in limiting impact of spinning on busy
      *    systems.  We also use smaller (1/2) spins for nodes that are
      *    not known to be front but whose predecessors have not
      *    blocked -- these "chained" spins avoid artifacts of
@@ -542,7 +542,7 @@
         static {
             try {
                 UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = Node.class;
+                Class<?> k = Node.class;
                 itemOffset = UNSAFE.objectFieldOffset
                     (k.getDeclaredField("item"));
                 nextOffset = UNSAFE.objectFieldOffset
@@ -627,7 +627,7 @@
                                 break;        // unless slack < 2
                         }
                         LockSupport.unpark(p.waiter);
-                        return this.<E>cast(item);
+                        return LinkedTransferQueue.<E>cast(item);
                     }
                 }
                 Node n = p.next;
@@ -705,7 +705,7 @@
             if (item != e) {                  // matched
                 // assert item != s;
                 s.forgetContents();           // avoid garbage
-                return this.<E>cast(item);
+                return LinkedTransferQueue.<E>cast(item);
             }
             if ((w.isInterrupted() || (timed && nanos <= 0)) &&
                     s.casItem(e, s)) {        // cancel
@@ -786,7 +786,7 @@
             Object item = p.item;
             if (p.isData) {
                 if (item != null && item != p)
-                    return this.<E>cast(item);
+                    return LinkedTransferQueue.<E>cast(item);
             }
             else if (item == null)
                 return null;
@@ -1008,7 +1008,6 @@
         return false;
     }
 
-
     /**
      * Creates an initially empty {@code LinkedTransferQueue}.
      */
@@ -1045,7 +1044,8 @@
      * return {@code false}.
      *
      * @return {@code true} (as specified by
-     *  {@link BlockingQueue#offer(Object,long,TimeUnit) BlockingQueue.offer})
+     *  {@link java.util.concurrent.BlockingQueue#offer(Object,long,TimeUnit)
+     *  BlockingQueue.offer})
      * @throws NullPointerException if the specified element is null
      */
     public boolean offer(E e, long timeout, TimeUnit unit) {
@@ -1162,8 +1162,7 @@
         if (c == this)
             throw new IllegalArgumentException();
         int n = 0;
-        E e;
-        while ( (e = poll()) != null) {
+        for (E e; (e = poll()) != null;) {
             c.add(e);
             ++n;
         }
@@ -1180,8 +1179,7 @@
         if (c == this)
             throw new IllegalArgumentException();
         int n = 0;
-        E e;
-        while (n < maxElements && (e = poll()) != null) {
+        for (E e; n < maxElements && (e = poll()) != null;) {
             c.add(e);
             ++n;
         }
@@ -1288,7 +1286,8 @@
      * {@code LinkedTransferQueue} is not capacity constrained.
      *
      * @return {@code Integer.MAX_VALUE} (as specified by
-     *         {@link BlockingQueue#remainingCapacity()})
+     *         {@link java.util.concurrent.BlockingQueue#remainingCapacity()
+     *         BlockingQueue.remainingCapacity})
      */
     public int remainingCapacity() {
         return Integer.MAX_VALUE;
@@ -1320,7 +1319,8 @@
         throws java.io.IOException, ClassNotFoundException {
         s.defaultReadObject();
         for (;;) {
-            @SuppressWarnings("unchecked") E item = (E) s.readObject();
+            @SuppressWarnings("unchecked")
+            E item = (E) s.readObject();
             if (item == null)
                 break;
             else
@@ -1337,7 +1337,7 @@
     static {
         try {
             UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = LinkedTransferQueue.class;
+            Class<?> k = LinkedTransferQueue.class;
             headOffset = UNSAFE.objectFieldOffset
                 (k.getDeclaredField("head"));
             tailOffset = UNSAFE.objectFieldOffset
--- a/jdk/src/share/classes/java/util/concurrent/Phaser.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/Phaser.java	Wed Jul 05 17:58:30 2017 +0200
@@ -1142,7 +1142,7 @@
     static {
         try {
             UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = Phaser.class;
+            Class<?> k = Phaser.class;
             stateOffset = UNSAFE.objectFieldOffset
                 (k.getDeclaredField("state"));
         } catch (Exception e) {
--- a/jdk/src/share/classes/java/util/concurrent/PriorityBlockingQueue.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/PriorityBlockingQueue.java	Wed Jul 05 17:58:30 2017 +0200
@@ -94,6 +94,7 @@
  * @author Doug Lea
  * @param <E> the type of elements held in this collection
  */
+@SuppressWarnings("unchecked")
 public class PriorityBlockingQueue<E> extends AbstractQueue<E>
     implements BlockingQueue<E>, java.io.Serializable {
     private static final long serialVersionUID = 5595510919245408276L;
@@ -168,7 +169,7 @@
      * to maintain compatibility with previous versions
      * of this class. Non-null only during serialization/deserialization.
      */
-    private PriorityQueue q;
+    private PriorityQueue<E> q;
 
     /**
      * Creates a {@code PriorityBlockingQueue} with the default
@@ -968,7 +969,7 @@
     static {
         try {
             UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = PriorityBlockingQueue.class;
+            Class<?> k = PriorityBlockingQueue.class;
             allocationSpinLockOffset = UNSAFE.objectFieldOffset
                 (k.getDeclaredField("allocationSpinLock"));
         } catch (Exception e) {
--- a/jdk/src/share/classes/java/util/concurrent/ScheduledThreadPoolExecutor.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/ScheduledThreadPoolExecutor.java	Wed Jul 05 17:58:30 2017 +0200
@@ -34,8 +34,10 @@
  */
 
 package java.util.concurrent;
-import java.util.concurrent.atomic.*;
-import java.util.concurrent.locks.*;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.ReentrantLock;
 import java.util.*;
 
 /**
@@ -166,7 +168,7 @@
      * Sequence number to break scheduling ties, and in turn to
      * guarantee FIFO order among tied entries.
      */
-    private static final AtomicLong sequencer = new AtomicLong(0);
+    private static final AtomicLong sequencer = new AtomicLong();
 
     /**
      * Returns current nanosecond time.
@@ -231,7 +233,7 @@
         }
 
         public long getDelay(TimeUnit unit) {
-            return unit.convert(time - now(), TimeUnit.NANOSECONDS);
+            return unit.convert(time - now(), NANOSECONDS);
         }
 
         public int compareTo(Delayed other) {
@@ -249,8 +251,8 @@
                 else
                     return 1;
             }
-            long d = (getDelay(TimeUnit.NANOSECONDS) -
-                      other.getDelay(TimeUnit.NANOSECONDS));
+            long d = (getDelay(NANOSECONDS) -
+                      other.getDelay(NANOSECONDS));
             return (d == 0) ? 0 : ((d < 0) ? -1 : 1);
         }
 
@@ -424,7 +426,7 @@
      * @throws IllegalArgumentException if {@code corePoolSize < 0}
      */
     public ScheduledThreadPoolExecutor(int corePoolSize) {
-        super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,
+        super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
               new DelayedWorkQueue());
     }
 
@@ -441,7 +443,7 @@
      */
     public ScheduledThreadPoolExecutor(int corePoolSize,
                                        ThreadFactory threadFactory) {
-        super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,
+        super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
               new DelayedWorkQueue(), threadFactory);
     }
 
@@ -458,7 +460,7 @@
      */
     public ScheduledThreadPoolExecutor(int corePoolSize,
                                        RejectedExecutionHandler handler) {
-        super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,
+        super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
               new DelayedWorkQueue(), handler);
     }
 
@@ -479,7 +481,7 @@
     public ScheduledThreadPoolExecutor(int corePoolSize,
                                        ThreadFactory threadFactory,
                                        RejectedExecutionHandler handler) {
-        super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,
+        super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
               new DelayedWorkQueue(), threadFactory, handler);
     }
 
@@ -508,7 +510,7 @@
     private long overflowFree(long delay) {
         Delayed head = (Delayed) super.getQueue().peek();
         if (head != null) {
-            long headDelay = head.getDelay(TimeUnit.NANOSECONDS);
+            long headDelay = head.getDelay(NANOSECONDS);
             if (headDelay < 0 && (delay - headDelay < 0))
                 delay = Long.MAX_VALUE + headDelay;
         }
@@ -616,7 +618,7 @@
      * @throws NullPointerException {@inheritDoc}
      */
     public void execute(Runnable command) {
-        schedule(command, 0, TimeUnit.NANOSECONDS);
+        schedule(command, 0, NANOSECONDS);
     }
 
     // Override AbstractExecutorService methods
@@ -626,7 +628,7 @@
      * @throws NullPointerException       {@inheritDoc}
      */
     public Future<?> submit(Runnable task) {
-        return schedule(task, 0, TimeUnit.NANOSECONDS);
+        return schedule(task, 0, NANOSECONDS);
     }
 
     /**
@@ -634,8 +636,7 @@
      * @throws NullPointerException       {@inheritDoc}
      */
     public <T> Future<T> submit(Runnable task, T result) {
-        return schedule(Executors.callable(task, result),
-                        0, TimeUnit.NANOSECONDS);
+        return schedule(Executors.callable(task, result), 0, NANOSECONDS);
     }
 
     /**
@@ -643,7 +644,7 @@
      * @throws NullPointerException       {@inheritDoc}
      */
     public <T> Future<T> submit(Callable<T> task) {
-        return schedule(task, 0, TimeUnit.NANOSECONDS);
+        return schedule(task, 0, NANOSECONDS);
     }
 
     /**
@@ -831,8 +832,8 @@
          */
 
         private static final int INITIAL_CAPACITY = 16;
-        private RunnableScheduledFuture[] queue =
-            new RunnableScheduledFuture[INITIAL_CAPACITY];
+        private RunnableScheduledFuture<?>[] queue =
+            new RunnableScheduledFuture<?>[INITIAL_CAPACITY];
         private final ReentrantLock lock = new ReentrantLock();
         private int size = 0;
 
@@ -863,7 +864,7 @@
         /**
          * Set f's heapIndex if it is a ScheduledFutureTask.
          */
-        private void setIndex(RunnableScheduledFuture f, int idx) {
+        private void setIndex(RunnableScheduledFuture<?> f, int idx) {
             if (f instanceof ScheduledFutureTask)
                 ((ScheduledFutureTask)f).heapIndex = idx;
         }
@@ -872,10 +873,10 @@
          * Sift element added at bottom up to its heap-ordered spot.
          * Call only when holding lock.
          */
-        private void siftUp(int k, RunnableScheduledFuture key) {
+        private void siftUp(int k, RunnableScheduledFuture<?> key) {
             while (k > 0) {
                 int parent = (k - 1) >>> 1;
-                RunnableScheduledFuture e = queue[parent];
+                RunnableScheduledFuture<?> e = queue[parent];
                 if (key.compareTo(e) >= 0)
                     break;
                 queue[k] = e;
@@ -890,11 +891,11 @@
          * Sift element added at top down to its heap-ordered spot.
          * Call only when holding lock.
          */
-        private void siftDown(int k, RunnableScheduledFuture key) {
+        private void siftDown(int k, RunnableScheduledFuture<?> key) {
             int half = size >>> 1;
             while (k < half) {
                 int child = (k << 1) + 1;
-                RunnableScheduledFuture c = queue[child];
+                RunnableScheduledFuture<?> c = queue[child];
                 int right = child + 1;
                 if (right < size && c.compareTo(queue[right]) > 0)
                     c = queue[child = right];
@@ -959,7 +960,7 @@
 
                 setIndex(queue[i], -1);
                 int s = --size;
-                RunnableScheduledFuture replacement = queue[s];
+                RunnableScheduledFuture<?> replacement = queue[s];
                 queue[s] = null;
                 if (s != i) {
                     siftDown(i, replacement);
@@ -990,7 +991,7 @@
             return Integer.MAX_VALUE;
         }
 
-        public RunnableScheduledFuture peek() {
+        public RunnableScheduledFuture<?> peek() {
             final ReentrantLock lock = this.lock;
             lock.lock();
             try {
@@ -1003,7 +1004,7 @@
         public boolean offer(Runnable x) {
             if (x == null)
                 throw new NullPointerException();
-            RunnableScheduledFuture e = (RunnableScheduledFuture)x;
+            RunnableScheduledFuture<?> e = (RunnableScheduledFuture<?>)x;
             final ReentrantLock lock = this.lock;
             lock.lock();
             try {
@@ -1045,9 +1046,9 @@
          * holding lock.
          * @param f the task to remove and return
          */
-        private RunnableScheduledFuture finishPoll(RunnableScheduledFuture f) {
+        private RunnableScheduledFuture<?> finishPoll(RunnableScheduledFuture<?> f) {
             int s = --size;
-            RunnableScheduledFuture x = queue[s];
+            RunnableScheduledFuture<?> x = queue[s];
             queue[s] = null;
             if (s != 0)
                 siftDown(0, x);
@@ -1055,12 +1056,12 @@
             return f;
         }
 
-        public RunnableScheduledFuture poll() {
+        public RunnableScheduledFuture<?> poll() {
             final ReentrantLock lock = this.lock;
             lock.lock();
             try {
-                RunnableScheduledFuture first = queue[0];
-                if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0)
+                RunnableScheduledFuture<?> first = queue[0];
+                if (first == null || first.getDelay(NANOSECONDS) > 0)
                     return null;
                 else
                     return finishPoll(first);
@@ -1069,16 +1070,16 @@
             }
         }
 
-        public RunnableScheduledFuture take() throws InterruptedException {
+        public RunnableScheduledFuture<?> take() throws InterruptedException {
             final ReentrantLock lock = this.lock;
             lock.lockInterruptibly();
             try {
                 for (;;) {
-                    RunnableScheduledFuture first = queue[0];
+                    RunnableScheduledFuture<?> first = queue[0];
                     if (first == null)
                         available.await();
                     else {
-                        long delay = first.getDelay(TimeUnit.NANOSECONDS);
+                        long delay = first.getDelay(NANOSECONDS);
                         if (delay <= 0)
                             return finishPoll(first);
                         else if (leader != null)
@@ -1102,21 +1103,21 @@
             }
         }
 
-        public RunnableScheduledFuture poll(long timeout, TimeUnit unit)
+        public RunnableScheduledFuture<?> poll(long timeout, TimeUnit unit)
             throws InterruptedException {
             long nanos = unit.toNanos(timeout);
             final ReentrantLock lock = this.lock;
             lock.lockInterruptibly();
             try {
                 for (;;) {
-                    RunnableScheduledFuture first = queue[0];
+                    RunnableScheduledFuture<?> first = queue[0];
                     if (first == null) {
                         if (nanos <= 0)
                             return null;
                         else
                             nanos = available.awaitNanos(nanos);
                     } else {
-                        long delay = first.getDelay(TimeUnit.NANOSECONDS);
+                        long delay = first.getDelay(NANOSECONDS);
                         if (delay <= 0)
                             return finishPoll(first);
                         if (nanos <= 0)
@@ -1148,7 +1149,7 @@
             lock.lock();
             try {
                 for (int i = 0; i < size; i++) {
-                    RunnableScheduledFuture t = queue[i];
+                    RunnableScheduledFuture<?> t = queue[i];
                     if (t != null) {
                         queue[i] = null;
                         setIndex(t, -1);
@@ -1164,9 +1165,10 @@
          * Return and remove first element only if it is expired.
          * Used only by drainTo.  Call only when holding lock.
          */
-        private RunnableScheduledFuture pollExpired() {
-            RunnableScheduledFuture first = queue[0];
-            if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0)
+        private RunnableScheduledFuture<?> pollExpired() {
+            // assert lock.isHeldByCurrentThread();
+            RunnableScheduledFuture<?> first = queue[0];
+            if (first == null || first.getDelay(NANOSECONDS) > 0)
                 return null;
             return finishPoll(first);
         }
@@ -1179,7 +1181,7 @@
             final ReentrantLock lock = this.lock;
             lock.lock();
             try {
-                RunnableScheduledFuture first;
+                RunnableScheduledFuture<?> first;
                 int n = 0;
                 while ((first = pollExpired()) != null) {
                     c.add(first);
@@ -1201,7 +1203,7 @@
             final ReentrantLock lock = this.lock;
             lock.lock();
             try {
-                RunnableScheduledFuture first;
+                RunnableScheduledFuture<?> first;
                 int n = 0;
                 while (n < maxElements && (first = pollExpired()) != null) {
                     c.add(first);
--- a/jdk/src/share/classes/java/util/concurrent/SynchronousQueue.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/concurrent/SynchronousQueue.java	Wed Jul 05 17:58:30 2017 +0200
@@ -36,7 +36,6 @@
 
 package java.util.concurrent;
 import java.util.concurrent.locks.*;
-import java.util.concurrent.atomic.*;
 import java.util.*;
 
 /**
@@ -163,7 +162,7 @@
     /**
      * Shared internal API for dual stacks and queues.
      */
-    abstract static class Transferer {
+    abstract static class Transferer<E> {
         /**
          * Performs a put or take.
          *
@@ -177,7 +176,7 @@
          *         the caller can distinguish which of these occurred
          *         by checking Thread.interrupted.
          */
-        abstract Object transfer(Object e, boolean timed, long nanos);
+        abstract E transfer(E e, boolean timed, long nanos);
     }
 
     /** The number of CPUs, for spin control */
@@ -206,7 +205,7 @@
     static final long spinForTimeoutThreshold = 1000L;
 
     /** Dual stack */
-    static final class TransferStack extends Transferer {
+    static final class TransferStack<E> extends Transferer<E> {
         /*
          * This extends Scherer-Scott dual stack algorithm, differing,
          * among other ways, by using "covering" nodes rather than
@@ -286,7 +285,7 @@
             static {
                 try {
                     UNSAFE = sun.misc.Unsafe.getUnsafe();
-                    Class k = SNode.class;
+                    Class<?> k = SNode.class;
                     matchOffset = UNSAFE.objectFieldOffset
                         (k.getDeclaredField("match"));
                     nextOffset = UNSAFE.objectFieldOffset
@@ -322,7 +321,8 @@
         /**
          * Puts or takes an item.
          */
-        Object transfer(Object e, boolean timed, long nanos) {
+        @SuppressWarnings("unchecked")
+        E transfer(E e, boolean timed, long nanos) {
             /*
              * Basic algorithm is to loop trying one of three actions:
              *
@@ -363,7 +363,7 @@
                         }
                         if ((h = head) != null && h.next == s)
                             casHead(h, s.next);     // help s's fulfiller
-                        return (mode == REQUEST) ? m.item : s.item;
+                        return (E) ((mode == REQUEST) ? m.item : s.item);
                     }
                 } else if (!isFulfilling(h.mode)) { // try to fulfill
                     if (h.isCancelled())            // already cancelled
@@ -379,7 +379,7 @@
                             SNode mn = m.next;
                             if (m.tryMatch(s)) {
                                 casHead(s, mn);     // pop both s and m
-                                return (mode == REQUEST) ? m.item : s.item;
+                                return (E) ((mode == REQUEST) ? m.item : s.item);
                             } else                  // lost match
                                 s.casNext(m, mn);   // help unlink
                         }
@@ -513,7 +513,7 @@
         static {
             try {
                 UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = TransferStack.class;
+                Class<?> k = TransferStack.class;
                 headOffset = UNSAFE.objectFieldOffset
                     (k.getDeclaredField("head"));
             } catch (Exception e) {
@@ -523,7 +523,7 @@
     }
 
     /** Dual Queue */
-    static final class TransferQueue extends Transferer {
+    static final class TransferQueue<E> extends Transferer<E> {
         /*
          * This extends Scherer-Scott dual queue algorithm, differing,
          * among other ways, by using modes within nodes rather than
@@ -583,7 +583,7 @@
             static {
                 try {
                     UNSAFE = sun.misc.Unsafe.getUnsafe();
-                    Class k = QNode.class;
+                    Class<?> k = QNode.class;
                     itemOffset = UNSAFE.objectFieldOffset
                         (k.getDeclaredField("item"));
                     nextOffset = UNSAFE.objectFieldOffset
@@ -640,7 +640,8 @@
         /**
          * Puts or takes an item.
          */
-        Object transfer(Object e, boolean timed, long nanos) {
+        @SuppressWarnings("unchecked")
+        E transfer(E e, boolean timed, long nanos) {
             /* Basic algorithm is to loop trying to take either of
              * two actions:
              *
@@ -703,7 +704,7 @@
                             s.item = s;
                         s.waiter = null;
                     }
-                    return (x != null) ? x : e;
+                    return (x != null) ? (E)x : e;
 
                 } else {                            // complementary-mode
                     QNode m = h.next;               // node to fulfill
@@ -720,7 +721,7 @@
 
                     advanceHead(h, m);              // successfully fulfilled
                     LockSupport.unpark(m.waiter);
-                    return (x != null) ? x : e;
+                    return (x != null) ? (E)x : e;
                 }
             }
         }
@@ -734,7 +735,7 @@
          * @param nanos timeout value
          * @return matched item, or s if cancelled
          */
-        Object awaitFulfill(QNode s, Object e, boolean timed, long nanos) {
+        Object awaitFulfill(QNode s, E e, boolean timed, long nanos) {
             /* Same idea as TransferStack.awaitFulfill */
             long lastTime = timed ? System.nanoTime() : 0;
             Thread w = Thread.currentThread();
@@ -827,7 +828,7 @@
         static {
             try {
                 UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = TransferQueue.class;
+                Class<?> k = TransferQueue.class;
                 headOffset = UNSAFE.objectFieldOffset
                     (k.getDeclaredField("head"));
                 tailOffset = UNSAFE.objectFieldOffset
@@ -847,7 +848,7 @@
      * isn't a noticeable performance penalty for using volatile
      * instead of final here.
      */
-    private transient volatile Transferer transferer;
+    private transient volatile Transferer<E> transferer;
 
     /**
      * Creates a <tt>SynchronousQueue</tt> with nonfair access policy.
@@ -863,7 +864,7 @@
      *        access; otherwise the order is unspecified.
      */
     public SynchronousQueue(boolean fair) {
-        transferer = fair ? new TransferQueue() : new TransferStack();
+        transferer = fair ? new TransferQueue<E>() : new TransferStack<E>();
     }
 
     /**
@@ -922,9 +923,9 @@
      * @throws InterruptedException {@inheritDoc}
      */
     public E take() throws InterruptedException {
-        Object e = transferer.transfer(null, false, 0);
+        E e = transferer.transfer(null, false, 0);
         if (e != null)
-            return (E)e;
+            return e;
         Thread.interrupted();
         throw new InterruptedException();
     }
@@ -939,9 +940,9 @@
      * @throws InterruptedException {@inheritDoc}
      */
     public E poll(long timeout, TimeUnit unit) throws InterruptedException {
-        Object e = transferer.transfer(null, true, unit.toNanos(timeout));
+        E e = transferer.transfer(null, true, unit.toNanos(timeout));
         if (e != null || !Thread.interrupted())
-            return (E)e;
+            return e;
         throw new InterruptedException();
     }
 
@@ -953,7 +954,7 @@
      *         element is available.
      */
     public E poll() {
-        return (E)transferer.transfer(null, true, 0);
+        return transferer.transfer(null, true, 0);
     }
 
     /**
@@ -1065,8 +1066,19 @@
      *
      * @return an empty iterator
      */
+    @SuppressWarnings("unchecked")
     public Iterator<E> iterator() {
-        return Collections.emptyIterator();
+        return (Iterator<E>) EmptyIterator.EMPTY_ITERATOR;
+    }
+
+    // Replicated from a previous version of Collections
+    private static class EmptyIterator<E> implements Iterator<E> {
+        static final EmptyIterator<Object> EMPTY_ITERATOR
+            = new EmptyIterator<Object>();
+
+        public boolean hasNext() { return false; }
+        public E next() { throw new NoSuchElementException(); }
+        public void remove() { throw new IllegalStateException(); }
     }
 
     /**
@@ -1103,8 +1115,7 @@
         if (c == this)
             throw new IllegalArgumentException();
         int n = 0;
-        E e;
-        while ( (e = poll()) != null) {
+        for (E e; (e = poll()) != null;) {
             c.add(e);
             ++n;
         }
@@ -1123,8 +1134,7 @@
         if (c == this)
             throw new IllegalArgumentException();
         int n = 0;
-        E e;
-        while (n < maxElements && (e = poll()) != null) {
+        for (E e; n < maxElements && (e = poll()) != null;) {
             c.add(e);
             ++n;
         }
@@ -1139,6 +1149,7 @@
      * object is ever serialized or deserialized.
      */
 
+    @SuppressWarnings("serial")
     static class WaitQueue implements java.io.Serializable { }
     static class LifoWaitQueue extends WaitQueue {
         private static final long serialVersionUID = -3633113410248163686L;
@@ -1151,7 +1162,7 @@
     private WaitQueue waitingConsumers;
 
     /**
-     * Save the state to a stream (that is, serialize it).
+     * Saves the state to a stream (that is, serializes it).
      *
      * @param s the stream
      */
@@ -1175,9 +1186,9 @@
         throws java.io.IOException, ClassNotFoundException {
         s.defaultReadObject();
         if (waitingProducers instanceof FifoWaitQueue)
-            transferer = new TransferQueue();
+            transferer = new TransferQueue<E>();
         else
-            transferer = new TransferStack();
+            transferer = new TransferStack<E>();
     }
 
     // Unsafe mechanics
--- a/jdk/src/share/classes/java/util/jar/JarFile.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/jar/JarFile.java	Wed Jul 05 17:58:30 2017 +0200
@@ -183,7 +183,7 @@
                 } else {
                     man = new Manifest(super.getInputStream(manEntry));
                 }
-                manRef = new SoftReference(man);
+                manRef = new SoftReference<>(man);
             }
         }
         return man;
@@ -233,13 +233,13 @@
      * Returns an enumeration of the zip file entries.
      */
     public Enumeration<JarEntry> entries() {
-        final Enumeration enum_ = super.entries();
+        final Enumeration<? extends ZipEntry> enum_ = super.entries();
         return new Enumeration<JarEntry>() {
             public boolean hasMoreElements() {
                 return enum_.hasMoreElements();
             }
             public JarFileEntry nextElement() {
-                ZipEntry ze = (ZipEntry)enum_.nextElement();
+                ZipEntry ze = enum_.nextElement();
                 return new JarFileEntry(ze);
             }
         };
@@ -608,7 +608,7 @@
         }
 
         // screen out entries which are never signed
-        final Enumeration enum_ = super.entries();
+        final Enumeration<? extends ZipEntry> enum_ = super.entries();
         return new Enumeration<JarEntry>() {
 
             ZipEntry entry;
@@ -618,7 +618,7 @@
                     return true;
                 }
                 while (enum_.hasMoreElements()) {
-                    ZipEntry ze = (ZipEntry) enum_.nextElement();
+                    ZipEntry ze = enum_.nextElement();
                     if (JarVerifier.isSigningRelated(ze.getName())) {
                         continue;
                     }
@@ -649,7 +649,7 @@
          * JAR file has no signed content. Is there a non-signing
          * code source?
          */
-        Enumeration unsigned = unsignedEntryNames();
+        Enumeration<String> unsigned = unsignedEntryNames();
         if (unsigned.hasMoreElements()) {
             return new CodeSource[]{JarVerifier.getUnsignedCS(url)};
         } else {
@@ -658,7 +658,7 @@
     }
 
     private Enumeration<String> unsignedEntryNames() {
-        final Enumeration entries = entries();
+        final Enumeration<JarEntry> entries = entries();
         return new Enumeration<String>() {
 
             String name;
@@ -673,7 +673,7 @@
                 }
                 while (entries.hasMoreElements()) {
                     String value;
-                    ZipEntry e = (ZipEntry) entries.nextElement();
+                    ZipEntry e = entries.nextElement();
                     value = e.getName();
                     if (e.isDirectory() || JarVerifier.isSigningRelated(value)) {
                         continue;
@@ -726,11 +726,11 @@
         }
     }
 
-    List getManifestDigests() {
+    List<Object> getManifestDigests() {
         ensureInitialization();
         if (jv != null) {
             return jv.getManifestDigests();
         }
-        return new ArrayList();
+        return new ArrayList<Object>();
     }
 }
--- a/jdk/src/share/classes/java/util/jar/Manifest.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/jar/Manifest.java	Wed Jul 05 17:58:30 2017 +0200
@@ -51,7 +51,7 @@
     private Attributes attr = new Attributes();
 
     // manifest entries
-    private Map entries = new HashMap();
+    private Map<String, Attributes> entries = new HashMap<>();
 
     /**
      * Constructs a new, empty Manifest.
@@ -148,11 +148,11 @@
         // Write out the main attributes for the manifest
         attr.writeMain(dos);
         // Now write out the pre-entry attributes
-        Iterator it = entries.entrySet().iterator();
+        Iterator<Map.Entry<String, Attributes>> it = entries.entrySet().iterator();
         while (it.hasNext()) {
-            Map.Entry e = (Map.Entry)it.next();
+            Map.Entry<String, Attributes> e = it.next();
             StringBuffer buffer = new StringBuffer("Name: ");
-            String value = (String)e.getKey();
+            String value = e.getKey();
             if (value != null) {
                 byte[] vb = value.getBytes("UTF8");
                 value = new String(vb, 0, 0, vb.length);
@@ -161,7 +161,7 @@
             buffer.append("\r\n");
             make72Safe(buffer);
             dos.writeBytes(buffer.toString());
-            ((Attributes)e.getValue()).write(dos);
+            e.getValue().write(dos);
         }
         dos.flush();
     }
--- a/jdk/src/share/classes/java/util/logging/LogManager.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/logging/LogManager.java	Wed Jul 05 17:58:30 2017 +0200
@@ -179,10 +179,10 @@
                         cname = System.getProperty("java.util.logging.manager");
                         if (cname != null) {
                             try {
-                                Class clz = ClassLoader.getSystemClassLoader().loadClass(cname);
+                                Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(cname);
                                 manager = (LogManager) clz.newInstance();
                             } catch (ClassNotFoundException ex) {
-                                Class clz = Thread.currentThread().getContextClassLoader().loadClass(cname);
+                                Class<?> clz = Thread.currentThread().getContextClassLoader().loadClass(cname);
                                 manager = (LogManager) clz.newInstance();
                             }
                         }
@@ -200,8 +200,8 @@
 
                     // Adding the global Logger. Doing so in the Logger.<clinit>
                     // would deadlock with the LogManager.<clinit>.
-                    Logger.global.setLogManager(manager);
-                    manager.addLogger(Logger.global);
+                    Logger.getGlobal().setLogManager(manager);
+                    manager.addLogger(Logger.getGlobal());
 
                     // We don't call readConfiguration() here, as we may be running
                     // very early in the JVM startup sequence.  Instead readConfiguration
@@ -415,8 +415,8 @@
                 for (int i = 0; i < names.length; i++) {
                     String word = names[i];
                     try {
-                        Class   clz = ClassLoader.getSystemClassLoader().loadClass(word);
-                        Handler hdl = (Handler) clz.newInstance();
+                        Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(word);
+                        Handler  hdl = (Handler) clz.newInstance();
                         try {
                             // Check if there is a property defining the
                             // this handler's level.
@@ -782,11 +782,11 @@
                 // responsibility to initialize the logging configuration, by
                 // calling readConfiguration(InputStream) with a suitable stream.
                 try {
-                    Class clz = ClassLoader.getSystemClassLoader().loadClass(cname);
+                    Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(cname);
                     clz.newInstance();
                     return;
                 } catch (ClassNotFoundException ex) {
-                    Class clz = Thread.currentThread().getContextClassLoader().loadClass(cname);
+                    Class<?> clz = Thread.currentThread().getContextClassLoader().loadClass(cname);
                     clz.newInstance();
                     return;
                 }
@@ -837,9 +837,9 @@
             // the global handlers, if they haven't been initialized yet.
             initializedGlobalHandlers = true;
         }
-        Enumeration enum_ = getLoggerNames();
+        Enumeration<String> enum_ = getLoggerNames();
         while (enum_.hasMoreElements()) {
-            String name = (String)enum_.nextElement();
+            String name = enum_.nextElement();
             resetLogger(name);
         }
     }
@@ -926,7 +926,7 @@
         for (int i = 0; i < names.length; i++) {
             String word = names[i];
             try {
-                Class clz = ClassLoader.getSystemClassLoader().loadClass(word);
+                Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(word);
                 clz.newInstance();
             } catch (Exception ex) {
                 System.err.println("Can't load config class \"" + word + "\"");
@@ -1024,7 +1024,7 @@
         String val = getProperty(name);
         try {
             if (val != null) {
-                Class clz = ClassLoader.getSystemClassLoader().loadClass(val);
+                Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(val);
                 return (Filter) clz.newInstance();
             }
         } catch (Exception ex) {
@@ -1045,7 +1045,7 @@
         String val = getProperty(name);
         try {
             if (val != null) {
-                Class clz = ClassLoader.getSystemClassLoader().loadClass(val);
+                Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(val);
                 return (Formatter) clz.newInstance();
             }
         } catch (Exception ex) {
@@ -1163,7 +1163,7 @@
     // Private method to be called when the configuration has
     // changed to apply any level settings to any pre-existing loggers.
     synchronized private void setLevelsOnExistingLoggers() {
-        Enumeration enum_ = props.propertyNames();
+        Enumeration<?> enum_ = props.propertyNames();
         while (enum_.hasMoreElements()) {
             String key = (String)enum_.nextElement();
             if (!key.endsWith(".level")) {
--- a/jdk/src/share/classes/java/util/prefs/Preferences.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/prefs/Preferences.java	Wed Jul 05 17:58:30 2017 +0200
@@ -413,7 +413,7 @@
      * @throws IllegalArgumentException if the package has node preferences
      *         node associated with it.
      */
-    private static String nodeName(Class c) {
+    private static String nodeName(Class<?> c) {
         if (c.isArray())
             throw new IllegalArgumentException(
                 "Arrays have no associated preferences node.");
--- a/jdk/src/share/classes/java/util/prefs/XmlSupport.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/prefs/XmlSupport.java	Wed Jul 05 17:58:30 2017 +0200
@@ -106,7 +106,7 @@
         xmlRoot.setAttribute("type", (p.isUserNode() ? "user" : "system"));
 
         // Get bottom-up list of nodes from p to root, excluding root
-        List ancestors = new ArrayList();
+        List<Preferences> ancestors = new ArrayList<>();
 
         for (Preferences kid = p, dad = kid.parent(); dad != null;
                                    kid = dad, dad = kid.parent()) {
@@ -116,7 +116,7 @@
         for (int i=ancestors.size()-1; i >= 0; i--) {
             e.appendChild(doc.createElement("map"));
             e = (Element) e.appendChild(doc.createElement("node"));
-            e.setAttribute("name", ((Preferences)ancestors.get(i)).name());
+            e.setAttribute("name", ancestors.get(i).name());
         }
         putPreferencesInXml(e, doc, p, subTree);
 
@@ -339,17 +339,17 @@
      * @throws IOException if writing to the specified output stream
      *         results in an <tt>IOException</tt>.
      */
-    static void exportMap(OutputStream os, Map map) throws IOException {
+    static void exportMap(OutputStream os, Map<String, String> map) throws IOException {
         Document doc = createPrefsDoc("map");
         Element xmlMap = doc.getDocumentElement( ) ;
         xmlMap.setAttribute("MAP_XML_VERSION", MAP_XML_VERSION);
 
-        for (Iterator i = map.entrySet().iterator(); i.hasNext(); ) {
-            Map.Entry e = (Map.Entry) i.next();
+        for (Iterator<Map.Entry<String, String>> i = map.entrySet().iterator(); i.hasNext(); ) {
+            Map.Entry<String, String> e = i.next();
             Element xe = (Element)
                 xmlMap.appendChild(doc.createElement("entry"));
-            xe.setAttribute("key",   (String) e.getKey());
-            xe.setAttribute("value", (String) e.getValue());
+            xe.setAttribute("key",   e.getKey());
+            xe.setAttribute("value", e.getValue());
         }
 
         writeDoc(doc, os);
@@ -368,7 +368,7 @@
      * @throws InvalidPreferencesFormatException Data on input stream does not
      *         constitute a valid XML document with the mandated document type.
      */
-    static void importMap(InputStream is, Map m)
+    static void importMap(InputStream is, Map<String, String> m)
         throws IOException, InvalidPreferencesFormatException
     {
         try {
--- a/jdk/src/share/classes/java/util/regex/Pattern.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/regex/Pattern.java	Wed Jul 05 17:58:30 2017 +0200
@@ -1583,13 +1583,26 @@
             return;
         int j = i;
         i += 2;
-        int[] newtemp = new int[j + 2*(pLen-i) + 2];
+        int[] newtemp = new int[j + 3*(pLen-i) + 2];
         System.arraycopy(temp, 0, newtemp, 0, j);
 
         boolean inQuote = true;
+        boolean beginQuote = true;
         while (i < pLen) {
             int c = temp[i++];
-            if (! ASCII.isAscii(c) || ASCII.isAlnum(c)) {
+            if (!ASCII.isAscii(c) || ASCII.isAlpha(c)) {
+                newtemp[j++] = c;
+            } else if (ASCII.isDigit(c)) {
+                if (beginQuote) {
+                    /*
+                     * A unicode escape \[0xu] could be before this quote,
+                     * and we don't want this numeric char to processed as
+                     * part of the escape.
+                     */
+                    newtemp[j++] = '\\';
+                    newtemp[j++] = 'x';
+                    newtemp[j++] = '3';
+                }
                 newtemp[j++] = c;
             } else if (c != '\\') {
                 if (inQuote) newtemp[j++] = '\\';
@@ -1606,12 +1619,16 @@
                 if (temp[i] == 'Q') {
                     i++;
                     inQuote = true;
+                    beginQuote = true;
+                    continue;
                 } else {
                     newtemp[j++] = c;
                     if (i != pLen)
                         newtemp[j++] = temp[i++];
                 }
             }
+
+            beginQuote = false;
         }
 
         patternLength = j;
--- a/jdk/src/share/classes/java/util/zip/ZipEntry.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/java/util/zip/ZipEntry.java	Wed Jul 05 17:58:30 2017 +0200
@@ -281,6 +281,7 @@
      * Converts DOS time to Java time (number of milliseconds since epoch).
      */
     private static long dosToJavaTime(long dtime) {
+        @SuppressWarnings("deprecation") // Use of date constructor.
         Date d = new Date((int)(((dtime >> 25) & 0x7f) + 80),
                           (int)(((dtime >> 21) & 0x0f) - 1),
                           (int)((dtime >> 16) & 0x1f),
@@ -293,6 +294,7 @@
     /*
      * Converts Java time to DOS time.
      */
+    @SuppressWarnings("deprecation") // Use of date methods
     private static long javaToDosTime(long time) {
         Date d = new Date(time);
         int year = d.getYear() + 1900;
--- a/jdk/src/share/classes/javax/script/ScriptException.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/script/ScriptException.java	Wed Jul 05 17:58:30 2017 +0200
@@ -36,6 +36,8 @@
  */
 public class ScriptException extends Exception {
 
+    private static final long serialVersionUID = 8265071037049225001L;
+
     private String fileName;
     private int lineNumber;
     private int columnNumber;
--- a/jdk/src/share/classes/javax/swing/AbstractButton.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/AbstractButton.java	Wed Jul 05 17:58:30 2017 +0200
@@ -1349,6 +1349,7 @@
         return new ButtonActionPropertyChangeListener(this, a);
     }
 
+    @SuppressWarnings("serial")
     private static class ButtonActionPropertyChangeListener
                  extends ActionPropertyChangeListener<AbstractButton> {
         ButtonActionPropertyChangeListener(AbstractButton b, Action a) {
@@ -1976,6 +1977,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class ButtonChangeListener implements ChangeListener, Serializable {
         // NOTE: This class is NOT used, instead the functionality has
         // been moved to Handler.
@@ -2320,6 +2322,7 @@
     //
     // Listeners that are added to model
     //
+    @SuppressWarnings("serial")
     class Handler implements ActionListener, ChangeListener, ItemListener,
                              Serializable {
         //
@@ -2472,7 +2475,7 @@
                         // the members of the button group.
                         int len = group.getButtonCount();
                         Object [] target = new Object[len];
-                        Enumeration elem = group.getElements();
+                        Enumeration<AbstractButton> elem = group.getElements();
                         for (int i = 0; i < len; i++) {
                             if (elem.hasMoreElements()) {
                                 target[i] = elem.nextElement();
--- a/jdk/src/share/classes/javax/swing/ActionMap.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/ActionMap.java	Wed Jul 05 17:58:30 2017 +0200
@@ -55,6 +55,7 @@
  * @author Scott Violet
  * @since 1.3
  */
+@SuppressWarnings("serial")
 public class ActionMap implements Serializable {
     /** Handles the mapping between Action name and Action. */
     private transient ArrayTable     arrayTable;
--- a/jdk/src/share/classes/javax/swing/ActionPropertyChangeListener.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/ActionPropertyChangeListener.java	Wed Jul 05 17:58:30 2017 +0200
@@ -101,9 +101,9 @@
         // Check to see whether any old buttons have
         // been enqueued for GC.  If so, look up their
         // PCL instance and remove it from its Action.
-        OwnedWeakReference r;
+        OwnedWeakReference<?> r;
         while ((r = (OwnedWeakReference)queue.poll()) != null) {
-            ActionPropertyChangeListener oldPCL = r.getOwner();
+            ActionPropertyChangeListener<?> oldPCL = r.getOwner();
             Action oldAction = oldPCL.getAction();
             if (oldAction!=null) {
                 oldAction.removePropertyChangeListener(oldPCL);
@@ -142,15 +142,15 @@
 
     private static class OwnedWeakReference<U extends JComponent> extends
                               WeakReference<U> {
-        private ActionPropertyChangeListener owner;
+        private ActionPropertyChangeListener<?> owner;
 
         OwnedWeakReference(U target, ReferenceQueue<? super U> queue,
-                           ActionPropertyChangeListener owner) {
+                           ActionPropertyChangeListener<?> owner) {
             super(target, queue);
             this.owner = owner;
         }
 
-        public ActionPropertyChangeListener getOwner() {
+        public ActionPropertyChangeListener<?> getOwner() {
             return owner;
         }
     }
--- a/jdk/src/share/classes/javax/swing/AncestorNotifier.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/AncestorNotifier.java	Wed Jul 05 17:58:30 2017 +0200
@@ -42,6 +42,7 @@
  * @author Dave Moore
  */
 
+@SuppressWarnings("serial")
 class AncestorNotifier implements ComponentListener, PropertyChangeListener, Serializable
 {
     Component firstInvisibleAncestor;
--- a/jdk/src/share/classes/javax/swing/ArrayTable.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/ArrayTable.java	Wed Jul 05 17:58:30 2017 +0200
@@ -133,7 +133,7 @@
                 if ((size==ARRAY_BOUNDARY) && isArray()) {
                     grow();
                 }
-                ((Hashtable)table).put(key, value);
+                ((Hashtable<Object,Object>)table).put(key, value);
             }
         }
     }
@@ -259,8 +259,8 @@
                 newArrayTable.put(array[i], array[i+1]);
             }
         } else {
-            Hashtable tmp = (Hashtable)table;
-            Enumeration keys = tmp.keys();
+            Hashtable<?,?> tmp = (Hashtable)table;
+            Enumeration<?> keys = tmp.keys();
             while (keys.hasMoreElements()) {
                 Object o = keys.nextElement();
                 newArrayTable.put(o,tmp.get(o));
@@ -289,8 +289,8 @@
                 keys[index] = array[i];
             }
         } else {
-            Hashtable tmp = (Hashtable)table;
-            Enumeration enum_ = tmp.keys();
+            Hashtable<?,?> tmp = (Hashtable)table;
+            Enumeration<?> enum_ = tmp.keys();
             int counter = tmp.size();
             if (keys == null) {
                 keys = new Object[counter];
@@ -326,9 +326,9 @@
      * Shrinks the storage from a hashtable to an array.
      */
     private void shrink() {
-        Hashtable tmp = (Hashtable)table;
+        Hashtable<?,?> tmp = (Hashtable)table;
         Object[] array = new Object[tmp.size()*2];
-        Enumeration keys = tmp.keys();
+        Enumeration<?> keys = tmp.keys();
         int j = 0;
 
         while (keys.hasMoreElements()) {
--- a/jdk/src/share/classes/javax/swing/Box.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/Box.java	Wed Jul 05 17:58:30 2017 +0200
@@ -76,6 +76,7 @@
  *
  * @author  Timothy Prinzing
  */
+@SuppressWarnings("serial")
 public class Box extends JComponent implements Accessible {
 
     /**
@@ -301,6 +302,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     public static class Filler extends JComponent implements Accessible {
 
         /**
@@ -380,6 +382,7 @@
          * This class implements accessibility support for the
          * <code>Box.Filler</code> class.
          */
+        @SuppressWarnings("serial")
         protected class AccessibleBoxFiller extends AccessibleAWTComponent {
             // AccessibleContext methods
             //
@@ -420,6 +423,7 @@
      * This class implements accessibility support for the
      * <code>Box</code> class.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleBox extends AccessibleAWTContainer {
         // AccessibleContext methods
         //
--- a/jdk/src/share/classes/javax/swing/BoxLayout.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/BoxLayout.java	Wed Jul 05 17:58:30 2017 +0200
@@ -135,6 +135,7 @@
  *
  * @author   Timothy Prinzing
  */
+@SuppressWarnings("serial")
 public class BoxLayout implements LayoutManager2, Serializable {
 
     /**
--- a/jdk/src/share/classes/javax/swing/ButtonGroup.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/ButtonGroup.java	Wed Jul 05 17:58:30 2017 +0200
@@ -65,6 +65,7 @@
  *
  * @author Jeff Dinkins
  */
+@SuppressWarnings("serial")
 public class ButtonGroup implements Serializable {
 
     // the list of buttons participating in this group
--- a/jdk/src/share/classes/javax/swing/ComponentInputMap.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/ComponentInputMap.java	Wed Jul 05 17:58:30 2017 +0200
@@ -35,6 +35,7 @@
  * @author Scott Violet
  * @since 1.3
  */
+@SuppressWarnings("serial")
 public class ComponentInputMap extends InputMap {
     /** Component binding is created for. */
     private JComponent          component;
--- a/jdk/src/share/classes/javax/swing/InputMap.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/InputMap.java	Wed Jul 05 17:58:30 2017 +0200
@@ -52,6 +52,7 @@
  * @author Scott Violet
  * @since 1.3
  */
+@SuppressWarnings("serial")
 public class InputMap implements Serializable {
     /** Handles the mapping between KeyStroke and Action name. */
     private transient ArrayTable     arrayTable;
--- a/jdk/src/share/classes/javax/swing/JButton.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JButton.java	Wed Jul 05 17:58:30 2017 +0200
@@ -75,6 +75,7 @@
  *
  * @author Jeff Dinkins
  */
+@SuppressWarnings("serial")
 public class JButton extends AbstractButton implements Accessible {
 
     /**
@@ -307,6 +308,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleJButton extends AccessibleAbstractButton {
 
         /**
--- a/jdk/src/share/classes/javax/swing/JComponent.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JComponent.java	Wed Jul 05 17:58:30 2017 +0200
@@ -2109,7 +2109,8 @@
     private void registerWithKeyboardManager(boolean onlyIfNew) {
         InputMap inputMap = getInputMap(WHEN_IN_FOCUSED_WINDOW, false);
         KeyStroke[] strokes;
-        Hashtable<KeyStroke, KeyStroke> registered = (Hashtable)getClientProperty
+        Hashtable<KeyStroke, KeyStroke> registered =
+                (Hashtable<KeyStroke, KeyStroke>)getClientProperty
                                 (WHEN_IN_FOCUSED_WINDOW_BINDINGS);
 
         if (inputMap != null) {
@@ -2161,14 +2162,15 @@
      * <code>WHEN_IN_FOCUSED_WINDOW</code> <code>KeyStroke</code> bindings.
      */
     private void unregisterWithKeyboardManager() {
-        Hashtable registered = (Hashtable)getClientProperty
+        Hashtable<KeyStroke, KeyStroke> registered =
+                (Hashtable<KeyStroke, KeyStroke>)getClientProperty
                                 (WHEN_IN_FOCUSED_WINDOW_BINDINGS);
 
         if (registered != null && registered.size() > 0) {
-            Enumeration keys = registered.keys();
+            Enumeration<KeyStroke> keys = registered.keys();
 
             while (keys.hasMoreElements()) {
-                KeyStroke ks = (KeyStroke)keys.nextElement();
+                KeyStroke ks = keys.nextElement();
                 unregisterWithKeyboardManager(ks);
             }
         }
@@ -3469,6 +3471,7 @@
         }
     }
 
+    @SuppressWarnings("serial")
     static class KeyboardState implements Serializable {
         private static final Object keyCodesKey =
             JComponent.KeyboardState.class;
@@ -4125,13 +4128,13 @@
             if (!getFlag(FOCUS_TRAVERSAL_KEYS_FORWARD_SET)) {
                 super.setFocusTraversalKeys(KeyboardFocusManager.
                                             FORWARD_TRAVERSAL_KEYS,
-                                            (Set)value);
+                                            (Set<AWTKeyStroke>)value);
             }
         } else if (propertyName == "focusTraversalKeysBackward") {
             if (!getFlag(FOCUS_TRAVERSAL_KEYS_BACKWARD_SET)) {
                 super.setFocusTraversalKeys(KeyboardFocusManager.
                                             BACKWARD_TRAVERSAL_KEYS,
-                                            (Set)value);
+                                            (Set<AWTKeyStroke>)value);
             }
         } else {
             throw new IllegalArgumentException("property \""+
@@ -4188,6 +4191,7 @@
      *
      * @return true if this component is lightweight
      */
+    @SuppressWarnings("deprecation")
     public static boolean isLightweightComponent(Component c) {
         return c.getPeer() instanceof LightweightPeer;
     }
--- a/jdk/src/share/classes/javax/swing/JLabel.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JLabel.java	Wed Jul 05 17:58:30 2017 +0200
@@ -104,6 +104,7 @@
  *
  * @author Hans Muller
  */
+@SuppressWarnings("serial")
 public class JLabel extends JComponent implements SwingConstants, Accessible
 {
     /**
@@ -1067,6 +1068,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleJLabel extends AccessibleJComponent
         implements AccessibleText, AccessibleExtendedComponent {
 
--- a/jdk/src/share/classes/javax/swing/JLayeredPane.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JLayeredPane.java	Wed Jul 05 17:58:30 2017 +0200
@@ -154,6 +154,7 @@
  *
  * @author David Kloba
  */
+@SuppressWarnings("serial")
 public class JLayeredPane extends JComponent implements Accessible {
     /// Watch the values in getObjectForLayer()
     /** Convenience object defining the Default layer. Equivalent to new Integer(0).*/
@@ -256,7 +257,7 @@
      */
     public void removeAll() {
         Component[] children = getComponents();
-        Hashtable cToL = getComponentToLayer();
+        Hashtable<Component, Integer> cToL = getComponentToLayer();
         for (int counter = children.length - 1; counter >= 0; counter--) {
             Component c = children[counter];
             if (c != null && !(c instanceof JComponent)) {
@@ -768,6 +769,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleJLayeredPane extends AccessibleJComponent {
 
         /**
--- a/jdk/src/share/classes/javax/swing/JMenu.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JMenu.java	Wed Jul 05 17:58:30 2017 +0200
@@ -109,6 +109,7 @@
  * @see JMenuBar
  * @see JPopupMenu
  */
+@SuppressWarnings("serial")
 public class JMenu extends JMenuItem implements Accessible,MenuElement
 {
     /**
@@ -134,13 +135,6 @@
      */
     private MenuEvent menuEvent = null;
 
-    /* Registry of listeners created for <code>Action-JMenuItem</code>
-     * linkage.  This is needed so that references can
-     * be cleaned up at remove time to allow garbage collection
-     * Default is <code>null</code>.
-     */
-    private static Hashtable listenerRegistry = null;
-
     /*
      * Used by the look and feel (L&F) code to handle
      * implementation specific menu behaviors.
@@ -1111,6 +1105,7 @@
     void configureAcceleratorFromAction(Action a) {
     }
 
+    @SuppressWarnings("serial")
     class MenuChangeListener implements ChangeListener, Serializable {
         boolean isSelected = false;
         public void stateChanged(ChangeEvent e) {
@@ -1158,6 +1153,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class WinListener extends WindowAdapter implements Serializable {
         JPopupMenu popupMenu;
         /**
@@ -1394,6 +1390,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleJMenu extends AccessibleJMenuItem
         implements AccessibleSelection {
 
--- a/jdk/src/share/classes/javax/swing/JMenuBar.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JMenuBar.java	Wed Jul 05 17:58:30 2017 +0200
@@ -82,6 +82,7 @@
  * @see JPopupMenu
  * @see JMenuItem
  */
+@SuppressWarnings("serial")
 public class JMenuBar extends JComponent implements Accessible,MenuElement
 {
     /**
@@ -498,6 +499,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleJMenuBar extends AccessibleJComponent
         implements AccessibleSelection {
 
--- a/jdk/src/share/classes/javax/swing/JMenuItem.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JMenuItem.java	Wed Jul 05 17:58:30 2017 +0200
@@ -87,6 +87,7 @@
  * @see JCheckBoxMenuItem
  * @see JRadioButtonMenuItem
  */
+@SuppressWarnings("serial")
 public class JMenuItem extends AbstractButton implements Accessible,MenuElement  {
 
     /**
@@ -829,6 +830,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleJMenuItem extends AccessibleAbstractButton implements ChangeListener {
 
         private boolean isArmed = false;
--- a/jdk/src/share/classes/javax/swing/JPopupMenu.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JPopupMenu.java	Wed Jul 05 17:58:30 2017 +0200
@@ -81,6 +81,7 @@
  * @author David Karlton
  * @author Arnaud Weber
  */
+@SuppressWarnings("serial")
 public class JPopupMenu extends JComponent implements Accessible,MenuElement {
 
     /**
@@ -1200,6 +1201,7 @@
      * Java Accessibility API appropriate to popup menu user-interface
      * elements.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleJPopupMenu extends AccessibleJComponent
         implements PropertyChangeListener {
 
@@ -1268,7 +1270,7 @@
         private void fireActiveDescendant() {
             if (JPopupMenu.this instanceof BasicComboPopup) {
                 // get the popup list
-                JList popupList = ((BasicComboPopup)JPopupMenu.this).getList();
+                JList<?> popupList = ((BasicComboPopup)JPopupMenu.this).getList();
                 if (popupList == null) {
                     return;
                 }
@@ -1335,7 +1337,7 @@
         throws IOException, ClassNotFoundException {
         s.defaultReadObject();
 
-        Vector          values = (Vector)s.readObject();
+        Vector<?>          values = (Vector)s.readObject();
         int             indexCounter = 0;
         int             maxCounter = values.size();
 
@@ -1519,6 +1521,7 @@
     /**
      * A popup menu-specific separator.
      */
+    @SuppressWarnings("serial")
     static public class Separator extends JSeparator
     {
         public Separator( )
--- a/jdk/src/share/classes/javax/swing/JRootPane.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JRootPane.java	Wed Jul 05 17:58:30 2017 +0200
@@ -199,6 +199,7 @@
  * @author David Kloba
  */
 /// PENDING(klobad) Who should be opaque in this component?
+@SuppressWarnings("serial")
 public class JRootPane extends JComponent implements Accessible {
 
     private static final String uiClassID = "RootPaneUI";
@@ -834,6 +835,7 @@
         }
     }
 
+    @SuppressWarnings("serial")
     static class DefaultAction extends AbstractAction {
         JButton owner;
         JRootPane root;
@@ -900,6 +902,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class RootLayout implements LayoutManager2, Serializable
     {
         /**
@@ -1065,6 +1068,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleJRootPane extends AccessibleJComponent {
         /**
          * Get the role of this object.
--- a/jdk/src/share/classes/javax/swing/JSeparator.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JSeparator.java	Wed Jul 05 17:58:30 2017 +0200
@@ -71,6 +71,7 @@
  * @author Georges Saab
  * @author Jeff Shapiro
  */
+@SuppressWarnings("serial")
 public class JSeparator extends JComponent implements SwingConstants, Accessible
 {
     /**
@@ -279,6 +280,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleJSeparator extends AccessibleJComponent {
 
         /**
--- a/jdk/src/share/classes/javax/swing/JToolTip.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JToolTip.java	Wed Jul 05 17:58:30 2017 +0200
@@ -66,6 +66,7 @@
  * @author Dave Moore
  * @author Rich Shiavi
  */
+@SuppressWarnings("serial")
 public class JToolTip extends JComponent implements Accessible {
     /**
      * @see #getUIClassID
@@ -251,6 +252,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleJToolTip extends AccessibleJComponent {
 
         /**
--- a/jdk/src/share/classes/javax/swing/JTree.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JTree.java	Wed Jul 05 17:58:30 2017 +0200
@@ -142,6 +142,7 @@
  * @author Ray Ryan
  * @author Scott Violet
  */
+@SuppressWarnings("serial")
 public class JTree extends JComponent implements Scrollable, Accessible
 {
     /**
@@ -421,6 +422,7 @@
      */
     private int expandRow = -1;
 
+    @SuppressWarnings("serial")
     private class TreeTimer extends Timer {
         public TreeTimer() {
             super(2000, null);
@@ -3077,7 +3079,7 @@
 
         expandedStack = new Stack<Stack<TreePath>>();
 
-        Vector          values = (Vector)s.readObject();
+        Vector<?>          values = (Vector)s.readObject();
         int             indexCounter = 0;
         int             maxCounter = values.size();
 
@@ -3159,7 +3161,7 @@
      */
     private void unarchiveExpandedState(Object state) {
         if(state instanceof Vector) {
-            Vector          paths = (Vector)state;
+            Vector<?>          paths = (Vector)state;
 
             for(int counter = paths.size() - 1; counter >= 0; counter--) {
                 Boolean        eState = (Boolean)paths.elementAt(counter--);
@@ -3240,6 +3242,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected static class EmptySelectionModel extends
               DefaultTreeSelectionModel
     {
@@ -3361,6 +3364,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class TreeSelectionRedirector implements Serializable,
                     TreeSelectionListener
     {
@@ -3661,7 +3665,7 @@
     {
          if(toRemove != null) {
              while(toRemove.hasMoreElements()) {
-                 Enumeration descendants = getDescendantToggledPaths
+                 Enumeration<?> descendants = getDescendantToggledPaths
                          (toRemove.nextElement());
 
                  if(descendants != null) {
@@ -3861,6 +3865,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     public static class DynamicUtilTreeNode extends DefaultMutableTreeNode {
         /**
          * Does the this <code>JTree</code> have children?
@@ -3882,7 +3887,7 @@
         public static void createChildren(DefaultMutableTreeNode parent,
                                           Object children) {
             if(children instanceof Vector) {
-                Vector          childVector = (Vector)children;
+                Vector<?>          childVector = (Vector)children;
 
                 for(int counter = 0, maxCounter = childVector.size();
                     counter < maxCounter; counter++)
@@ -3891,8 +3896,8 @@
                                 childVector.elementAt(counter)));
             }
             else if(children instanceof Hashtable) {
-                Hashtable           childHT = (Hashtable)children;
-                Enumeration         keys = childHT.keys();
+                Hashtable<?,?>           childHT = (Hashtable)children;
+                Enumeration<?>         keys = childHT.keys();
                 Object              aKey;
 
                 while(keys.hasMoreElements()) {
@@ -4092,6 +4097,7 @@
      * has been added to the <code>java.beans</code> package.
      * Please see {@link java.beans.XMLEncoder}.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleJTree extends AccessibleJComponent
             implements AccessibleSelection, TreeSelectionListener,
                        TreeModelListener, TreeExpansionListener  {
@@ -5242,6 +5248,7 @@
                 }
             }
 
+            @SuppressWarnings("deprecation")
             public boolean isFocusTraversable() {
                 AccessibleContext ac = getCurrentAccessibleContext();
                 if (ac instanceof AccessibleComponent) {
--- a/jdk/src/share/classes/javax/swing/JWindow.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/JWindow.java	Wed Jul 05 17:58:30 2017 +0200
@@ -89,6 +89,7 @@
  *
  * @author David Kloba
  */
+@SuppressWarnings("serial")
 public class JWindow extends Window implements Accessible,
                                                RootPaneContainer,
                                TransferHandler.HasGetTransferHandler
@@ -663,6 +664,7 @@
      * Java Accessibility API appropriate to window user-interface
      * elements.
      */
+    @SuppressWarnings("serial")
     protected class AccessibleJWindow extends AccessibleAWTWindow {
         // everything is in the new parent, AccessibleAWTWindow
     }
--- a/jdk/src/share/classes/javax/swing/MenuSelectionManager.java	Fri Dec 23 16:39:22 2011 -0800
+++ b/jdk/src/share/classes/javax/swing/MenuSelectionManager.java	Wed Jul 05 17:58:30 2017 +0200
@@ -213,7 +213,7 @@
         MenuElement menuElement;
         MenuElement subElements[];
         MenuElement path[];
-        Vector tmp;
+        Vector<MenuElement> tmp;
         int selectionSize;
         p = event.getPoint();
 
@@ -242,7 +242,7 @@
         screenX = p.x;