Merge
authorduke
Wed, 05 Jul 2017 23:40:06 +0200
changeset 45505 ca0e16b2d5d6
parent 45504 ea7475564d07 (current diff)
parent 45495 8f5dd0fb0a6d (diff)
child 45506 790c716da86b
Merge
jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/utils/AttList.java
jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/utils/DOM2Helper.java
jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/DOMHelper.java
jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/DOMOrder.java
jdk/test/java/nio/file/Files/walkFileTree/PrintFileTree.java
jdk/test/java/nio/file/Files/walkFileTree/find.sh
jdk/test/java/util/Arrays/ParallelPrefix.java
jdk/test/java/util/ResourceBundle/modules/appbasic/src/test/jdk/test/resources/MyResourcesProvider.java
jdk/test/java/util/ResourceBundle/modules/appbasic2/src/test/jdk/test/resources/MyResourcesProvider.java
jdk/test/java/util/ResourceBundle/modules/basic/src/mainbundles/jdk/test/resources/MyResourcesProvider.java
jdk/test/java/util/ResourceBundle/modules/simple/src/bundles/jdk/test/resources/MyResourcesProvider.java
jdk/test/java/util/ResourceBundle/modules/visibility/src/exported.named.bundles/jdk/test/resources/exported/classes/MyResourcesProvider.java
jdk/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/classes/MyResourcesProvider.java
jdk/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/props/MyResourcesProvider.java
jdk/test/java/util/ResourceBundle/modules/xmlformat/src/bundles/jdk/test/resources/MyResourcesProvider.java
jdk/test/lib/testlibrary/jdk/testlibrary/TimeLimitedRunner.java
jdk/test/sun/net/InetAddress/nameservice/dns/cname.sh
jdk/test/sun/net/ftp/MarkResetTest.sh
jdk/test/sun/net/www/protocol/file/DirPermissionDenied.sh
jdk/test/sun/net/www/protocol/jrt/other_resources.sh
--- a/.hgtags-top-repo	Thu Jun 15 13:44:42 2017 +0200
+++ b/.hgtags-top-repo	Wed Jul 05 23:40:06 2017 +0200
@@ -426,3 +426,5 @@
 4c12464a907db4656c1033f56fa49cba643ac629 jdk-9+171
 6558c37afe832582238d338578d598f30c6fdd75 jdk-10+10
 2c25fc24103251f9711a1c280c31e1e41016d90f jdk-9+172
+6b750cdb823a029a25ff2e560302cc2d28a86cb6 jdk-10+11
+88d7fd969e7df0e07a53b201cfd29393ca33ede9 jdk-9+173
--- a/common/conf/jib-profiles.js	Thu Jun 15 13:44:42 2017 +0200
+++ b/common/conf/jib-profiles.js	Wed Jul 05 23:40:06 2017 +0200
@@ -387,7 +387,7 @@
     // on such hardware.
     if (input.build_cpu == "sparcv9") {
        var cpu_brand = $EXEC("bash -c \"kstat -m cpu_info | grep brand | head -n1 | awk '{ print \$2 }'\"");
-       if (cpu_brand.trim().match('SPARC-.7')) {
+       if (cpu_brand.trim().match('SPARC-.[78]')) {
            boot_jdk_revision = "8u20";
            boot_jdk_subdirpart = "1.8.0_20";
        }
--- a/corba/.hgtags	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/.hgtags	Wed Jul 05 23:40:06 2017 +0200
@@ -426,3 +426,5 @@
 c62e5964cfcf144d8f72e9ba69757897785349a9 jdk-9+171
 080c37fd77e2c4629b91059298e37758afbdbc46 jdk-10+10
 95ed14547ca9246baed34f90ef3ca13217538a8c jdk-9+172
+8ef8a0f1c4dfea17e10125e1f885920538e63085 jdk-10+11
+534ba4f8cfcf12accc5b9adb943103f2ff79fe16 jdk-9+173
--- a/corba/src/java.corba/share/classes/javax/rmi/PortableRemoteObject.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/javax/rmi/PortableRemoteObject.java	Wed Jul 05 23:40:06 2017 +0200
@@ -62,6 +62,8 @@
  * attempts to narrow it to conform to
  * the given interface. If the operation is successful the result will be an
  * object of the specified type, otherwise an exception will be thrown.
+ *
+ * <p>See also {@extLink rmi_iiop_guides RMI-IIOP developer's guides}.</p>
  */
 public class PortableRemoteObject {
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/ACTIVITY_COMPLETED.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/ACTIVITY_COMPLETED.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * the Activity, or that the Activity completed in a manner other than that
  * originally requested.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/ACTIVITY_REQUIRED.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/ACTIVITY_REQUIRED.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,8 +31,8 @@
  * Activity context was necessary to perform the invoked operation, but one
  * was not found associated with the calling thread.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_CONTEXT.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_CONTEXT.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since    JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_INV_ORDER.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_INV_ORDER.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_OPERATION.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_OPERATION.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_PARAM.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_PARAM.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,10 +37,9 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">meaning of
- * minor codes</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions},
+ * {@extLink jidlexception_minorcodes meaning of minor codes}
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_QOS.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_QOS.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,8 @@
  * support the quality of service required by an invocation parameter that
  * has a quality of service semantics associated with it.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_TYPECODE.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_TYPECODE.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/Bounds.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/Bounds.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,8 @@
  * the legal bounds for the object that a method is trying
  * to access.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class Bounds extends org.omg.CORBA.UserException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/CODESET_INCOMPATIBLE.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/CODESET_INCOMPATIBLE.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,8 +29,8 @@
  * This exception is raised whenever meaningful communication is not possible
  * between client and server native code sets.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/COMM_FAILURE.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/COMM_FAILURE.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,11 +33,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">meaning
- * of minor codes</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">meaning of
- * minor codes</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/DATA_CONVERSION.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/DATA_CONVERSION.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,11 +35,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">meaning
- * of minor codes</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/FREE_MEM.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/FREE_MEM.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/IMP_LIMIT.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/IMP_LIMIT.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,8 +36,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INITIALIZE.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INITIALIZE.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INTERNAL.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INTERNAL.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,11 +33,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">meaning
- * of minor codes</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes meaning of minor codes}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INTF_REPOS.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INTF_REPOS.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INVALID_ACTIVITY.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INVALID_ACTIVITY.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * suspended. It is also raised when an attempted invocation is made that
  * is incompatible with the Activity's current state.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INVALID_TRANSACTION.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INVALID_TRANSACTION.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   JDK1.2
  *
  */
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INV_FLAG.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INV_FLAG.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INV_IDENT.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INV_IDENT.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INV_OBJREF.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INV_OBJREF.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,11 +37,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">Minor
- * Code Meanings</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INV_POLICY.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INV_POLICY.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class INV_POLICY extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/MARSHAL.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/MARSHAL.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,8 +39,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">Minor
- * Code Meanings</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
  * @since       JDK1.2
  */
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/NO_IMPLEMENT.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/NO_IMPLEMENT.java	Wed Jul 05 23:40:06 2017 +0200
@@ -36,8 +36,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">Minor
- * Code Meanings</A> to see the minor codes for this exception.
+ * See the section {extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
  * @since       JDK1.2
  */
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/NO_MEMORY.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/NO_MEMORY.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/NO_PERMISSION.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/NO_PERMISSION.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/NO_RESOURCES.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/NO_RESOURCES.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/NO_RESPONSE.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/NO_RESPONSE.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/OBJECT_NOT_EXIST.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/OBJECT_NOT_EXIST.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,11 +39,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">Minor
- * Code Meanings</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/OBJ_ADAPTER.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/OBJ_ADAPTER.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,11 +34,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">Minor
- * Code Meanings</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/ORB.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/ORB.java	Wed Jul 05 23:40:06 2017 +0200
@@ -184,6 +184,8 @@
  * Therefore, the implementation first checks the ${java.home}/conf directory for orb.properties,
  * and thereafter the ${java.home}/lib directory.
  *
+ * <p>See also {@extLink idl_guides IDL developer's guide}.</p>
+ *
  * @since   JDK1.2
  */
 abstract public class ORB {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/PERSIST_STORE.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/PERSIST_STORE.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class PERSIST_STORE extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/REBIND.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/REBIND.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * This exception is also raised if the current effective RebindPolicy has
  * a value of NO_RECONNECT and a connection must be reopened.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/SystemException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/SystemException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -44,8 +44,8 @@
  * declared in signatures of the Java methods mapped from operations in
  * IDL interfaces.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public abstract class SystemException extends java.lang.RuntimeException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/TIMEOUT.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/TIMEOUT.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,8 @@
  * specified time-to-live period has been exceeded. It is a standard system
  * exception because time-to-live QoS can be applied to any invocation.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_MODE.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_MODE.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,8 +35,8 @@
  * a string describing the exception.
  * The OMG CORBA core 2.4 specification has details.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class TRANSACTION_MODE extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_REQUIRED.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_REQUIRED.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * a string describing the exception.
  * The OMG Transaction Service specfication has details.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class TRANSACTION_REQUIRED extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,8 +36,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class TRANSACTION_ROLLEDBACK extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_UNAVAILABLE.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_UNAVAILABLE.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,8 +35,8 @@
  * a string describing the exception.
  * The OMG CORBA core 2.4 specification has details.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class TRANSACTION_UNAVAILABLE extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSIENT.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSIENT.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,8 +36,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class TRANSIENT extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/UNKNOWN.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/UNKNOWN.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,11 +39,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">Minor
- * Code Meanings</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meaning}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class UNKNOWN extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/UnknownUserException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/UnknownUserException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * <code>UnknownUserException</code> object. This is available from the
  * <code>Environment</code> object returned by the method <code>Request.env</code>.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @see Request
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/UserException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/UserException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,8 +31,8 @@
  * means that they need to
  * be declared in method signatures.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 public abstract class UserException extends java.lang.Exception implements org.omg.CORBA.portable.IDLEntity {
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/WrongTransaction.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/WrongTransaction.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,8 @@
  * which the client originally sent the request.
  * See the OMG Transaction Service Specification for details.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class WrongTransaction extends UserException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/doc-files/generatedfiles.html	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/doc-files/generatedfiles.html	Wed Jul 05 23:40:06 2017 +0200
@@ -42,7 +42,7 @@
 </UL>
 
 
-<H2><a name="helper">Helper Files</a></H2>
+<H2><a id="helper">Helper Files</a></H2>
 
 <P>Helper files supply several static methods needed to manipulate the type.
 These include <code>Any</code> insert and extract operations for the type,
@@ -57,7 +57,7 @@
 is raised to indicate other kinds of errors. Trying to narrow
 a null will always succeed with a return value of null.
 
-<H2><a name="holder">Holder Files</a></H2>
+<H2><a id="holder">Holder Files</a></H2>
 
 <P>Support for out and inout parameter passing modes requires the use of additional holder classes.
 These classes are available for all of the basic IDL datatypes in the <code>org.omg.CORBA</code> package
@@ -74,7 +74,7 @@
 the <code>org.omg.CORBA.portable.Streamable</code> interface.
 
 
-<H2><a name="operations">Operations Files</a></H2>
+<H2><a id="operations">Operations Files</a></H2>
 
 <P>A non abstract IDL interface is mapped to two public Java interfaces:
 a <em>signature</em> interface and an <em>operations</em> interface.
@@ -96,7 +96,7 @@
 interface and operations interface hierarchies.
 
 
-<H2><a name="stub">Stubs</a></H2>
+<H2><a id="stub">Stubs</a></H2>
 
 <P>For the mapping of a non-object-oriented language, there will be
 a programming interface to the stubs for each interface type. Generally, the stubs
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/package.html	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/package.html	Wed Jul 05 23:40:06 2017 +0200
@@ -147,9 +147,7 @@
 <code><b>register_initial_reference</b>(String id, org.omg.CORBA.Object obj)</code>
 </UL>
 
-<P>An example that uses some of these methods is <A
-HREF="{@docRoot}/../technotes/guides/idl/GShome.html">
-<em>Getting Started with Java IDL</em></A>.
+<P>An example that uses some of these methods is {@extLink idl_getting_started Getting Started with Java IDL}.
 
 <H2>
 Exceptions</H2>
@@ -158,9 +156,8 @@
 then any code using that method must have a <code>try</code>/<code>catch</code>
 block and handle that exception when it is thrown.
 
-<P>The documentation on <A 
-HREF="{@docRoot}/../technotes/guides/idl/jidlExceptions.html"><em>Java
-IDL exceptions</em></A> has more information and explains the difference between
+<P>The documentation on {@extLink jidlexception Java&nbsp;IDL exceptions }
+has more information and explains the difference between
 system exceptions and user-defined exceptions.
 
 <P>The following is a list of the system exceptions (which are unchecked
@@ -447,8 +444,8 @@
 will take an object in the Java programming language.  The helper class for a
 non-abstract interface that has at least one abstract base interface will provide
 both versions of the <code>narrow</code> method.
-<P>The <A HREF="{@docRoot}/../technotes/guides/idl/jidlExample.html"><em>Hello World</em></A>
-tutorial uses a <code>narrow</code> method that looks like this:
+<P>The {@extLink idl_guides Hello World tutorial}
+uses a <code>narrow</code> method that looks like this:
 <PRE>
         // create and initialize the ORB
         ORB orb = ORB.init(args, null);
@@ -548,6 +545,7 @@
 }
 </PRE>
 
+<a id="value"></a>
 <h3>Value Type Helper Classes</h3>
 A helper class for a value type includes different renderings of
 the same methods generated for non-value type methods. The main difference
@@ -861,8 +859,8 @@
 Related Documentation</H1>
 For overviews, guides, and a tutorial, please see:
 <UL>
-<LI>
-<A HREF="{@docRoot}/../technotes/guides/idl/index.html">Java IDL home page</A>
+<LI> {@extLink idl_guides Java&nbsp;IDL tutorial page}.</LI>
+<LI> {@extLink rmi_iiop_guides RMI-IIOP developer's guide}.</LI>
 </UL>
 
 
--- a/corba/src/java.corba/share/classes/org/omg/CosNaming/package.html	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/CosNaming/package.html	Wed Jul 05 23:40:06 2017 +0200
@@ -3,7 +3,7 @@
 <head>
 <!--
 /*
-* Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+* Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
@@ -334,14 +334,12 @@
 For an overview and examples of how to use the
 <code>CosNaming</code> API, please see:
 <ul>
-  <li><a href="../../../../technotes/guides/idl/tnameserv.html">
-    Naming Service</a>
+  <li>{@extLink tnameserv NamingService}
 </ul>
 <p>
 For an overview of Java&nbsp;IDL, please see:
 <ul>
-  <li><a href="../../../../technotes/guides/idl/index.html">
-    Java&nbsp;IDL home page</a>
+  <li>{@extLink idl_guides  Java&nbsp;IDL developer's home page}
 </ul>
 
 @since JDK1.3
--- a/corba/src/java.corba/share/classes/org/omg/PortableServer/package.html	Thu Jun 15 13:44:42 2017 +0200
+++ b/corba/src/java.corba/share/classes/org/omg/PortableServer/package.html	Wed Jul 05 23:40:06 2017 +0200
@@ -157,7 +157,7 @@
 <H2>Related Documentation</H2>
 
 <P>For an overview of Java IDL, please see:
-<A HREF="../../../../technotes/guides/idl/index.html">Java IDL home page</A>.
+{@extLink idl_guides Java&nbsp;IDL home page}.
 
 <H2>Example Code</H2>
 <a id="sampleserver"></a>
--- a/hotspot/.hgtags	Thu Jun 15 13:44:42 2017 +0200
+++ b/hotspot/.hgtags	Wed Jul 05 23:40:06 2017 +0200
@@ -586,3 +586,5 @@
 d53171650a2cc6c6f699c966c533b914ca9c0602 jdk-9+171
 c6cd3ec8d46b034e57c86399380ffcf7f25706e4 jdk-10+10
 1ae9e84f68b359420d2d153ecfe5ee2903e33a2e jdk-9+172
+7f14e550f1e8abea41c223e5fdad2261e99ba929 jdk-10+11
+e64b1cb48d6e7703928a9d1da106fc27f8cb65fd jdk-9+173
--- a/hotspot/src/cpu/arm/vm/relocInfo_arm.cpp	Thu Jun 15 13:44:42 2017 +0200
+++ b/hotspot/src/cpu/arm/vm/relocInfo_arm.cpp	Wed Jul 05 23:40:06 2017 +0200
@@ -139,7 +139,7 @@
 #ifdef AARCH64
 #ifdef COMPILER2
   NativeMovConstReg* ni = nativeMovConstReg_at(addr());
-  if (ni->is_movz()) {
+  if (ni->is_mov_slow()) {
     return;
   }
 #endif
--- a/hotspot/src/share/vm/opto/arraycopynode.cpp	Thu Jun 15 13:44:42 2017 +0200
+++ b/hotspot/src/share/vm/opto/arraycopynode.cpp	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,7 @@
 #include "precompiled.hpp"
 #include "opto/arraycopynode.hpp"
 #include "opto/graphKit.hpp"
+#include "runtime/sharedRuntime.hpp"
 
 ArrayCopyNode::ArrayCopyNode(Compile* C, bool alloc_tightly_coupled, bool has_negative_length_guard)
   : CallNode(arraycopy_type(), NULL, TypeRawPtr::BOTTOM),
@@ -631,42 +632,76 @@
   return CallNode::may_modify_arraycopy_helper(dest_t, t_oop, phase);
 }
 
-bool ArrayCopyNode::may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase, ArrayCopyNode*& ac) {
-  if (n->Opcode() == Op_StoreCM ||
-      n->Opcode() == Op_StoreB) {
-    // Ignore card mark stores
-    n = n->in(MemNode::Memory);
-  }
-
-  if (n->is_Proj()) {
-    n = n->in(0);
-    if (n->is_Call() && n->as_Call()->may_modify(t_oop, phase)) {
-      if (n->isa_ArrayCopy() != NULL) {
-        ac = n->as_ArrayCopy();
-      }
-      return true;
-    }
+bool ArrayCopyNode::may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase, CallNode*& call) {
+  if (n != NULL &&
+      n->is_Call() &&
+      n->as_Call()->may_modify(t_oop, phase) &&
+      (n->as_Call()->is_ArrayCopy() || n->as_Call()->is_call_to_arraycopystub())) {
+    call = n->as_Call();
+    return true;
   }
   return false;
 }
 
-bool ArrayCopyNode::may_modify(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase, ArrayCopyNode*& ac) {
-  Node* mem = mb->in(TypeFunc::Memory);
-
-  if (mem->is_MergeMem()) {
-    Node* n = mem->as_MergeMem()->memory_at(Compile::AliasIdxRaw);
-    if (may_modify_helper(t_oop, n, phase, ac)) {
-      return true;
-    } else if (n->is_Phi()) {
-      for (uint i = 1; i < n->req(); i++) {
-        if (n->in(i) != NULL) {
-          if (may_modify_helper(t_oop, n->in(i), phase, ac)) {
-            return true;
+static Node* step_over_gc_barrier(Node* c) {
+  if (UseG1GC && !GraphKit::use_ReduceInitialCardMarks() &&
+      c != NULL && c->is_Region() && c->req() == 3) {
+    for (uint i = 1; i < c->req(); i++) {
+      if (c->in(i) != NULL && c->in(i)->is_Region() &&
+          c->in(i)->req() == 3) {
+        Node* r = c->in(i);
+        for (uint j = 1; j < r->req(); j++) {
+          if (r->in(j) != NULL && r->in(j)->is_Proj() &&
+              r->in(j)->in(0) != NULL &&
+              r->in(j)->in(0)->Opcode() == Op_CallLeaf &&
+              r->in(j)->in(0)->as_Call()->entry_point() == CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_post)) {
+            Node* call = r->in(j)->in(0);
+            c = c->in(i == 1 ? 2 : 1);
+            if (c != NULL) {
+              c = c->in(0);
+              if (c != NULL) {
+                c = c->in(0);
+                assert(call->in(0) == NULL ||
+                       call->in(0)->in(0) == NULL ||
+                       call->in(0)->in(0)->in(0) == NULL ||
+                       call->in(0)->in(0)->in(0)->in(0) == NULL ||
+                       call->in(0)->in(0)->in(0)->in(0)->in(0) == NULL ||
+                       c == call->in(0)->in(0)->in(0)->in(0)->in(0), "bad barrier shape");
+                return c;
+              }
+            }
           }
         }
       }
     }
   }
+  return c;
+}
+
+bool ArrayCopyNode::may_modify(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase, ArrayCopyNode*& ac) {
+
+  Node* c = mb->in(0);
+
+  // step over g1 gc barrier if we're at a clone with ReduceInitialCardMarks off
+  c = step_over_gc_barrier(c);
+
+  CallNode* call = NULL;
+  if (c != NULL && c->is_Region()) {
+    for (uint i = 1; i < c->req(); i++) {
+      if (c->in(i) != NULL) {
+        Node* n = c->in(i)->in(0);
+        if (may_modify_helper(t_oop, n, phase, call)) {
+          ac = call->isa_ArrayCopy();
+          assert(c == mb->in(0), "only for clone");
+          return true;
+        }
+      }
+    }
+  } else if (may_modify_helper(t_oop, c->in(0), phase, call)) {
+    ac = call->isa_ArrayCopy();
+    assert(c == mb->in(0) || (ac != NULL && ac->is_clonebasic() && !GraphKit::use_ReduceInitialCardMarks()), "only for clone");
+    return true;
+  }
 
   return false;
 }
@@ -677,37 +712,77 @@
 // between offset_lo and offset_hi
 // if must_modify is true, return true if the copy is guaranteed to
 // write between offset_lo and offset_hi
-bool ArrayCopyNode::modifies(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase, bool must_modify) {
+bool ArrayCopyNode::modifies(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase, bool must_modify) const {
   assert(_kind == ArrayCopy || _kind == CopyOf || _kind == CopyOfRange, "only for real array copies");
 
-  Node* dest = in(ArrayCopyNode::Dest);
-  Node* src_pos = in(ArrayCopyNode::SrcPos);
-  Node* dest_pos = in(ArrayCopyNode::DestPos);
-  Node* len = in(ArrayCopyNode::Length);
+  Node* dest = in(Dest);
+  Node* dest_pos = in(DestPos);
+  Node* len = in(Length);
 
   const TypeInt *dest_pos_t = phase->type(dest_pos)->isa_int();
   const TypeInt *len_t = phase->type(len)->isa_int();
   const TypeAryPtr* ary_t = phase->type(dest)->isa_aryptr();
 
-  if (dest_pos_t != NULL && len_t != NULL && ary_t != NULL) {
-    BasicType ary_elem = ary_t->klass()->as_array_klass()->element_type()->basic_type();
-    uint header = arrayOopDesc::base_offset_in_bytes(ary_elem);
-    uint elemsize = type2aelembytes(ary_elem);
+  if (dest_pos_t == NULL || len_t == NULL || ary_t == NULL) {
+    return !must_modify;
+  }
+
+  BasicType ary_elem = ary_t->klass()->as_array_klass()->element_type()->basic_type();
+  uint header = arrayOopDesc::base_offset_in_bytes(ary_elem);
+  uint elemsize = type2aelembytes(ary_elem);
 
-    jlong dest_pos_plus_len_lo = (((jlong)dest_pos_t->_lo) + len_t->_lo) * elemsize + header;
-    jlong dest_pos_plus_len_hi = (((jlong)dest_pos_t->_hi) + len_t->_hi) * elemsize + header;
-    jlong dest_pos_lo = ((jlong)dest_pos_t->_lo) * elemsize + header;
-    jlong dest_pos_hi = ((jlong)dest_pos_t->_hi) * elemsize + header;
+  jlong dest_pos_plus_len_lo = (((jlong)dest_pos_t->_lo) + len_t->_lo) * elemsize + header;
+  jlong dest_pos_plus_len_hi = (((jlong)dest_pos_t->_hi) + len_t->_hi) * elemsize + header;
+  jlong dest_pos_lo = ((jlong)dest_pos_t->_lo) * elemsize + header;
+  jlong dest_pos_hi = ((jlong)dest_pos_t->_hi) * elemsize + header;
 
-    if (must_modify) {
-      if (offset_lo >= dest_pos_hi && offset_hi < dest_pos_plus_len_lo) {
-        return true;
-      }
-    } else {
-      if (offset_hi >= dest_pos_lo && offset_lo < dest_pos_plus_len_hi) {
-        return true;
-      }
+  if (must_modify) {
+    if (offset_lo >= dest_pos_hi && offset_hi < dest_pos_plus_len_lo) {
+      return true;
+    }
+  } else {
+    if (offset_hi >= dest_pos_lo && offset_lo < dest_pos_plus_len_hi) {
+      return true;
     }
   }
   return false;
 }
+
+// We try to replace a load from the destination of an arraycopy with
+// a load from the source so the arraycopy has a chance to be
+// eliminated. It's only valid if the arraycopy doesn't change the
+// element that would be loaded from the source array.
+bool ArrayCopyNode::can_replace_dest_load_with_src_load(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase) const {
+  assert(_kind == ArrayCopy || _kind == CopyOf || _kind == CopyOfRange, "only for real array copies");
+
+  Node* src = in(Src);
+  Node* dest = in(Dest);
+
+  // Check whether, assuming source and destination are the same
+  // array, the arraycopy modifies the element from the source we
+  // would load.
+  if ((src != dest && in(SrcPos) == in(DestPos)) || !modifies(offset_lo, offset_hi, phase, false)) {
+    // if not the transformation is legal
+    return true;
+  }
+
+  AllocateNode* src_alloc = AllocateNode::Ideal_allocation(src, phase);
+  AllocateNode* dest_alloc = AllocateNode::Ideal_allocation(dest, phase);
+
+  // Check whether source and destination can be proved to be
+  // different arrays
+  const TypeOopPtr* t_src = phase->type(src)->isa_oopptr();
+  const TypeOopPtr* t_dest = phase->type(dest)->isa_oopptr();
+
+  if (t_src != NULL && t_dest != NULL &&
+      (t_src->is_known_instance() || t_dest->is_known_instance()) &&
+      t_src->instance_id() != t_dest->instance_id()) {
+    return true;
+  }
+
+  if (MemNode::detect_ptr_independence(src->uncast(), src_alloc, dest->uncast(), dest_alloc, phase)) {
+    return true;
+  }
+
+  return false;
+}
--- a/hotspot/src/share/vm/opto/arraycopynode.hpp	Thu Jun 15 13:44:42 2017 +0200
+++ b/hotspot/src/share/vm/opto/arraycopynode.hpp	Wed Jul 05 23:40:06 2017 +0200
@@ -108,7 +108,7 @@
                             BasicType copy_type, const Type* value_type, int count);
   bool finish_transform(PhaseGVN *phase, bool can_reshape,
                         Node* ctl, Node *mem);
-  static bool may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase, ArrayCopyNode*& ac);
+  static bool may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase, CallNode*& call);
 
 public:
 
@@ -167,7 +167,8 @@
   bool has_negative_length_guard() const { return _has_negative_length_guard; }
 
   static bool may_modify(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase, ArrayCopyNode*& ac);
-  bool modifies(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase, bool must_modify);
+  bool modifies(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase, bool must_modify) const;
+  bool can_replace_dest_load_with_src_load(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase) const;
 
 #ifndef PRODUCT
   virtual void dump_spec(outputStream *st) const;
--- a/hotspot/src/share/vm/opto/loopnode.cpp	Thu Jun 15 13:44:42 2017 +0200
+++ b/hotspot/src/share/vm/opto/loopnode.cpp	Wed Jul 05 23:40:06 2017 +0200
@@ -1860,6 +1860,9 @@
   if (_required_safept != NULL && _required_safept->size() > 0) {
     tty->print(" req={"); _required_safept->dump_simple(); tty->print(" }");
   }
+  if (Verbose) {
+    tty->print(" body={"); _body.dump_simple(); tty->print(" }");
+  }
   tty->cr();
 }
 
--- a/hotspot/src/share/vm/opto/loopopts.cpp	Thu Jun 15 13:44:42 2017 +0200
+++ b/hotspot/src/share/vm/opto/loopopts.cpp	Wed Jul 05 23:40:06 2017 +0200
@@ -913,7 +913,11 @@
 
   if (n->is_ConstraintCast()) {
     Node* dom_cast = n->as_ConstraintCast()->dominating_cast(this);
-    if (dom_cast != NULL) {
+    // ConstraintCastNode::dominating_cast() uses node control input to determine domination.
+    // Node control inputs don't necessarily agree with loop control info (due to
+    // transformations happened in between), thus additional dominance check is needed
+    // to keep loop info valid.
+    if (dom_cast != NULL && is_dominator(get_ctrl(dom_cast), get_ctrl(n))) {
       _igvn.replace_node(n, dom_cast);
       return dom_cast;
     }
--- a/hotspot/src/share/vm/opto/macro.cpp	Thu Jun 15 13:44:42 2017 +0200
+++ b/hotspot/src/share/vm/opto/macro.cpp	Wed Jul 05 23:40:06 2017 +0200
@@ -1047,7 +1047,9 @@
         // opportunities for allocation elimination
         Node* src = ac->in(ArrayCopyNode::Src);
         ac->replace_edge(src, top());
-        if (src->outcnt() == 0) {
+        // src can be top at this point if src and dest of the
+        // arraycopy were the same
+        if (src->outcnt() == 0 && !src->is_top()) {
           _igvn.remove_dead_node(src);
         }
 
--- a/hotspot/src/share/vm/opto/macroArrayCopy.cpp	Thu Jun 15 13:44:42 2017 +0200
+++ b/hotspot/src/share/vm/opto/macroArrayCopy.cpp	Wed Jul 05 23:40:06 2017 +0200
@@ -718,6 +718,15 @@
   _igvn.replace_node(_ioproj_fallthrough, *io);
   _igvn.replace_node(_fallthroughcatchproj, *ctrl);
 
+#ifdef ASSERT
+  const TypeOopPtr* dest_t = _igvn.type(dest)->is_oopptr();
+  if (dest_t->is_known_instance()) {
+    ArrayCopyNode* ac = NULL;
+    assert(ArrayCopyNode::may_modify(dest_t, (*ctrl)->in(0)->as_MemBar(), &_igvn, ac), "dependency on arraycopy lost");
+    assert(ac == NULL, "no arraycopy anymore");
+  }
+#endif
+
   return out_mem;
 }
 
@@ -1139,8 +1148,25 @@
   const TypeAryPtr* top_src = src_type->isa_aryptr();
   const TypeAryPtr* top_dest = dest_type->isa_aryptr();
 
-  if (top_src  == NULL || top_src->klass()  == NULL ||
-      top_dest == NULL || top_dest->klass() == NULL) {
+  BasicType src_elem = T_CONFLICT;
+  BasicType dest_elem = T_CONFLICT;
+
+  if (top_dest != NULL && top_dest->klass() != NULL) {
+    dest_elem = top_dest->klass()->as_array_klass()->element_type()->basic_type();
+  }
+  if (top_src != NULL && top_src->klass() != NULL) {
+    src_elem = top_src->klass()->as_array_klass()->element_type()->basic_type();
+  }
+  if (src_elem  == T_ARRAY)  src_elem  = T_OBJECT;
+  if (dest_elem == T_ARRAY)  dest_elem = T_OBJECT;
+
+  if (ac->is_arraycopy_validated() &&
+      dest_elem != T_CONFLICT &&
+      src_elem == T_CONFLICT) {
+    src_elem = dest_elem;
+  }
+
+  if (src_elem == T_CONFLICT || dest_elem == T_CONFLICT) {
     // Conservatively insert a memory barrier on all memory slices.
     // Do not let writes into the source float below the arraycopy.
     {
@@ -1169,13 +1195,11 @@
     }
     return;
   }
+
+  assert(!ac->is_arraycopy_validated() || (src_elem == dest_elem && dest_elem != T_VOID), "validated but different basic types");
+
   // (2) src and dest arrays must have elements of the same BasicType
   // Figure out the size and type of the elements we will be copying.
-  BasicType src_elem  = top_src->klass()->as_array_klass()->element_type()->basic_type();
-  BasicType dest_elem = top_dest->klass()->as_array_klass()->element_type()->basic_type();
-  if (src_elem  == T_ARRAY)  src_elem  = T_OBJECT;
-  if (dest_elem == T_ARRAY)  dest_elem = T_OBJECT;
-
   if (src_elem != dest_elem || dest_elem == T_VOID) {
     // The component types are not the same or are not recognized.  Punt.
     // (But, avoid the native method wrapper to JVM_ArrayCopy.)
--- a/hotspot/src/share/vm/opto/memnode.cpp	Thu Jun 15 13:44:42 2017 +0200
+++ b/hotspot/src/share/vm/opto/memnode.cpp	Wed Jul 05 23:40:06 2017 +0200
@@ -908,10 +908,11 @@
         ld->set_req(0, ld_alloc->in(0));
       }
     } else {
+      Node* src = ac->in(ArrayCopyNode::Src);
       Node* addp = in(MemNode::Address)->clone();
       assert(addp->in(AddPNode::Base) == addp->in(AddPNode::Address), "should be");
-      addp->set_req(AddPNode::Base, ac->in(ArrayCopyNode::Src));
-      addp->set_req(AddPNode::Address, ac->in(ArrayCopyNode::Src));
+      addp->set_req(AddPNode::Base, src);
+      addp->set_req(AddPNode::Address, src);
 
       const TypeAryPtr* ary_t = phase->type(in(MemNode::Address))->isa_aryptr();
       BasicType ary_elem  = ary_t->klass()->as_array_klass()->element_type()->basic_type();
@@ -928,6 +929,12 @@
       addp->set_req(AddPNode::Offset, offset);
       ld->set_req(MemNode::Address, phase->transform(addp));
 
+      const TypeX *ld_offs_t = phase->type(offset)->isa_intptr_t();
+
+      if (!ac->as_ArrayCopy()->can_replace_dest_load_with_src_load(ld_offs_t->_lo, ld_offs_t->_hi, phase)) {
+        return NULL;
+      }
+
       if (in(0) != NULL) {
         assert(ac->in(0) != NULL, "alloc must have control");
         ld->set_req(0, ac->in(0));
--- a/hotspot/src/share/vm/prims/jvmti.xml	Thu Jun 15 13:44:42 2017 +0200
+++ b/hotspot/src/share/vm/prims/jvmti.xml	Wed Jul 05 23:40:06 2017 +0200
@@ -24,11 +24,11 @@
 -->
 
 <!DOCTYPE specification [
-   <!ELEMENT specification (title, intro*, functionsection, errorsection, 
+   <!ELEMENT specification (title, intro*, functionsection, errorsection,
                             eventsection, datasection, issuessection, changehistory)>
-   <!ATTLIST specification label CDATA #REQUIRED 
-                           majorversion CDATA #REQUIRED 
-                           minorversion CDATA #REQUIRED 
+   <!ATTLIST specification label CDATA #REQUIRED
+                           majorversion CDATA #REQUIRED
+                           minorversion CDATA #REQUIRED
                            microversion CDATA #REQUIRED>
 
    <!ELEMENT title (#PCDATA|jvmti|tm)*>
@@ -41,13 +41,13 @@
    <!ELEMENT functionsection (intro*, category*)>
    <!ATTLIST functionsection label CDATA #REQUIRED>
 
-   <!ELEMENT category ((intro|typedef|uniontypedef|capabilitiestypedef)*, 
+   <!ELEMENT category ((intro|typedef|uniontypedef|capabilitiestypedef)*,
                           (function|callback|elide)*)>
    <!ATTLIST category id CDATA #REQUIRED
                       label CDATA #REQUIRED>
 
    <!ELEMENT function (synopsis, typedef*, description?, origin,
-                         (capabilities|eventcapabilities), 
+                         (capabilities|eventcapabilities),
                          parameters, errors)>
    <!ATTLIST function id CDATA #REQUIRED
                       num CDATA #REQUIRED
@@ -77,7 +77,7 @@
                      since CDATA "1.0">
 
    <!ELEMENT field ((jmethodID|jfieldID|jframeID|jrawMonitorID|jclass|jthread|jthreadGroup|jobject|
-                     jvalue|enum|jint|jlong|jfloat|jdouble|jlocation|jboolean|char|uchar|size_t|void|allocfieldbuf|inptr|inbuf|outbuf|vmbuf|ptrtype|struct), 
+                     jvalue|enum|jint|jlong|jfloat|jdouble|jlocation|jboolean|char|uchar|size_t|void|allocfieldbuf|inptr|inbuf|outbuf|vmbuf|ptrtype|struct),
                     description)>
    <!ATTLIST field id CDATA #REQUIRED>
 
@@ -107,7 +107,7 @@
 
    <!ELEMENT param ((jmethodID|jfieldID|jframeID|jrawMonitorID|jclass|jthread|jthreadGroup|jobject|
                      jvalue|enum|jint|jlong|jfloat|jdouble|jlocation|jboolean|char|uchar|size_t|void|varargs|struct|ptrtype|
-                     outptr|allocbuf|allocallocbuf|inptr|inbuf|outbuf|vmbuf|agentbuf), 
+                     outptr|allocbuf|allocallocbuf|inptr|inbuf|outbuf|vmbuf|agentbuf),
                     description)>
    <!ATTLIST param id CDATA #REQUIRED>
 
@@ -292,16 +292,16 @@
    <!ATTLIST eventphaselist phase (onload|start|live|any) #REQUIRED>
 
    <!ELEMENT issue ANY>
-   
+
    <!ELEMENT rationale ANY>
-   
+
    <!ELEMENT todo ANY>
-   
+
    <!ELEMENT origin (#PCDATA)*>
 
    <!ELEMENT elide (intro|function|callback|event)*>
    <!ATTLIST elide why CDATA #IMPLIED>
-   
+
    <!ELEMENT constants (constant*)>
    <!ATTLIST constants id CDATA #REQUIRED
                        label CDATA #REQUIRED
@@ -361,11 +361,11 @@
   <title subtitle="Version">
     <tm>JVM</tm> Tool Interface
   </title>
-  
+
   <intro id="whatIs" label="What is the JVM Tool Interface?">
-    The <tm>JVM</tm> Tool Interface (<jvmti/>) 
-    is a programming interface used by development and monitoring tools. 
-    It provides both a way to inspect the state and 
+    The <tm>JVM</tm> Tool Interface (<jvmti/>)
+    is a programming interface used by development and monitoring tools.
+    It provides both a way to inspect the state and
     to control the execution of applications running in the
     <tm>Java</tm> virtual machine (VM).
     <p/>
@@ -376,21 +376,21 @@
     <jvmti/> may not be available in all implementations of the <tm>Java</tm> virtual
     machine.
     <p/>
-    <jvmti/> is a two-way interface. 
+    <jvmti/> is a two-way interface.
     A client of <jvmti/>, hereafter called an <i>agent</i>,
     can be notified of
-    interesting occurrences through <internallink id="EventSection">events</internallink>. 
+    interesting occurrences through <internallink id="EventSection">events</internallink>.
     <jvmti/>
-    can query and control the application through many 
-    <internallink id="FunctionSection">functions</internallink>, 
-    either in response to events or 
+    can query and control the application through many
+    <internallink id="FunctionSection">functions</internallink>,
+    either in response to events or
     independent of them.
     <p/>
-    Agents run in the same process with and communicate directly with 
+    Agents run in the same process with and communicate directly with
     the virtual machine executing
     the application being examined.  This communication is
     through a native interface (<jvmti/>). The native in-process interface allows
-    maximal control with minimal intrusion on the part of a tool. 
+    maximal control with minimal intrusion on the part of a tool.
     Typically, agents are relatively compact. They can be controlled
     by a separate process which implements the bulk of a tool's
     function without interfering with the target application's normal execution.
@@ -400,12 +400,12 @@
     Tools can be written directly to <jvmti/> or indirectly
     through higher level interfaces.
     The Java Platform Debugger Architecture includes <jvmti/>, but also
-    contains higher-level, out-of-process debugger interfaces. The higher-level 
-    interfaces are more appropriate than <jvmti/> for many tools. 
-    For more information on the Java Platform Debugger Architecture, 
-    see the 
-    <externallink id="docs/technotes/guides/jpda/architecture.html">Java 
-      Platform Debugger Architecture website</externallink>. 
+    contains higher-level, out-of-process debugger interfaces. The higher-level
+    interfaces are more appropriate than <jvmti/> for many tools.
+    For more information on the Java Platform Debugger Architecture,
+    see the
+    <externallink id="docs/technotes/guides/jpda/architecture.html">Java
+      Platform Debugger Architecture website</externallink>.
   </intro>
 
   <intro id="writingAgents" label="Writing Agents">
@@ -424,16 +424,16 @@
   </intro>
 
   <intro id="deployingAgents" label="Deploying Agents">
-    An agent is deployed in a platform specific manner but is typically the 
-    platform equivalent of a dynamic library. On the <tm>Windows</tm> operating 
-    system, for example, an agent library is a "Dynamic Linked Library" (DLL). 
+    An agent is deployed in a platform specific manner but is typically the
+    platform equivalent of a dynamic library. On the <tm>Windows</tm> operating
+    system, for example, an agent library is a "Dynamic Linked Library" (DLL).
     On the <tm>Solaris</tm> Operating Environment, an agent library is a shared
     object (<code>.so</code> file).
     <p/>
 
     An agent may be started at VM startup by specifying the agent library
     name using a <internallink id="starting">command line option</internallink>.
-    Some implementations may support a mechanism to <internallink id="onattach"> 
+    Some implementations may support a mechanism to <internallink id="onattach">
     start agents</internallink> in the live <functionlink id="GetPhase">phase</functionlink>.
     The details of how this is initiated are implementation specific.
   </intro>
@@ -460,7 +460,7 @@
       a function is exported, at the same point during VM execution as it would
       have called the dynamic entry point Agent_OnUnLoad. A statically loaded
       agent cannot be unloaded. The Agent_OnUnload_L function will still be
-      called to do any other agent shutdown related tasks. 
+      called to do any other agent shutdown related tasks.
       If a <i>statically linked</i> agent L exports a function called
       Agent_OnUnLoad_L and a function called Agent_OnUnLoad, the Agent_OnUnLoad
       function will be ignored.
@@ -472,19 +472,19 @@
       Agent_OnAttach_L and a function called Agent_OnAttach, the Agent_OnAttach
       function will be ignored.
 </intro>
-  
+
   <intro id="starting" label="Agent Command Line Options">
     The term "command-line option" is used below to
     mean options supplied in the <code>JavaVMInitArgs</code> argument
     to the <code>JNI_CreateJavaVM</code> function of the JNI
     Invocation API.
     <p/>
-    One of the two following 
-    command-line options is used on VM startup to 
+    One of the two following
+    command-line options is used on VM startup to
     properly load and run agents.
-    These arguments identify the library containing 
+    These arguments identify the library containing
     the agent as well as an options
-    string to be passed in at startup. 
+    string to be passed in at startup.
     <dl>
       <dt><code>-agentlib:</code><i>&lt;agent-lib-name&gt;</i><code>=</code><i>&lt;options&gt;</i></dt>
       <dd>
@@ -494,10 +494,10 @@
 	Typically, the <i>&lt;agent-lib-name&gt;</i> is expanded to an
 	operating system specific file name.
 	The <i>&lt;options&gt;</i> will be passed to the agent on start-up.
-	For example, if the option 
-	<code>-agentlib:foo=opt1,opt2</code> is specified, the VM will attempt to 
+	For example, if the option
+	<code>-agentlib:foo=opt1,opt2</code> is specified, the VM will attempt to
 	load the shared library <code>foo.dll</code> from the system <code>PATH</code>
-        under <tm>Windows</tm> or <code>libfoo.so</code> from the 
+        under <tm>Windows</tm> or <code>libfoo.so</code> from the
 	<code>LD_LIBRARY_PATH</code> under the <tm>Solaris</tm> operating
         environment.
         If the agent library is statically linked into the executable
@@ -510,8 +510,8 @@
 	to load the library.
 	No library name expansion will occur.
 	The <i>&lt;options&gt;</i> will be passed to the agent on start-up.
-	For example, if the option 
-	<code>-agentpath:c:\myLibs\foo.dll=opt1,opt2</code> is specified, the VM will attempt to 
+	For example, if the option
+	<code>-agentpath:c:\myLibs\foo.dll=opt1,opt2</code> is specified, the VM will attempt to
 	load the shared library <code>c:\myLibs\foo.dll</code>. If the agent
         library is statically linked into the executable
         then no actual loading takes place.
@@ -523,13 +523,13 @@
     in the library will be invoked. If the agent library is statically linked
     into the executable then the system will attempt to invoke the
     <code>Agent_OnLoad_&lt;agent-lib-name&gt;</code> entry point where
-    &lt;agent-lib-name&gt; is the basename of the 
+    &lt;agent-lib-name&gt; is the basename of the
     agent. In the above example <code>-agentpath:c:\myLibs\foo.dll=opt1,opt2</code>,
     the system will attempt to find and call the <code>Agent_OnLoad_foo</code> start-up routine.
     <p/>
     Libraries loaded with <code>-agentlib:</code> or <code>-agentpath:</code>
     will be searched for JNI native method implementations to facilitate the
-    use of Java programming language code in tools, as is needed for 
+    use of Java programming language code in tools, as is needed for
     <internallink id="bci">bytecode instrumentation</internallink>.
     <p/>
     The agent libraries will be searched after all other libraries have been
@@ -537,11 +537,11 @@
     implementations of non-agent methods can use the
     <eventlink id="NativeMethodBind">NativeMethodBind event</eventlink>).
     <p/>
-    These switches do the above and nothing more - they do not change the 
-    state of the VM or <jvmti/>.  No command line options are needed 
-    to enable <jvmti/> 
+    These switches do the above and nothing more - they do not change the
+    state of the VM or <jvmti/>.  No command line options are needed
+    to enable <jvmti/>
     or aspects of <jvmti/>, this is handled programmatically
-    by the use of 
+    by the use of
     <internallink id="capability">capabilities</internallink>.
   </intro>
 
@@ -557,29 +557,29 @@
     <internallink id="onattach"><code>Agent_OnAttach</code></internallink>
     or <internallink id="onattach"><code>Agent_OnAttach_L</code></internallink>
     for statically linked agents will be invoked.
-    Exactly one call to a start-up function is made per agent.  
+    Exactly one call to a start-up function is made per agent.
   </intro>
 
   <intro id="onload" label="Agent Start-Up (OnLoad phase)">
     If an agent is started during the <code>OnLoad</code> phase then its
     agent library must export a start-up function with the following prototype:
     <example>
-JNIEXPORT jint JNICALL 
+JNIEXPORT jint JNICALL
 Agent_OnLoad(JavaVM *vm, char *options, void *reserved)</example>
     Or for a statically linked agent named 'L':
     <example>
-JNIEXPORT jint JNICALL 
+JNIEXPORT jint JNICALL
 Agent_OnLoad_L(JavaVM *vm, char *options, void *reserved)</example>
 
-    The VM will start the agent by calling this function.  
+    The VM will start the agent by calling this function.
     It will be called early enough in VM initialization that:
     <ul>
       <li><functionlink id="SetSystemProperty">system properties</functionlink>
 	may be set before they have been used in the start-up of the VM</li>
-      <li>the full set of 
+      <li>the full set of
 	<internallink id="capability">capabilities</internallink>
 	is still available (note that capabilities that configure the VM
-	may only be available at this time--see the 
+	may only be available at this time--see the
 	<internallink id="capability">Capability function section</internallink>)</li>
       <li>no bytecodes have executed</li>
       <li>no classes have been loaded</li>
@@ -588,13 +588,13 @@
     <p/>
     The VM will call the <code>Agent_OnLoad</code> or
     <code>Agent_OnLoad_&lt;agent-lib-name&gt;</code> function with
-    <i>&lt;options&gt;</i> as the second argument - 
+    <i>&lt;options&gt;</i> as the second argument -
     that is, using the command-line option examples,
-    <code>"opt1,opt2"</code> will be passed to the <code>char *options</code> 
+    <code>"opt1,opt2"</code> will be passed to the <code>char *options</code>
     argument of <code>Agent_OnLoad</code>.
     The <code>options</code> argument is encoded as a
     <internallink id="mUTF">modified UTF-8</internallink> string.
-    If <i>=&lt;options&gt;</i> is not specified, 
+    If <i>=&lt;options&gt;</i> is not specified,
     a zero length string is passed to <code>options</code>.
     The lifespan of the <code>options</code> string is the
     <code>Agent_OnLoad</code> or <code>Agent_OnLoad_&lt;agent-lib-name&gt;</code>
@@ -602,26 +602,26 @@
     be copied.
     The period between when <code>Agent_OnLoad</code> is called and when it
     returns is called the <i>OnLoad phase</i>.
-    Since the VM is not initialized during the OnLoad 
+    Since the VM is not initialized during the OnLoad
     <functionlink id="GetPhase">phase</functionlink>,
-    the set of allowed operations 
+    the set of allowed operations
     inside <code>Agent_OnLoad</code> is restricted (see the function descriptions for the
-    functionality available at this time). 
-    The agent can safely process the options and set 
-    event callbacks with <functionlink id="SetEventCallbacks"></functionlink>. Once  
-    the VM initialization event is received 
-    (that is, the <eventlink id="VMInit">VMInit</eventlink> 
+    functionality available at this time).
+    The agent can safely process the options and set
+    event callbacks with <functionlink id="SetEventCallbacks"></functionlink>. Once
+    the VM initialization event is received
+    (that is, the <eventlink id="VMInit">VMInit</eventlink>
     callback is invoked), the agent
     can complete its initialization.
     <rationale>
       Early startup is required so that agents can set the desired capabilities,
       many of which must be set before the VM is initialized.
-      In JVMDI, the -Xdebug command-line option provided 
-      very coarse-grain control of capabilities. 
+      In JVMDI, the -Xdebug command-line option provided
+      very coarse-grain control of capabilities.
       JVMPI implementations use various tricks to provide a single "JVMPI on" switch.
-      No reasonable command-line 
+      No reasonable command-line
       option could provide the fine-grain of control required to balance needed capabilities vs
-      performance impact.  
+      performance impact.
       Early startup is also needed so that agents can control the execution
       environment - modifying the file system and system properties to install
       their functionality.
@@ -631,75 +631,75 @@
     <code>Agent_OnLoad_&lt;agent-lib-name&gt;</code> is used to indicate an error.
     Any value other than zero indicates an error and causes termination of the VM.
   </intro>
-  
+
   <intro id="onattach" label="Agent Start-Up (Live phase)">
-    A VM may support a mechanism that allows agents to be started in the VM during the live 
+    A VM may support a mechanism that allows agents to be started in the VM during the live
     <functionlink id="GetPhase">phase</functionlink>. The details of how this is supported,
-    are implementation specific. For example, a tool may use some platform specific mechanism, 
+    are implementation specific. For example, a tool may use some platform specific mechanism,
     or implementation specific API, to attach to the running VM, and request it start a given
     agent.
     <p/>
     If an agent is started during the live phase then its agent library
-    must export a start-up function 
+    must export a start-up function
     with the following prototype:
     <example>
-JNIEXPORT jint JNICALL 
+JNIEXPORT jint JNICALL
 Agent_OnAttach(JavaVM* vm, char *options, void *reserved)</example>
 Or for a statically linked agent named 'L':
     <example>
-JNIEXPORT jint JNICALL 
+JNIEXPORT jint JNICALL
 Agent_OnAttach_L(JavaVM* vm, char *options, void *reserved)</example>
 
-    <p/>         
-    The VM will start the agent by calling this function.  
+    <p/>
+    The VM will start the agent by calling this function.
     It will be called in the context of a thread
     that is attached to the VM. The first argument <i>&lt;vm&gt;</i> is the Java VM.
     The <i>&lt;options&gt;</i> argument is the startup options provided to the agent.
     <i>&lt;options&gt;</i> is encoded as a <internallink id="mUTF">modified UTF-8
     </internallink> string.
-    If startup options were not provided, a zero length string is passed to 
-    <code>options</code>. The lifespan of the <code>options</code> string is the 
+    If startup options were not provided, a zero length string is passed to
+    <code>options</code>. The lifespan of the <code>options</code> string is the
     <code>Agent_OnAttach</code> or <code>Agent_OnAttach_&lt;agent-lib-name&gt;</code> call.
     If needed beyond this time the string or parts of the string must be copied.
     <p/>
-    Note that some <internallink id="capability">capabilities</internallink> 
+    Note that some <internallink id="capability">capabilities</internallink>
     may not be available in the live phase.
     <p/>
     The <code>Agent_OnAttach</code> or <code>Agent_OnAttach_&lt;agent-lib-name
     &gt;</code> function initializes the agent and returns a value
-    to the VM to indicate if an error occurred. Any value other than zero indicates an error. 
-    An error does not cause the VM to terminate. Instead the VM ignores the error, or takes 
-    some implementation specific action -- for example it might print an error to standard error, 
+    to the VM to indicate if an error occurred. Any value other than zero indicates an error.
+    An error does not cause the VM to terminate. Instead the VM ignores the error, or takes
+    some implementation specific action -- for example it might print an error to standard error,
     or record the error in a system log.
   </intro>
 
   <intro id="onunload" label="Agent Shutdown">
-    The library may optionally export a 
+    The library may optionally export a
     shutdown function with the following prototype:
     <example>
-JNIEXPORT void JNICALL 
+JNIEXPORT void JNICALL
 Agent_OnUnload(JavaVM *vm)</example>
     Or for a statically linked agent named 'L':
     <example>
-JNIEXPORT void JNICALL 
+JNIEXPORT void JNICALL
 Agent_OnUnload_L(JavaVM *vm)</example>
 
     This function will be called by the VM when the library is about to be unloaded.
     The library will be unloaded (unless it is statically linked into the
-    executable) and this function will be called if some platform specific 
+    executable) and this function will be called if some platform specific
     mechanism causes the unload (an unload mechanism is not specified in this document)
-    or the library is (in effect) unloaded by the termination of the VM whether through 
+    or the library is (in effect) unloaded by the termination of the VM whether through
     normal termination or VM failure, including start-up failure.
     Uncontrolled shutdown is, of couse, an exception to this rule.
-    Note the distinction between this function and the 
+    Note the distinction between this function and the
     <eventlink id="VMDeath">VM Death event</eventlink>: for the VM Death event
-    to be sent, the VM must have run at least to the point of initialization and a valid 
+    to be sent, the VM must have run at least to the point of initialization and a valid
     <jvmti/> environment must exist which has set a callback for VMDeath
     and enabled the event.
     None of these are required for <code>Agent_OnUnload</code> or
     <code>Agent_OnUnload_&lt;agent-lib-name&gt;</code> and this function
     is also called if the library is unloaded for other reasons.
-    In the case that a VM Death event is sent, it will be sent before this 
+    In the case that a VM Death event is sent, it will be sent before this
     function is called (assuming this function is called due to VM termination).
     This function can be used to clean-up resources allocated by the agent.
   </intro>
@@ -709,17 +709,17 @@
     or simply VMs launched deep within scripts, a <code>JAVA_TOOL_OPTIONS</code> variable is
     provided so that agents may be launched in these cases.
     <p/>
-    Platforms which support environment variables or other named strings, may support the 
-    <code>JAVA_TOOL_OPTIONS</code> variable.  This variable will be broken into options at white-space 
-    boundaries.  White-space characters include space, tab, carriage-return, new-line, 
-    vertical-tab, and form-feed.  Sequences of white-space characters are considered 
-    equivalent to a single white-space character.  No white-space is included in the options 
+    Platforms which support environment variables or other named strings, may support the
+    <code>JAVA_TOOL_OPTIONS</code> variable.  This variable will be broken into options at white-space
+    boundaries.  White-space characters include space, tab, carriage-return, new-line,
+    vertical-tab, and form-feed.  Sequences of white-space characters are considered
+    equivalent to a single white-space character.  No white-space is included in the options
     unless quoted.  Quoting is as follows:
     <ul>
-        <li>All characters enclosed between a pair of single quote marks (''), except a single 
+        <li>All characters enclosed between a pair of single quote marks (''), except a single
         quote, are quoted.</li>
         <li>Double quote characters have no special meaning inside a pair of single quote marks.</li>
-        <li>All characters enclosed between a pair of double quote marks (""), except a double 
+        <li>All characters enclosed between a pair of double quote marks (""), except a double
         quote, are quoted.</li>
         <li>Single quote characters have no special meaning inside a pair of double quote marks.</li>
         <li>A quoted part can start or end anywhere in the variable.</li>
@@ -727,24 +727,24 @@
         the option like any other character and do not mark white-space boundaries.</li>
         <li>The pair of quote marks is not included in the option.</li>
     </ul>
-    <code>JNI_CreateJavaVM</code> (in the JNI Invocation API) will prepend these options to the options supplied 
-    in its <code>JavaVMInitArgs</code> argument. Platforms may disable this feature in cases where security is 
-    a concern; for example, the Reference Implementation disables this feature on Unix systems when 
-    the effective user or group ID differs from the real ID.  
-    This feature is intended to support the initialization of tools -- specifically including the 
-    launching of native or Java programming language agents.  Multiple tools may wish to use this 
-    feature, so the variable should not be overwritten, instead,  options should be appended to 
-    the variable.  Note that since the variable is processed at the time of the JNI Invocation 
+    <code>JNI_CreateJavaVM</code> (in the JNI Invocation API) will prepend these options to the options supplied
+    in its <code>JavaVMInitArgs</code> argument. Platforms may disable this feature in cases where security is
+    a concern; for example, the Reference Implementation disables this feature on Unix systems when
+    the effective user or group ID differs from the real ID.
+    This feature is intended to support the initialization of tools -- specifically including the
+    launching of native or Java programming language agents.  Multiple tools may wish to use this
+    feature, so the variable should not be overwritten, instead,  options should be appended to
+    the variable.  Note that since the variable is processed at the time of the JNI Invocation
     API create VM call, options processed by a launcher (e.g., VM selection options) will not be handled.
   </intro>
 
   <intro id="environments" label="Environments">
     The <jvmti/> specification supports the use of multiple simultaneous
     <jvmti/> agents.
-    Each agent has its own <jvmti/> environment.  
+    Each agent has its own <jvmti/> environment.
     That is, the <jvmti/> state is
     separate for each agent - changes to one environment do not affect the
-    others.  The state of a <jvmti/> 
+    others.  The state of a <jvmti/>
     environment includes:
     <ul>
       <li><functionlink id="SetEventCallbacks">the event callbacks</functionlink></li>
@@ -752,7 +752,7 @@
       <li><internallink id="capability">the capabilities</internallink></li>
       <li><internallink id="memory">the memory allocation/deallocation hooks</internallink></li>
     </ul>
-    Although their <jvmti/> state 
+    Although their <jvmti/> state
     is separate, agents inspect and modify the shared state
     of the VM, they also share the native environment in which they execute.
     As such, an agent can perturb the results of other agents or cause them
@@ -761,30 +761,30 @@
     of preventing destructive interactions between agents. Techniques to reduce
     the likelihood of these occurrences are beyond the scope of this document.
     <p/>
-    An agent creates a <jvmti/> environment 
-    by passing a <jvmti/> version 
-    as the interface ID to the JNI Invocation API function 
-    <externallink id="docs/technotes/guides/jni/spec/invocation.html#GetEnv">
+    An agent creates a <jvmti/> environment
+    by passing a <jvmti/> version
+    as the interface ID to the JNI Invocation API function
+    <externallink id="jni/invocation.html#getenv">
       <code>GetEnv</code></externallink>.
     See <internallink id="jvmtiEnvAccess">Accessing <jvmti/> Functions</internallink>
-    for more details on the creation and use of 
+    for more details on the creation and use of
     <jvmti/> environments.
-    Typically, <jvmti/> environments are created by calling <code>GetEnv</code> from 
+    Typically, <jvmti/> environments are created by calling <code>GetEnv</code> from
     <internallink id="onload"><code>Agent_OnLoad</code></internallink>.
   </intro>
 
   <intro id="bci" label="Bytecode Instrumentation">
     This interface does not include some events that one might expect in an interface with
     profiling support.  Some examples include object allocation events and full speed
-    method enter and exit events.  The interface instead provides support for 
+    method enter and exit events.  The interface instead provides support for
     <i>bytecode instrumentation</i>, the ability to alter the Java virtual machine
     bytecode instructions which comprise the target program.  Typically, these alterations
     are to add "events" to the code of a method - for example, to add, at the beginning of a method,
-    a call to <code>MyProfiler.methodEntered()</code>.  
+    a call to <code>MyProfiler.methodEntered()</code>.
     Since the changes are purely additive, they do not modify application
     state or behavior.
     Because the inserted agent code is standard bytecodes, the VM can run at full speed,
-    optimizing not only the target program but also the instrumentation.  If the 
+    optimizing not only the target program but also the instrumentation.  If the
     instrumentation does not involve switching from bytecode execution, no expensive
     state transitions are needed.  The result is high performance events.
     This approach also provides complete control to the agent: instrumentation can be
@@ -792,14 +792,14 @@
     can be conditional.  Instrumentation can run entirely in Java programming language
     code or can call into the native agent.  Instrumentation can simply maintain
     counters or can statistically sample events.
-    <p/>  
+    <p/>
     Instrumentation can be inserted in one of three ways:
     <ul>
       <li>
 	Static Instrumentation: The class file is instrumented before it
 	is loaded into the VM - for example, by creating a duplicate directory of
 	<code>*.class</code> files which have been modified to add the instrumentation.
-	This method is extremely awkward and, in general, an agent cannot know 
+	This method is extremely awkward and, in general, an agent cannot know
 	the origin of the class files which will be loaded.
       </li>
       <li>
@@ -817,21 +817,21 @@
 	<functionlink id="RetransformClasses"/> function.
 	Classes can be modified multiple times and can be returned to their
 	original state.
-	The mechanism allows instrumentation which changes during the 
+	The mechanism allows instrumentation which changes during the
 	course of execution.
       </li>
     </ul>
-    <p/>  
+    <p/>
     The class modification functionality provided in this interface
     is intended to provide a mechanism for instrumentation
     (the <eventlink id="ClassFileLoadHook"/> event
     and the <functionlink id="RetransformClasses"/> function)
     and, during development, for fix-and-continue debugging
     (the <functionlink id="RedefineClasses"/> function).
-    <p/>  
-    Care must be taken to avoid perturbing dependencies, especially when 
+    <p/>
+    Care must be taken to avoid perturbing dependencies, especially when
     instrumenting core classes.  For example, an approach to getting notification
-    of every object allocation is to instrument the constructor on 
+    of every object allocation is to instrument the constructor on
     <code>Object</code>.  Assuming that the constructor is initially
     empty, the constructor could be changed to:
     <example>
@@ -839,15 +839,15 @@
         MyProfiler.allocationTracker(this);
       }
     </example>
-    However, if this change was made using the 
+    However, if this change was made using the
     <eventlink id="ClassFileLoadHook"/>
-    event then this might impact a typical VM as follows: 
+    event then this might impact a typical VM as follows:
     the first created object will call the constructor causing a class load of
     <code>MyProfiler</code>; which will then cause
     object creation, and since <code>MyProfiler</code> isn't loaded yet,
     infinite recursion; resulting in a stack overflow.  A refinement of this
     would be to delay invoking the tracking method until a safe time.  For
-    example, <code>trackAllocations</code> could be set in the 
+    example, <code>trackAllocations</code> could be set in the
     handler for the <code>VMInit</code> event.
     <example>
       static boolean trackAllocations = false;
@@ -881,17 +881,17 @@
   <intro id="mUTF" label="Modified UTF-8 String Encoding">
     <jvmti/> uses modified UTF-8 to encode character strings.
     This is the same encoding used by JNI.
-    Modified UTF-8 differs 
-    from standard UTF-8 in the representation of supplementary characters 
+    Modified UTF-8 differs
+    from standard UTF-8 in the representation of supplementary characters
     and of the null character. See the
-    <externallink id="docs/technotes/guides/jni/spec/types.html#modified_utf_8_strings">
+    <externallink id="jni/types.html#modified-utf-8-strings">
       Modified UTF-8 Strings</externallink>
     section of the JNI specification for details.
   </intro>
 
   <intro id="context" label="Specification Context">
     Since this interface provides access to the state of applications running in the
-    Java virtual machine; 
+    Java virtual machine;
     terminology refers to the Java platform and not the native
     platform (unless stated otherwise).  For example:
     <ul>
@@ -903,20 +903,20 @@
     </ul>
     <p/>
     Sun, Sun Microsystems, the Sun logo, Java, and JVM
-    are trademarks or registered trademarks of Oracle 
+    are trademarks or registered trademarks of Oracle
     and/or its affiliates, in the U.S. and other countries.
   </intro>
 
 
 <functionsection label="Functions">
   <intro id="jvmtiEnvAccess" label="Accessing Functions">
-    Native code accesses <jvmti/> features 
-    by calling <jvmti/> functions. 
+    Native code accesses <jvmti/> features
+    by calling <jvmti/> functions.
     Access to <jvmti/> functions is by use of an interface pointer
-    in the same manner as 
-    <externallink id="docs/technotes/guides/jni/spec/design.html">Java 
+    in the same manner as
+    <externallink id="jni/design.html">Java
       Native Interface (JNI) functions</externallink> are accessed.
-    The <jvmti/> interface pointer is called the 
+    The <jvmti/> interface pointer is called the
     <i>environment pointer</i>.
     <p/>
     An environment pointer is a pointer to an environment and has
@@ -924,8 +924,8 @@
     An environment has information about its <jvmti/> connection.
     The first value in the environment is a pointer to the function table.
     The function table is an array of pointers to <jvmti/> functions.
-    Every function pointer is at a predefined offset inside the 
-    array. 
+    Every function pointer is at a predefined offset inside the
+    array.
     <p/>
     When used from the C language:
     double indirection is used to access the functions;
@@ -945,7 +945,7 @@
 ...
 jvmtiError err = jvmti->GetLoadedClasses(&amp;class_count, &amp;classes);
     </example>
-    Unless otherwise stated, all examples and declarations in this 
+    Unless otherwise stated, all examples and declarations in this
     specification use the C language.
     <p/>
     A <jvmti/> environment can be obtained through the JNI Invocation API
@@ -955,24 +955,24 @@
 ...
 (*jvm)->GetEnv(jvm, &amp;jvmti, JVMTI_VERSION_1_0);
     </example>
-    Each call to <code>GetEnv</code> 
+    Each call to <code>GetEnv</code>
     creates a new <jvmti/> connection and thus
-    a new <jvmti/> environment. 
+    a new <jvmti/> environment.
     The <code>version</code> argument of <code>GetEnv</code> must be
     a <jvmti/> version.
     The returned environment may have a different version than the
     requested version but the returned environment must be compatible.
-    <code>GetEnv</code> will return <code>JNI_EVERSION</code> if a 
+    <code>GetEnv</code> will return <code>JNI_EVERSION</code> if a
     compatible version is not available, if <jvmti/> is not supported or
     <jvmti/> is not supported in the current VM configuration.
     Other interfaces may be added for creating <jvmti/> environments
     in specific contexts.
     Each environment has its own state (for example,
-    <functionlink id="SetEventNotificationMode">desired events</functionlink>, 
-    <functionlink id="SetEventCallbacks">event handling functions</functionlink>, and 
-    <functionlink id="AddCapabilities">capabilities</functionlink>). 
-    An environment is released with 
-    <functionlink id="DisposeEnvironment"></functionlink>. 
+    <functionlink id="SetEventNotificationMode">desired events</functionlink>,
+    <functionlink id="SetEventCallbacks">event handling functions</functionlink>, and
+    <functionlink id="AddCapabilities">capabilities</functionlink>).
+    An environment is released with
+    <functionlink id="DisposeEnvironment"></functionlink>.
     Thus, unlike JNI which has one environment per thread, <jvmti/> environments work
     across threads and are created dynamically.
   </intro>
@@ -980,12 +980,12 @@
   <intro id="functionReturn" label="Function Return Values">
     <jvmti/> functions always return an
     <internallink id="ErrorSection">error code</internallink> via the
-    <datalink id="jvmtiError"/> function return value. 
+    <datalink id="jvmtiError"/> function return value.
     Some functions can return additional
-    values through pointers provided by the calling function. 
+    values through pointers provided by the calling function.
     In some cases, <jvmti/> functions allocate memory that your program must
     explicitly deallocate. This is indicated in the individual <jvmti/>
-    function descriptions.  Empty lists, arrays, sequences, etc are 
+    function descriptions.  Empty lists, arrays, sequences, etc are
     returned as <code>NULL</code>.
     <p/>
     In the event that the <jvmti/> function encounters
@@ -996,26 +996,26 @@
   </intro>
 
 <intro id="refs" label="Managing JNI Object References">
-    <jvmti/> functions identify objects with JNI references 
+    <jvmti/> functions identify objects with JNI references
     (<datalink id="jobject"/> and <datalink id="jclass"/>)
     and their derivatives
     (<datalink id="jthread"/> and <datalink id="jthreadGroup"/>).
-    References passed to 
-    <jvmti/> functions can be either global or local, but they must be 
-    strong references. All references returned by <jvmti/> functions are 
-    local references--these local references are created 
+    References passed to
+    <jvmti/> functions can be either global or local, but they must be
+    strong references. All references returned by <jvmti/> functions are
+    local references--these local references are created
     during the <jvmti/> call.
-    Local references are a resource that must be managed (see the 
-    <externallink id="docs/technotes/guides/jni/spec/functions.html#local_references">
-      JNI Documentation</externallink>).  
+    Local references are a resource that must be managed (see the
+    <externallink id="jni/functions.html#local-references">
+      JNI Documentation</externallink>).
     When threads return from native code all local references
     are freed.  Note that some threads, including typical
     agent threads, will never return from native code.
-    A thread is ensured the ability to create sixteen local 
+    A thread is ensured the ability to create sixteen local
     references without the need for any explicit management.
     For threads executing a limited number of <jvmti/> calls before
     returning from native code
-    (for example, threads processing events), 
+    (for example, threads processing events),
     it may be determined that no explicit management
     is needed.
     However, long running agent threads will need explicit
@@ -1023,7 +1023,7 @@
     <code>PushLocalFrame</code> and <code>PopLocalFrame</code>.
     Conversely, to preserve references beyond the
     return from native code, they must be converted to global references.
-    These rules do not apply to <datalink id="jmethodID"/> and <datalink id="jfieldID"/> 
+    These rules do not apply to <datalink id="jmethodID"/> and <datalink id="jfieldID"/>
     as they are not <datalink id="jobject"/>s.
 </intro>
 
@@ -1035,21 +1035,21 @@
     </intro>
 
     <intro id="functionsExceptions" label="Exceptions and Functions">
-      <jvmti/> functions never throw exceptions; error conditions are 
-      communicated via the 
+      <jvmti/> functions never throw exceptions; error conditions are
+      communicated via the
       <internallink id="functionReturn">function return value</internallink>.
-      Any existing exception state is preserved across a call to a 
+      Any existing exception state is preserved across a call to a
       <jvmti/> function.
       See the
-      <externallink 
-        id="docs/technotes/guides/jni/spec/design.html#java_exceptions"
+      <externallink
+        id="jni/design.html#java-exceptions"
              >Java Exceptions</externallink>
       section of the JNI specification for information on handling exceptions.
     </intro>
 
   <category id="memory" label="Memory Management">
     <intro>
-      These functions provide for the allocation and deallocation of 
+      These functions provide for the allocation and deallocation of
       memory used by <jvmti/> functionality and can be used to provide
       working memory for agents.
       Memory managed by <jvmti/> is not compatible with other memory
@@ -1059,7 +1059,7 @@
     <function id="Allocate" jkernel="yes" phase="any" callbacksafe="safe" impl="notrace" num="46">
       <synopsis>Allocate</synopsis>
       <description>
-	Allocate an area of memory through the <jvmti/> allocator. 
+	Allocate an area of memory through the <jvmti/> allocator.
         The allocated
 	memory should be freed with <functionlink id="Deallocate"></functionlink>.
       </description>
@@ -1097,9 +1097,9 @@
     <function id="Deallocate" jkernel="yes" phase="any" callbacksafe="safe" impl="notrace" num="47">
       <synopsis>Deallocate</synopsis>
       <description>
-	Deallocate <code>mem</code>  using the <jvmti/> allocator. 
+	Deallocate <code>mem</code>  using the <jvmti/> allocator.
         This function should
-	be used to deallocate any memory allocated and returned 
+	be used to deallocate any memory allocated and returned
         by a <jvmti/> function
 	(including memory allocated with <functionlink id="Allocate"></functionlink>).
         All allocated memory must be deallocated
@@ -1143,60 +1143,60 @@
                     <li><i>Why not alive?</i>
                       <ul>
                         <li>New.</li>
-                        <li>Terminated (<datalink 
+                        <li>Terminated (<datalink
                             id="JVMTI_THREAD_STATE_TERMINATED"><code>JVMTI_THREAD_STATE_TERMINATED</code></datalink>)</li>
                       </ul>
                     </li>
                   </ul>
                 </li>
-                <li>Alive (<datalink 
+                <li>Alive (<datalink
                     id="JVMTI_THREAD_STATE_ALIVE"><code>JVMTI_THREAD_STATE_ALIVE</code></datalink>)
                   <ul type="circle">
                     <li><i>Suspended?</i>
                       <ul>
-                        <li>Suspended (<datalink 
+                        <li>Suspended (<datalink
                             id="JVMTI_THREAD_STATE_SUSPENDED"><code>JVMTI_THREAD_STATE_SUSPENDED</code></datalink>)</li>
                         <li>Not suspended</li>
                       </ul>
                     </li>
                     <li><i>Interrupted?</i>
                       <ul>
-                        <li>Interrupted (<datalink 
+                        <li>Interrupted (<datalink
                             id="JVMTI_THREAD_STATE_INTERRUPTED"><code>JVMTI_THREAD_STATE_INTERRUPTED</code></datalink>)</li>
                         <li>Not interrupted.</li>
                       </ul>
                     </li>
                     <li><i>In native?</i>
                       <ul>
-                        <li>In native code (<datalink 
+                        <li>In native code (<datalink
                             id="JVMTI_THREAD_STATE_IN_NATIVE"><code>JVMTI_THREAD_STATE_IN_NATIVE</code></datalink>)</li>
                         <li>In Java programming language code</li>
                       </ul>
                     </li>
                     <li><i>What alive state?</i>
                       <ul>
-                        <li>Runnable (<datalink 
+                        <li>Runnable (<datalink
                             id="JVMTI_THREAD_STATE_RUNNABLE"><code>JVMTI_THREAD_STATE_RUNNABLE</code></datalink>)</li>
-                        <li>Blocked (<datalink 
+                        <li>Blocked (<datalink
                             id="JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER"><code>JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER</code></datalink>)</li>
-                        <li>Waiting (<datalink 
+                        <li>Waiting (<datalink
                             id="JVMTI_THREAD_STATE_WAITING"><code>JVMTI_THREAD_STATE_WAITING</code></datalink>)
                           <ul type="circle">
                             <li><i>Timed wait?</i>
                               <ul>
-                                <li>Indefinite (<datalink 
+                                <li>Indefinite (<datalink
                                     id="JVMTI_THREAD_STATE_WAITING_INDEFINITELY"><code>JVMTI_THREAD_STATE_WAITING_INDEFINITELY</code></datalink></li>
-                                <li>Timed (<datalink 
+                                <li>Timed (<datalink
                                     id="JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT"><code>JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT</code></datalink>)</li>
                               </ul>
                             </li>
                             <li><i>Why waiting?</i>
                               <ul>
-                                <li>Object.wait (<datalink 
+                                <li>Object.wait (<datalink
                                     id="JVMTI_THREAD_STATE_IN_OBJECT_WAIT"><code>JVMTI_THREAD_STATE_IN_OBJECT_WAIT</code></datalink>)</li>
-                                <li>LockSupport.park (<datalink 
+                                <li>LockSupport.park (<datalink
                                     id="JVMTI_THREAD_STATE_PARKED"><code>JVMTI_THREAD_STATE_PARKED</code></datalink>)</li>
-                                <li>Sleeping (<datalink 
+                                <li>Sleeping (<datalink
                                     id="JVMTI_THREAD_STATE_SLEEPING"><code>JVMTI_THREAD_STATE_SLEEPING</code></datalink>)</li>
                               </ul>
                             </li>
@@ -1210,7 +1210,7 @@
             </li>
           </ul>
         <p/>
-	The answers are represented by the following bit vector. 
+	The answers are represented by the following bit vector.
 	<constants id="jvmtiThreadState" label="Thread State Flags" kind="bits">
 	  <constant id="JVMTI_THREAD_STATE_ALIVE" num="0x0001">
 	    Thread is alive. Zero if thread is new (not started) or terminated.
@@ -1223,7 +1223,7 @@
 	  </constant>
 	  <constant id="JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER" num="0x0400">
 	    Thread is waiting to enter a synchronization block/method or,
-            after an <code>Object.wait()</code>, waiting to re-enter a 
+            after an <code>Object.wait()</code>, waiting to re-enter a
             synchronization block/method.
 	  </constant>
 	  <constant id="JVMTI_THREAD_STATE_WAITING" num="0x0080">
@@ -1250,8 +1250,8 @@
 	  <constant id="JVMTI_THREAD_STATE_SUSPENDED" num="0x100000">
 	    Thread suspended.
 	    <code>java.lang.Thread.suspend()</code>
-	    or a <jvmti/> suspend function 
-            (such as <functionlink id="SuspendThread"></functionlink>) 
+	    or a <jvmti/> suspend function
+            (such as <functionlink id="SuspendThread"></functionlink>)
             has been called on the thread. If this bit
 	    is set, the other bits refer to the thread state before suspension.
 	  </constant>
@@ -1313,7 +1313,7 @@
         <b>Rules</b>
         <p/>
         There can be no more than one answer to a question, although there can be no
-        answer (because the answer is unknown, does not apply, or none of the answers is 
+        answer (because the answer is unknown, does not apply, or none of the answers is
         correct).  An answer is set only when the enclosing answers match.
         That is, no more than one of
           <ul type="circle">
@@ -1322,32 +1322,32 @@
               <li><code>JVMTI_THREAD_STATE_WAITING</code></li>
           </ul>
         can be set (a <tm>J2SE</tm> compliant implementation will always set
-        one of these if <code>JVMTI_THREAD_STATE_ALIVE</code> is set). 
-        And if any of these are set, the enclosing answer 
-        <code>JVMTI_THREAD_STATE_ALIVE</code> is set. 
+        one of these if <code>JVMTI_THREAD_STATE_ALIVE</code> is set).
+        And if any of these are set, the enclosing answer
+        <code>JVMTI_THREAD_STATE_ALIVE</code> is set.
         No more than one of
           <ul type="circle">
               <li><code>JVMTI_THREAD_STATE_WAITING_INDEFINITELY</code></li>
               <li><code>JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT</code></li>
           </ul>
         can be set (a <tm>J2SE</tm> compliant implementation will always set
-        one of these if <code>JVMTI_THREAD_STATE_WAITING</code> is set). 
-        And if either is set, the enclosing answers 
-        <code>JVMTI_THREAD_STATE_ALIVE</code> and 
-        <code>JVMTI_THREAD_STATE_WAITING</code> are set. 
+        one of these if <code>JVMTI_THREAD_STATE_WAITING</code> is set).
+        And if either is set, the enclosing answers
+        <code>JVMTI_THREAD_STATE_ALIVE</code> and
+        <code>JVMTI_THREAD_STATE_WAITING</code> are set.
         No more than one of
           <ul type="circle">
               <li><code>JVMTI_THREAD_STATE_IN_OBJECT_WAIT</code></li>
               <li><code>JVMTI_THREAD_STATE_PARKED</code></li>
               <li><code>JVMTI_THREAD_STATE_SLEEPING</code></li>
           </ul>
-        can be set. And if any of these is set, the enclosing answers 
-        <code>JVMTI_THREAD_STATE_ALIVE</code> and 
-        <code>JVMTI_THREAD_STATE_WAITING</code> are set. 
+        can be set. And if any of these is set, the enclosing answers
+        <code>JVMTI_THREAD_STATE_ALIVE</code> and
+        <code>JVMTI_THREAD_STATE_WAITING</code> are set.
         Also, if <code>JVMTI_THREAD_STATE_SLEEPING</code> is set,
         then <code>JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT</code> is set.
-        If a state <i>A</i> is implemented using the mechanism of 
-        state <i>B</i> then it is state <i>A</i> which 
+        If a state <i>A</i> is implemented using the mechanism of
+        state <i>B</i> then it is state <i>A</i> which
         is returned by this function.
         For example, if <code>Thread.sleep(long)</code>
         is implemented using <code>Object.wait(long)</code>
@@ -1364,16 +1364,16 @@
         <p/>
         And finally,
         <code>JVMTI_THREAD_STATE_TERMINATED</code> cannot be set unless
-        <code>JVMTI_THREAD_STATE_ALIVE</code> is not set.  
+        <code>JVMTI_THREAD_STATE_ALIVE</code> is not set.
         <p/>
         The thread state representation is designed for extension in future versions
         of the specification; thread state values should be used accordingly, that is
-        they should not be used as ordinals.  
+        they should not be used as ordinals.
         Most queries can be made by testing a single bit, if use in a switch statement is desired,
         the state bits should be masked with the interesting bits.
-        All bits not defined above are reserved for future use.  
+        All bits not defined above are reserved for future use.
         A VM, compliant to the current specification, must set reserved bits to zero.
-        An agent should ignore reserved bits -- 
+        An agent should ignore reserved bits --
         they should not be assumed to be zero and thus should not be included in comparisons.
         <p/>
         <b>Examples</b>
@@ -1390,8 +1390,8 @@
         </example>
         The state of a thread at a <code>Object.wait(3000)</code> would be:
         <example>
-            JVMTI_THREAD_STATE_ALIVE + JVMTI_THREAD_STATE_WAITING + 
-                JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT + 
+            JVMTI_THREAD_STATE_ALIVE + JVMTI_THREAD_STATE_WAITING +
+                JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT +
                 JVMTI_THREAD_STATE_MONITOR_WAITING
         </example>
         The state of a thread suspended while runnable would be:
@@ -1423,7 +1423,7 @@
         </example>
         To distinguish timed from untimed <code>Object.wait</code>:
         <example>
-	   if (state &amp; JVMTI_THREAD_STATE_IN_OBJECT_WAIT)  {  
+	   if (state &amp; JVMTI_THREAD_STATE_IN_OBJECT_WAIT)  {
              if (state &amp; JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT)  {
                printf("in Object.wait(long timeout)\n");
              } else {
@@ -1436,7 +1436,7 @@
         <p/>
         The thread state represented by <code>java.lang.Thread.State</code>
         returned from <code>java.lang.Thread.getState()</code> is a subset of the
-        information returned from this function.  
+        information returned from this function.
         The corresponding <code>java.lang.Thread.State</code> can be determined
         by using the provided conversion masks.
         For example, this returns the name of the <code>java.lang.Thread.State</code> thread state:
@@ -1466,7 +1466,7 @@
 	<param id="thread">
 	  <jthread null="current" started="maybe" impl="noconvert"/>
 	    <description>
-	      The thread to query. 
+	      The thread to query.
 	    </description>
 	</param>
 	<param id="thread_state_ptr">
@@ -1484,15 +1484,15 @@
     <function id="GetCurrentThread" phase="start" num="18" since="1.1">
       <synopsis>Get Current Thread</synopsis>
       <description>
-        Get the current thread.  
+        Get the current thread.
         The current thread is the Java programming language thread which has called the function.
         The function may return <code>NULL</code> in the start phase if the
         <internallink id="jvmtiCapabilities.can_generate_early_vmstart">
         <code>can_generate_early_vmstart</code></internallink> capability is enabled
         and the <code>java.lang.Thread</code> class has not been initialized yet.
         <p/>
-        Note that most <jvmti/> functions that take a thread 
-        as an argument will accept <code>NULL</code> to mean 
+        Note that most <jvmti/> functions that take a thread
+        as an argument will accept <code>NULL</code> to mean
         the current thread.
       </description>
       <origin>new</origin>
@@ -1516,12 +1516,12 @@
         Get all live threads.
         The threads are Java programming language threads;
         that is, threads that are attached to the VM.
-        A thread is live if <code>java.lang.Thread.isAlive()</code> 
+        A thread is live if <code>java.lang.Thread.isAlive()</code>
         would return <code>true</code>, that is, the thread has
         been started and has not yet died.
         The universe of threads is determined by the context of the <jvmti/>
         environment, which typically is all threads attached to the VM.
-        Note that this includes <jvmti/> agent threads 
+        Note that this includes <jvmti/> agent threads
         (see <functionlink id="RunAgentThread"/>).
       </description>
       <origin>jvmdi</origin>
@@ -1549,8 +1549,8 @@
     <function id="SuspendThread" num="5">
       <synopsis>Suspend Thread</synopsis>
       <description>
-        Suspend the specified thread. If the calling thread is specified, 
-        this function will not return until some other thread calls 
+        Suspend the specified thread. If the calling thread is specified,
+        this function will not return until some other thread calls
         <functionlink id="ResumeThread"></functionlink>.
         If the thread is currently suspended, this function
         does nothing and returns an error.
@@ -1563,7 +1563,7 @@
         <param id="thread">
 	  <jthread null="current"/>
 	    <description>
-	      The thread to suspend. 
+	      The thread to suspend.
 	    </description>
 	</param>
       </parameters>
@@ -1592,22 +1592,22 @@
         The threads are Java programming language threads;
         native threads which are not attached to the VM are not
         Java programming language threads.
-        A thread is live if <code>java.lang.Thread.isAlive()</code> 
+        A thread is live if <code>java.lang.Thread.isAlive()</code>
         would return <code>true</code>, that is, the thread has
         been started and has not yet died.
-        The universe of threads is determined 
+        The universe of threads is determined
         by the context of the <jvmti/>
         environment, which, typically, is all threads attached to the VM,
-        except critical VM internal threads and <jvmti/> agent threads 
+        except critical VM internal threads and <jvmti/> agent threads
 	(see <functionlink id="RunAgentThread"/>).
         <p/>
-        If the calling thread is specified, 
+        If the calling thread is specified,
         all other threads are suspended first then the caller thread is suspended -
-        this function will not return until some other thread calls 
+        this function will not return until some other thread calls
         <functionlink id="ResumeThread"></functionlink>.
         <p/>
         The list of actually
-        suspended threads is returned in 
+        suspended threads is returned in
         <paramlink id="suspended_list_ptr"></paramlink>.
         Suspension is as defined in <functionlink id="SuspendThread"></functionlink>.
         <functionlink id="ResumeThreadList"></functionlink>
@@ -1662,13 +1662,13 @@
     <function id="SuspendThreadList" num="92">
       <synopsis>Suspend Thread List</synopsis>
       <description>
-        Suspend the <paramlink id="request_count"></paramlink> 
-        threads specified in the 
-        <paramlink id="request_list"></paramlink> array. 
+        Suspend the <paramlink id="request_count"></paramlink>
+        threads specified in the
+        <paramlink id="request_list"></paramlink> array.
         Threads may be resumed with
         <functionlink id="ResumeThreadList"></functionlink> or
         <functionlink id="ResumeThread"></functionlink>.
-        If the calling thread is specified in the 
+        If the calling thread is specified in the
         <paramlink id="request_list"></paramlink> array, this function will
         not return until some other thread resumes it.
         Errors encountered in the suspension of a thread
@@ -1696,11 +1696,11 @@
         <param id="results">
 	  <outbuf incount="request_count"><enum>jvmtiError</enum></outbuf>
 	  <description>
-	    An agent supplied array of 
+	    An agent supplied array of
 	    <paramlink id="request_count"></paramlink> elements.
 	    On return, filled with the error code for
 	    the suspend of the corresponding thread.
-	    The error code will be 
+	    The error code will be
 	    <errorlink id="JVMTI_ERROR_NONE"></errorlink>
 	    if the thread was suspended by this call.
 	    Possible error codes are those specified
@@ -1715,12 +1715,12 @@
     <function id="ResumeThread" num="6">
       <synopsis>Resume Thread</synopsis>
       <description>
-        Resume a suspended thread. 
+        Resume a suspended thread.
         Any threads currently suspended through
         a <jvmti/> suspend function (eg.
-        <functionlink id="SuspendThread"></functionlink>) 
+        <functionlink id="SuspendThread"></functionlink>)
         or <code>java.lang.Thread.suspend()</code>
-        will resume execution;  
+        will resume execution;
 	all other threads are unaffected.
       </description>
       <origin>jvmdi</origin>
@@ -1740,7 +1740,7 @@
           Thread was not suspended.
         </error>
         <error id="JVMTI_ERROR_INVALID_TYPESTATE">
-          The state of the thread has been modified, and is now inconsistent. 
+          The state of the thread has been modified, and is now inconsistent.
         </error>
       </errors>
     </function>
@@ -1748,12 +1748,12 @@
     <function id="ResumeThreadList" num="93">
       <synopsis>Resume Thread List</synopsis>
       <description>
-        Resume the <paramlink id="request_count"></paramlink> 
-        threads specified in the 
-        <paramlink id="request_list"></paramlink> array. 
+        Resume the <paramlink id="request_count"></paramlink>
+        threads specified in the
+        <paramlink id="request_list"></paramlink> array.
         Any thread suspended through
         a <jvmti/> suspend function (eg.
-        <functionlink id="SuspendThreadList"></functionlink>) 
+        <functionlink id="SuspendThreadList"></functionlink>)
         or <code>java.lang.Thread.suspend()</code>
         will resume execution.
       </description>
@@ -1777,11 +1777,11 @@
         <param id="results">
 	  <outbuf incount="request_count"><enum>jvmtiError</enum></outbuf>
 	  <description>
-	    An agent supplied array of 
+	    An agent supplied array of
 	    <paramlink id="request_count"></paramlink> elements.
 	    On return, filled with the error code for
 	    the resume of the corresponding thread.
-	    The error code will be 
+	    The error code will be
 	    <errorlink id="JVMTI_ERROR_NONE"></errorlink>
 	    if the thread was suspended by this call.
 	    Possible error codes are those specified
@@ -1796,9 +1796,9 @@
     <function id="StopThread" num="7">
       <synopsis>Stop Thread</synopsis>
       <description>
-	Send the specified asynchronous exception to the specified thread 
+	Send the specified asynchronous exception to the specified thread
 	(similar to <code>java.lang.Thread.stop</code>).
-	Normally, this function is used to kill the specified thread with an 
+	Normally, this function is used to kill the specified thread with an
 	instance of the exception <code>ThreadDeath</code>.
       </description>
       <origin>jvmdi</origin>
@@ -1883,7 +1883,7 @@
 	</field>
       </typedef>
       <description>
-	Get thread information. The fields of the <datalink id="jvmtiThreadInfo"/> structure 
+	Get thread information. The fields of the <datalink id="jvmtiThreadInfo"/> structure
 	are filled in with details of the specified thread.
       </description>
       <origin>jvmdi</origin>
@@ -1910,8 +1910,8 @@
     <function id="GetOwnedMonitorInfo" num="10">
       <synopsis>Get Owned Monitor Info</synopsis>
       <description>
-	Get information about the monitors owned by the 
-	specified thread. 
+	Get information about the monitors owned by the
+	specified thread.
       </description>
       <origin>jvmdiClone</origin>
       <capabilities>
@@ -1943,7 +1943,7 @@
 
     <function id="GetOwnedMonitorStackDepthInfo" num="153" since="1.1">
       <synopsis>Get Owned Monitor Stack Depth Info</synopsis>
-      <typedef id="jvmtiMonitorStackDepthInfo" 
+      <typedef id="jvmtiMonitorStackDepthInfo"
                label="Monitor stack depth information structure">
         <field id="monitor">
 	  <jobject/>
@@ -1954,18 +1954,18 @@
         <field id="stack_depth">
 	  <jint/>
 	  <description>
-	    The stack depth.  Corresponds to the stack depth used in the 
+	    The stack depth.  Corresponds to the stack depth used in the
             <internallink id="stack">Stack Frame functions</internallink>.
             That is, zero is the current frame, one is the frame which
-            called the current frame. And it is negative one if the 
-	    implementation cannot determine the stack depth (e.g., for 
+            called the current frame. And it is negative one if the
+	    implementation cannot determine the stack depth (e.g., for
 	    monitors acquired by JNI <code>MonitorEnter</code>).
 	  </description>
 	</field>
       </typedef>
       <description>
-	Get information about the monitors owned by the 
-	specified thread and the depth of the stack frame which locked them. 
+	Get information about the monitors owned by the
+	specified thread and the depth of the stack frame which locked them.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -2000,7 +2000,7 @@
     <function id="GetCurrentContendedMonitor" num="11">
       <synopsis>Get Current Contended Monitor</synopsis>
       <description>
-	Get the object, if any, whose monitor the specified thread is waiting to 
+	Get the object, if any, whose monitor the specified thread is waiting to
 	enter or waiting to regain through <code>java.lang.Object.wait</code>.
       </description>
       <origin>jvmdi</origin>
@@ -2057,7 +2057,7 @@
               <void/>
             </outptr>
               <description>
-                The <code>arg</code> parameter passed to 
+                The <code>arg</code> parameter passed to
                 <functionlink id="RunAgentThread"></functionlink>.
               </description>
           </param>
@@ -2071,13 +2071,13 @@
 	The parameter <paramlink id="arg"></paramlink> is forwarded on to the
 	<functionlink id="jvmtiStartFunction">start function</functionlink>
 	(specified with <paramlink id="proc"></paramlink>) as its single argument.
-	This function allows the creation of agent threads 
-	for handling communication with another process or for handling events 
-	without the need to load a special subclass of <code>java.lang.Thread</code> or 
-	implementer of <code>java.lang.Runnable</code>. 
+	This function allows the creation of agent threads
+	for handling communication with another process or for handling events
+	without the need to load a special subclass of <code>java.lang.Thread</code> or
+	implementer of <code>java.lang.Runnable</code>.
 	Instead, the created thread can run entirely in native code.
 	However, the created thread does require a newly created instance
-	of <code>java.lang.Thread</code> (referenced by the argument <code>thread</code>) to 
+	of <code>java.lang.Thread</code> (referenced by the argument <code>thread</code>) to
 	which it will be associated.
 	The thread object can be created with JNI calls.
 	<p/>
@@ -2105,14 +2105,14 @@
         added to the thread group and the thread is not seen on queries of the thread
         group at either the Java programming language or <jvmti/> levels.
 	<p/>
-        The thread is not visible to Java programming language queries but is 
-        included in <jvmti/> queries (for example, 
+        The thread is not visible to Java programming language queries but is
+        included in <jvmti/> queries (for example,
         <functionlink id="GetAllThreads"/> and
         <functionlink id="GetAllStackTraces"/>).
 	<p/>
 	Upon execution of <code>proc</code>, the new thread will be attached to the
-	VM -- see the JNI documentation on 
-	<externallink id="docs/technotes/guides/jni/spec/invocation.html#attaching_to_the_vm"
+	VM -- see the JNI documentation on
+	<externallink id="jni/invocation.html#attaching-to-the-vm"
 		      >Attaching to the VM</externallink>.
       </description>
       <origin>jvmdiClone</origin>
@@ -2152,8 +2152,8 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_INVALID_PRIORITY"> 
-            <paramlink id="priority"/> is less than 
+	<error id="JVMTI_ERROR_INVALID_PRIORITY">
+            <paramlink id="priority"/> is less than
             <datalink id="JVMTI_THREAD_MIN_PRIORITY"/>
               or greater than
             <datalink id="JVMTI_THREAD_MAX_PRIORITY"/>
@@ -2169,7 +2169,7 @@
         This value is <code>NULL</code> unless set with this function.
 	Agents can allocate memory in which they store thread specific
         information. By setting thread-local storage it can then be
-	accessed with 
+	accessed with
 	<functionlink id="GetThreadLocalStorage"></functionlink>.
 	<p/>
         This function is called by the agent to set the value of the <jvmti/>
@@ -2188,10 +2188,10 @@
 	    </description>
 	</param>
         <param id="data">
-	  <inbuf> 
-	    <void/> 
-	    <nullok>value is set to <code>NULL</code></nullok> 
-	  </inbuf> 
+	  <inbuf>
+	    <void/>
+	    <nullok>value is set to <code>NULL</code></nullok>
+	  </inbuf>
 	  <description>
 	    The value to be entered into the thread-local storage.
 	  </description>
@@ -2205,7 +2205,7 @@
       <synopsis>Get Thread Local Storage</synopsis>
       <description>
         Called by the agent to get the value of the <jvmti/> thread-local
-        storage. 
+        storage.
       </description>
       <origin>jvmpi</origin>
       <capabilities>
@@ -2220,10 +2220,10 @@
         <param id="data_ptr">
 	  <agentbuf><void/></agentbuf>
 	  <description>
-	    Pointer through which the value of the thread local 
+	    Pointer through which the value of the thread local
 	    storage is returned.
 	    If thread-local storage has not been set with
-	    <functionlink id="SetThreadLocalStorage"></functionlink> the returned 
+	    <functionlink id="SetThreadLocalStorage"></functionlink> the returned
 	    pointer is <code>NULL</code>.
 	  </description>
 	</param>
@@ -2294,8 +2294,8 @@
 	</field>
       </typedef>
       <description>
-	Get information about the thread group. The fields of the 
-	<functionlink id="jvmtiThreadGroupInfo"></functionlink> structure 
+	Get information about the thread group. The fields of the
+	<functionlink id="jvmtiThreadGroupInfo"></functionlink> structure
 	are filled in with details of the specified thread group.
       </description>
       <origin>jvmdi</origin>
@@ -2312,7 +2312,7 @@
 	  <outptr><struct>jvmtiThreadGroupInfo</struct></outptr>
 	  <description>
 	    On return, filled with information describing the specified
-	    thread group. 
+	    thread group.
 	  </description>
 	</param>
       </parameters>
@@ -2373,15 +2373,15 @@
         <p/>
         Stack frames are as described in
         <vmspec chapter="3.6"/>,
-        That is, they correspond to method 
-        invocations (including native methods) but do not correspond to platform native or 
+        That is, they correspond to method
+        invocations (including native methods) but do not correspond to platform native or
         VM internal frames.
         <p/>
         A <jvmti/> implementation may use method invocations to launch a thread and
         the corresponding frames may be included in the stack as presented by these functions --
         that is, there may be frames shown
         deeper than <code>main()</code> and <code>run()</code>.
-        However this presentation must be consistent across all <jvmti/> functionality which 
+        However this presentation must be consistent across all <jvmti/> functionality which
         uses stack frames or stack depth.
     </intro>
 
@@ -2425,16 +2425,16 @@
 	    <struct>jvmtiFrameInfo</struct>
 	  </outbuf>
 	    <description>
-	      On return, this agent allocated buffer is filled 
-	      with stack frame information.  
+	      On return, this agent allocated buffer is filled
+	      with stack frame information.
 	    </description>
 	</field>
         <field id="frame_count">
 	  <jint/>
 	  <description>
-	    On return, the number of records filled into 
+	    On return, the number of records filled into
             <code>frame_buffer</code>.
-            This will be 
+            This will be
             min(<code>max_frame_count</code>, <i>stackDepth</i>).
 	  </description>
 	</field>
@@ -2445,7 +2445,7 @@
       <description>
         Get information about the stack of a thread.
         If <paramlink id="max_frame_count"></paramlink> is less than the depth of the stack,
-        the <paramlink id="max_frame_count"></paramlink> topmost frames are returned, 
+        the <paramlink id="max_frame_count"></paramlink> topmost frames are returned,
         otherwise the entire stack is returned.
         The topmost frames, those most recently invoked, are at the beginning of the returned buffer.
         <p/>
@@ -2457,23 +2457,23 @@
 jint count;
 jvmtiError err;
 
-err = (*jvmti)-&gt;GetStackTrace(jvmti, aThread, 0, 5, 
+err = (*jvmti)-&gt;GetStackTrace(jvmti, aThread, 0, 5,
                                frames, &amp;count);
 if (err == JVMTI_ERROR_NONE &amp;&amp; count &gt;= 1) {
    char *methodName;
-   err = (*jvmti)-&gt;GetMethodName(jvmti, frames[0].method, 
+   err = (*jvmti)-&gt;GetMethodName(jvmti, frames[0].method,
                        &amp;methodName, NULL, NULL);
    if (err == JVMTI_ERROR_NONE) {
       printf("Executing method: %s", methodName);
    }
 }
         </example>
-        <todo> 
+        <todo>
           check example code.
         </todo>
         <p/>
         The <paramlink id="thread"></paramlink> need not be suspended
-        to call this function.  
+        to call this function.
         <p/>
         The <functionlink id="GetLineNumberTable"></functionlink>
         function can be used to map locations to line numbers. Note that
@@ -2492,15 +2492,15 @@
         <param id="start_depth">
 	  <jint/>
 	  <description>
-	    Begin retrieving frames at this depth.  
-            If non-negative, count from the current frame, 
-            the first frame retrieved is at depth <code>start_depth</code>.  
+	    Begin retrieving frames at this depth.
+            If non-negative, count from the current frame,
+            the first frame retrieved is at depth <code>start_depth</code>.
             For example, if zero, start from the current frame; if one, start from the
             caller of the current frame; if two, start from the caller of the
             caller of the current frame; and so on.
             If negative, count from below the oldest frame,
-            the first frame retrieved is at depth <i>stackDepth</i><code> + start_depth</code>,  
-            where <i>stackDepth</i> is the count of frames on the stack.  
+            the first frame retrieved is at depth <i>stackDepth</i><code> + start_depth</code>,
+            where <i>stackDepth</i> is the count of frames on the stack.
             For example, if negative one, only the oldest frame is retrieved;
             if negative two, start from the frame called by the oldest frame.
 	  </description>
@@ -2516,17 +2516,17 @@
 	    <struct>jvmtiFrameInfo</struct>
 	  </outbuf>
 	    <description>
-	      On return, this agent allocated buffer is filled 
-	      with stack frame information.  
+	      On return, this agent allocated buffer is filled
+	      with stack frame information.
 	    </description>
 	</param>
         <param id="count_ptr">
 	  <outptr><jint/></outptr>
 	  <description>
 	    On return, points to the number of records filled in.
-            For non-negative <code>start_depth</code>, this will be 
+            For non-negative <code>start_depth</code>, this will be
             min(<code>max_frame_count</code>, <i>stackDepth</i><code> - start_depth</code>).
-            For negative <code>start_depth</code>, this will be 
+            For negative <code>start_depth</code>, this will be
             min(<code>max_frame_count</code>, <code>-start_depth</code>).
 	  </description>
 	</param>
@@ -2546,23 +2546,23 @@
         Get information about the stacks of all live threads
         (including <internallink id="RunAgentThread">agent threads</internallink>).
         If <paramlink id="max_frame_count"/> is less than the depth of a stack,
-        the <paramlink id="max_frame_count"/> topmost frames are returned for that thread, 
+        the <paramlink id="max_frame_count"/> topmost frames are returned for that thread,
         otherwise the entire stack is returned.
         The topmost frames, those most recently invoked, are at the beginning of the returned buffer.
         <p/>
-        All stacks are collected simultaneously, that is, no changes will occur to the 
+        All stacks are collected simultaneously, that is, no changes will occur to the
         thread state or stacks between the sampling of one thread and the next.
         The threads need not be suspended.
-        
+
         <example>
 jvmtiStackInfo *stack_info;
 jint thread_count;
 int ti;
 jvmtiError err;
 
-err = (*jvmti)-&gt;GetAllStackTraces(jvmti, MAX_FRAMES, &amp;stack_info, &amp;thread_count); 
+err = (*jvmti)-&gt;GetAllStackTraces(jvmti, MAX_FRAMES, &amp;stack_info, &amp;thread_count);
 if (err != JVMTI_ERROR_NONE) {
-   ...   
+   ...
 }
 for (ti = 0; ti &lt; thread_count; ++ti) {
    jvmtiStackInfo *infop = &amp;stack_info[ti];
@@ -2577,9 +2577,9 @@
    }
 }
 /* this one Deallocate call frees all data allocated by GetAllStackTraces */
-err = (*jvmti)-&gt;Deallocate(jvmti, stack_info); 
+err = (*jvmti)-&gt;Deallocate(jvmti, stack_info);
         </example>
-        <todo> 
+        <todo>
           check example code.
         </todo>
 
@@ -2599,12 +2599,12 @@
 	    <struct>jvmtiStackInfo</struct>
 	  </allocbuf>
 	    <description>
-	      On return, this buffer is filled 
-	      with stack information for each thread.  
-              The number of <datalink id="jvmtiStackInfo"/> records is determined 
+	      On return, this buffer is filled
+	      with stack information for each thread.
+              The number of <datalink id="jvmtiStackInfo"/> records is determined
               by <paramlink id="thread_count_ptr"/>.
               <p/>
-              Note that this buffer is allocated to include the <datalink id="jvmtiFrameInfo"/> 
+              Note that this buffer is allocated to include the <datalink id="jvmtiFrameInfo"/>
               buffers pointed to by <datalink id="jvmtiStackInfo.frame_buffer"/>.
               These buffers must not be separately deallocated.
 	    </description>
@@ -2625,11 +2625,11 @@
       <description>
         Get information about the stacks of the supplied threads.
         If <paramlink id="max_frame_count"/> is less than the depth of a stack,
-        the <paramlink id="max_frame_count"/> topmost frames are returned for that thread, 
+        the <paramlink id="max_frame_count"/> topmost frames are returned for that thread,
         otherwise the entire stack is returned.
         The topmost frames, those most recently invoked, are at the beginning of the returned buffer.
         <p/>
-        All stacks are collected simultaneously, that is, no changes will occur to the 
+        All stacks are collected simultaneously, that is, no changes will occur to the
         thread state or stacks between the sampling one thread and the next.
         The threads need not be suspended.
         <p/>
@@ -2667,12 +2667,12 @@
 	    <struct>jvmtiStackInfo</struct>
 	  </allocbuf>
 	    <description>
-	      On return, this buffer is filled 
-	      with stack information for each thread.  
-              The number of <datalink id="jvmtiStackInfo"/> records is determined 
+	      On return, this buffer is filled
+	      with stack information for each thread.
+              The number of <datalink id="jvmtiStackInfo"/> records is determined
               by <paramlink id="thread_count"/>.
               <p/>
-              Note that this buffer is allocated to include the <datalink id="jvmtiFrameInfo"/> 
+              Note that this buffer is allocated to include the <datalink id="jvmtiFrameInfo"/>
               buffers pointed to by <datalink id="jvmtiStackInfo.frame_buffer"/>.
               These buffers must not be separately deallocated.
 	    </description>
@@ -2703,8 +2703,8 @@
       <capabilities>
         <required id="can_get_async_stack_trace"></required>
         <capability id="can_show_JVM_spec_async_frames">
-          If <code>false</code>, 
-          <paramlink id="use_java_stack"></paramlink> 
+          If <code>false</code>,
+          <paramlink id="use_java_stack"></paramlink>
           must be <code>false</code>.
         </capability>
       </capabilities>
@@ -2713,7 +2713,7 @@
 	  <jboolean/>
 	  <description>
 	    Return the stack showing <vmspec/>
-	    model of the stack; 
+	    model of the stack;
 	    otherwise, show the internal representation of the stack with
 	    inlined and optimized methods missing.  If the virtual machine
 	    is using the <i>Java Virtual Machine Specification</i> stack model
@@ -2734,9 +2734,9 @@
 	  </outbuf>
 	    <description>
 	      The agent passes in a buffer
-	      large enough to hold <code>max_count</code> records of 
+	      large enough to hold <code>max_count</code> records of
 	      <datalink id="jvmtiFrameInfo"></datalink>.  This buffer must be
-	      pre-allocated by the agent.  
+	      pre-allocated by the agent.
 	    </description>
 	</param>
         <param id="count_ptr">
@@ -2788,27 +2788,27 @@
       <synopsis>Pop Frame</synopsis>
       <description>
 	Pop the current frame of <code>thread</code>'s stack.
-	Popping a frame takes you to the previous frame.  
-	When the thread is resumed, the execution 
+	Popping a frame takes you to the previous frame.
+	When the thread is resumed, the execution
 	state of the thread is reset to the state
 	immediately before the called method was invoked.
 	That is (using <vmspec/> terminology):
 	  <ul>
 	    <li>the current frame is discarded as the previous frame becomes the current one</li>
 	    <li>the operand stack is restored--the argument values are added back
-	      and if the invoke was not <code>invokestatic</code>, 
+	      and if the invoke was not <code>invokestatic</code>,
 	      <code>objectref</code> is added back as well</li>
 	    <li>the Java virtual machine PC is restored to the opcode
 	      of the invoke instruction</li>
 	  </ul>
 	Note however, that any changes to the arguments, which
-	occurred in the called method, remain; 
-	when execution continues, the first instruction to 
-	execute will be the invoke.  
+	occurred in the called method, remain;
+	when execution continues, the first instruction to
+	execute will be the invoke.
 	<p/>
-	Between calling <code>PopFrame</code> and resuming the 
-	thread the state of the stack is undefined.  
-	To pop frames beyond the first, 
+	Between calling <code>PopFrame</code> and resuming the
+	thread the state of the stack is undefined.
+	To pop frames beyond the first,
 	these three steps must be repeated:
 	<ul>
 	  <li>suspend the thread via an event (step, breakpoint, ...)</li>
@@ -2816,11 +2816,11 @@
 	  <li>resume the thread</li>
 	</ul>
 	<p/>
-	A lock acquired by calling the called method 
-	(if it is a <code>synchronized</code>  method) 
+	A lock acquired by calling the called method
+	(if it is a <code>synchronized</code>  method)
 	and locks acquired by entering <code>synchronized</code>
-	blocks within the called method are released. 
-	Note: this does not apply to native locks or 
+	blocks within the called method are released.
+	Note: this does not apply to native locks or
 	<code>java.util.concurrent.locks</code> locks.
 	<p/>
 	Finally blocks are not executed.
@@ -2829,7 +2829,7 @@
 	<p/>
 	The specified thread must be suspended (which implies it cannot be the current thread).
 	<p/>
-	Both the called method and calling method must be non-native Java programming 
+	Both the called method and calling method must be non-native Java programming
         language methods.
 	<p/>
 	No <jvmti/> events are generated by this function.
@@ -2892,7 +2892,7 @@
 	<param id="location_ptr">
 	  <outptr><jlocation/></outptr>
 	  <description>
-	    On return, points to the index of the currently 
+	    On return, points to the index of the currently
 	    executing instruction.
             Is set to <code>-1</code> if the frame is executing
             a native method.
@@ -2906,11 +2906,11 @@
     <function id="NotifyFramePop" num="20">
       <synopsis>Notify Frame Pop</synopsis>
       <description>
-	When the frame that is currently at <paramlink id="depth"></paramlink> 
+	When the frame that is currently at <paramlink id="depth"></paramlink>
         is popped from the stack, generate a
-	<eventlink id="FramePop"></eventlink> event.  See the 
+	<eventlink id="FramePop"></eventlink> event.  See the
 	<eventlink id="FramePop"></eventlink> event for details.
-        Only frames corresponding to non-native Java programming language 
+        Only frames corresponding to non-native Java programming language
         methods can receive notification.
         <p/>
         The specified thread must either be the current thread
@@ -2922,7 +2922,7 @@
       </capabilities>
       <parameters>
  	<param id="thread">
-	  <jthread null="current" frame="depth"/>	  
+	  <jthread null="current" frame="depth"/>
 	  <description>
 	    The thread of the frame for which the frame pop event will be generated.
 	  </description>
@@ -2935,7 +2935,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_OPAQUE_FRAME"> 
+	<error id="JVMTI_ERROR_OPAQUE_FRAME">
 	  The frame at <code>depth</code> is executing a
           native method.
 	</error>
@@ -2954,7 +2954,7 @@
       The method which will return early is referred to as the <i>called method</i>.
       The called method is the current method
       (as defined by
-      <vmspec chapter="3.6"/>) 
+      <vmspec chapter="3.6"/>)
       for the specified thread at
       the time the function is called.
       <p/>
@@ -2962,17 +2962,17 @@
       The return occurs when execution of Java programming
       language code is resumed on this thread.
       Between calling one of these functions and resumption
-      of thread execution, the state of the stack is undefined.  
+      of thread execution, the state of the stack is undefined.
       <p/>
-      No further instructions are executed in the called method.  
+      No further instructions are executed in the called method.
       Specifically, finally blocks are not executed.
       Note: this can cause inconsistent states in the application.
       <p/>
-      A lock acquired by calling the called method 
-      (if it is a <code>synchronized</code>  method) 
+      A lock acquired by calling the called method
+      (if it is a <code>synchronized</code>  method)
       and locks acquired by entering <code>synchronized</code>
-      blocks within the called method are released. 
-      Note: this does not apply to native locks or 
+      blocks within the called method are released.
+      Note: this does not apply to native locks or
       <code>java.util.concurrent.locks</code> locks.
       <p/>
       Events, such as <eventlink id="MethodExit"></eventlink>,
@@ -2989,7 +2989,7 @@
       <description>
 	This function can be used to return from a method whose
         result type is <code>Object</code>
-        or a subclass of <code>Object</code>. 
+        or a subclass of <code>Object</code>.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -3005,7 +3005,7 @@
 	<param id="value">
 	  <jobject/>
 	  <description>
-	    The return value for the called frame. 
+	    The return value for the called frame.
             An object or <code>NULL</code>.
 	  </description>
 	</param>
@@ -3017,12 +3017,12 @@
           Or the implementation is unable to provide
           this functionality on this frame.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
-	  The result type of the called method is not 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
+	  The result type of the called method is not
           <code>Object</code> or a subclass of <code>Object</code>.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
-	  The supplied <paramlink id="value"/> is not compatible with the 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
+	  The supplied <paramlink id="value"/> is not compatible with the
           result type of the called method.
 	</error>
 	<error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
@@ -3039,8 +3039,8 @@
       <description>
 	This function can be used to return from a method whose
         result type is <code>int</code>, <code>short</code>,
-        <code>char</code>, <code>byte</code>, or 
-	<code>boolean</code>. 
+        <code>char</code>, <code>byte</code>, or
+	<code>boolean</code>.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -3067,10 +3067,10 @@
           Or the implementation is unable to provide
           this functionality on this frame.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
-	  The result type of the called method is not 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
+	  The result type of the called method is not
           <code>int</code>, <code>short</code>,
-          <code>char</code>, <code>byte</code>, or 
+          <code>char</code>, <code>byte</code>, or
   	  <code>boolean</code>.
 	</error>
 	<error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
@@ -3113,7 +3113,7 @@
           Or the implementation is unable to provide
           this functionality on this frame.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
 	  The result type of the called method is not <code>long</code>.
 	</error>
 	<error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
@@ -3156,7 +3156,7 @@
           Or the implementation is unable to provide
           this functionality on this frame.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
 	  The result type of the called method is not <code>float</code>.
 	</error>
 	<error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
@@ -3197,7 +3197,7 @@
 	  Attempted to return early from a frame corresponding to a native method.
           Or the implementation is unable to provide this functionality on this frame.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
 	  The result type of the called method is not <code>double</code>.
 	</error>
 	<error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
@@ -3234,8 +3234,8 @@
           Or the implementation is unable to provide
           this functionality on this frame.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
-	  The called method has a result type.  
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
+	  The called method has a result type.
 	</error>
 	<error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
 	  Thread was not the current thread and was not suspended.
@@ -3254,12 +3254,12 @@
       Functionality includes the ability to view the objects in the
       heap and to tag these objects.
     </intro>
-   
+
     <intro id="objectTags" label="Object Tags">
       A <i>tag</i> is a value associated with an object.
       Tags are explicitly set by the agent using the
       <functionlink id="SetTag"></functionlink> function or by
-      callback functions such as <functionlink id="jvmtiHeapIterationCallback"/>.    
+      callback functions such as <functionlink id="jvmtiHeapIterationCallback"/>.
       <p/>
       Tags are local to the environment; that is, the tags of one
       environment are not visible in another.
@@ -3267,10 +3267,10 @@
       Tags are <code>jlong</code> values which can be used
       simply to mark an object or to store a pointer to more detailed
       information.  Objects which have not been tagged have a
-      tag of zero.  
+      tag of zero.
       Setting a tag to zero makes the object untagged.
     </intro>
-   
+
     <intro id="heapCallbacks" label="Heap Callback Functions">
         Heap functions which iterate through the heap and recursively
         follow object references use agent supplied callback functions
@@ -3278,7 +3278,7 @@
         <p/>
         These heap callback functions must adhere to the following restrictions --
         These callbacks must not use JNI functions.
-        These callbacks must not use <jvmti/> functions except 
+        These callbacks must not use <jvmti/> functions except
         <i>callback safe</i> functions which
         specifically allow such use (see the raw monitor, memory management,
         and environment local storage functions).
@@ -3289,7 +3289,7 @@
         be invoked at a time.
         <p/>
         The Heap Filter Flags can be used to prevent reporting
-        based on the tag status of an object or its class.  
+        based on the tag status of an object or its class.
         If no flags are set (the <code>jint</code> is zero), objects
         will not be filtered out.
 
@@ -3310,43 +3310,43 @@
 
         <p/>
         The Heap Visit Control Flags are returned by the heap callbacks
-        and can be used to abort the iteration.  For the 
-        <functionlink id="jvmtiHeapReferenceCallback">Heap 
-        Reference Callback</functionlink>, it can also be used 
+        and can be used to abort the iteration.  For the
+        <functionlink id="jvmtiHeapReferenceCallback">Heap
+        Reference Callback</functionlink>, it can also be used
         to prune the graph of traversed references
         (<code>JVMTI_VISIT_OBJECTS</code> is not set).
 
-        <constants id="jvmtiHeapVisitControl" 
-                   label="Heap Visit Control Flags" 
-                   kind="bits" 
+        <constants id="jvmtiHeapVisitControl"
+                   label="Heap Visit Control Flags"
+                   kind="bits"
                    since="1.1">
 	  <constant id="JVMTI_VISIT_OBJECTS" num="0x100">
             If we are visiting an object and if this callback
-            was initiated by <functionlink id="FollowReferences"/>, 
+            was initiated by <functionlink id="FollowReferences"/>,
             traverse the references of this object.
             Otherwise ignored.
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_VISIT_ABORT" num="0x8000">
 	    Abort the iteration.  Ignore all other bits.
 	  </constant>
 	</constants>
 
         <p/>
-        The Heap Reference Enumeration is provided by the 
-        <functionlink id="jvmtiHeapReferenceCallback">Heap 
-        Reference Callback</functionlink> and 
-        <functionlink id="jvmtiPrimitiveFieldCallback">Primitive Field 
-        Callback</functionlink> to 
+        The Heap Reference Enumeration is provided by the
+        <functionlink id="jvmtiHeapReferenceCallback">Heap
+        Reference Callback</functionlink> and
+        <functionlink id="jvmtiPrimitiveFieldCallback">Primitive Field
+        Callback</functionlink> to
         describe the kind of reference
         being reported.
 
-        <constants id="jvmtiHeapReferenceKind" 
-                   label="Heap Reference Enumeration" 
-                   kind="enum" 
+        <constants id="jvmtiHeapReferenceKind"
+                   label="Heap Reference Enumeration"
+                   kind="enum"
                    since="1.1">
 	  <constant id="JVMTI_HEAP_REFERENCE_CLASS" num="1">
 	    Reference from an object to its class.
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_HEAP_REFERENCE_FIELD" num="2">
 	    Reference from an object to the value of one of its instance fields.
 	  </constant>
@@ -3361,11 +3361,11 @@
 	  </constant>
 	  <constant id="JVMTI_HEAP_REFERENCE_PROTECTION_DOMAIN" num="6">
 	    Reference from a class to its protection domain.
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_HEAP_REFERENCE_INTERFACE" num="7">
-            Reference from a class to one of its interfaces. 
+            Reference from a class to one of its interfaces.
             Note: interfaces are defined via a constant pool reference,
-            so the referenced interfaces may also be reported with a 
+            so the referenced interfaces may also be reported with a
             <code>JVMTI_HEAP_REFERENCE_CONSTANT_POOL</code> reference kind.
 	  </constant>
 	  <constant id="JVMTI_HEAP_REFERENCE_STATIC_FIELD" num="8">
@@ -3375,10 +3375,10 @@
 	    Reference from a class to a resolved entry in the constant pool.
 	  </constant>
 	  <constant id="JVMTI_HEAP_REFERENCE_SUPERCLASS" num="10">
-            Reference from a class to its superclass. 
+            Reference from a class to its superclass.
             A callback is not sent if the superclass is <code>java.lang.Object</code>.
             Note: loaded classes define superclasses via a constant pool
-            reference, so the referenced superclass may also be reported with 
+            reference, so the referenced superclass may also be reported with
             a <code>JVMTI_HEAP_REFERENCE_CONSTANT_POOL</code> reference kind.
 	  </constant>
 	  <constant id="JVMTI_HEAP_REFERENCE_JNI_GLOBAL" num="21">
@@ -3408,88 +3408,88 @@
         Definitions for the single character type descriptors of
         primitive types.
 
-        <constants id="jvmtiPrimitiveType" 
-                   label="Primitive Type Enumeration" 
-                   kind="enum" 
+        <constants id="jvmtiPrimitiveType"
+                   label="Primitive Type Enumeration"
+                   kind="enum"
                    since="1.1">
 	  <constant id="JVMTI_PRIMITIVE_TYPE_BOOLEAN" num="90">
             'Z' - Java programming language <code>boolean</code> - JNI <code>jboolean</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_BYTE" num="66">
             'B' - Java programming language <code>byte</code> - JNI <code>jbyte</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_CHAR" num="67">
             'C' - Java programming language <code>char</code> - JNI <code>jchar</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_SHORT" num="83">
             'S' - Java programming language <code>short</code> - JNI <code>jshort</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_INT" num="73">
             'I' - Java programming language <code>int</code> - JNI <code>jint</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_LONG" num="74">
             'J' - Java programming language <code>long</code> - JNI <code>jlong</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_FLOAT" num="70">
             'F' - Java programming language <code>float</code> - JNI <code>jfloat</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_DOUBLE" num="68">
             'D' - Java programming language <code>double</code> - JNI <code>jdouble</code>
-	  </constant>	  
+	  </constant>
 	</constants>
     </intro>
 
-      <typedef id="jvmtiHeapReferenceInfoField" 
-               label="Reference information structure for Field references" 
+      <typedef id="jvmtiHeapReferenceInfoField"
+               label="Reference information structure for Field references"
                since="1.1">
         <description>
-          Reference information returned for 
-          <datalink id="JVMTI_HEAP_REFERENCE_FIELD"/> and 
+          Reference information returned for
+          <datalink id="JVMTI_HEAP_REFERENCE_FIELD"/> and
           <datalink id="JVMTI_HEAP_REFERENCE_STATIC_FIELD"/> references.
         </description>
 	<field id="index">
 	  <jint/>
-	  <description>	    
-            For <datalink id="JVMTI_HEAP_REFERENCE_FIELD"/>, the 
-            referrer object is not a class or an inteface.  
-            In this case, <code>index</code> is the index of the field 
-            in the class of the referrer object.  
+	  <description>
+            For <datalink id="JVMTI_HEAP_REFERENCE_FIELD"/>, the
+            referrer object is not a class or an inteface.
+            In this case, <code>index</code> is the index of the field
+            in the class of the referrer object.
             This class is referred to below as <i>C</i>.
             <p/>
             For <datalink id="JVMTI_HEAP_REFERENCE_STATIC_FIELD"/>,
             the referrer object is a class (referred to below as <i>C</i>)
             or an interface (referred to below as <i>I</i>).
-            In this case, <code>index</code> is the index of the field in 
+            In this case, <code>index</code> is the index of the field in
             that class or interface.
             <p/>
-            If the referrer object is not an interface, then the field 
-            indices are determined as follows: 
+            If the referrer object is not an interface, then the field
+            indices are determined as follows:
             <ul>
               <li>make a list of all the fields in <i>C</i> and its
-                  superclasses, starting with all the fields in 
+                  superclasses, starting with all the fields in
                   <code>java.lang.Object</code> and ending with all the
                   fields in <i>C</i>.</li>
-              <li>Within this list, put 
+              <li>Within this list, put
                   the fields for a given class in the order returned by
                   <functionlink id="GetClassFields"/>.</li>
-              <li>Assign the fields in this list indices 
-                  <i>n</i>, <i>n</i>+1, ..., in order, where <i>n</i> 
+              <li>Assign the fields in this list indices
+                  <i>n</i>, <i>n</i>+1, ..., in order, where <i>n</i>
                   is the count of the fields in all the interfaces
-                  implemented by <i>C</i>. 
-                  Note that <i>C</i> implements all interfaces 
+                  implemented by <i>C</i>.
+                  Note that <i>C</i> implements all interfaces
                   directly implemented by its superclasses; as well
                   as all superinterfaces of these interfaces.</li>
             </ul>
-            If the referrer object is an interface, then the field 
+            If the referrer object is an interface, then the field
             indices are determined as follows:
             <ul>
-              <li>make a list of the fields directly declared in 
+              <li>make a list of the fields directly declared in
                   <i>I</i>.</li>
-              <li>Within this list, put 
+              <li>Within this list, put
                   the fields in the order returned by
                   <functionlink id="GetClassFields"/>.</li>
-              <li>Assign the fields in this list indices 
-                  <i>n</i>, <i>n</i>+1, ..., in order, where <i>n</i> 
+              <li>Assign the fields in this list indices
+                  <i>n</i>, <i>n</i>+1, ..., in order, where <i>n</i>
                   is the count of the fields in all the superinterfaces
                   of <i>I</i>.</li>
             </ul>
@@ -3522,7 +3522,7 @@
             </example>
             Assume that <functionlink id="GetClassFields"/> called on
             <code>C1</code> returns the fields of <code>C1</code> in the
-            order: a, b; and that the fields of <code>C2</code> are 
+            order: a, b; and that the fields of <code>C2</code> are
             returned in the order: q, r.
             An instance of class <code>C1</code> will have the
             following field indices:
@@ -3569,7 +3569,7 @@
                   The count of the fields in the interfaces
                   implemented by <code>C2</code> is three (<i>n</i>=3):
                   <code>p</code> of <code>I0</code>,
-                  <code>x</code> of <code>I1</code> and <code>y</code> of <code>I2</code> 
+                  <code>x</code> of <code>I1</code> and <code>y</code> of <code>I2</code>
                   (an interface of <code>C2</code>).  Note that the field <code>p</code>
                   of <code>I0</code> is only included once.
                 </td>
@@ -3611,7 +3611,7 @@
             The class <code>C2</code> will have the same field indices.
             Note that a field may have a different index depending on the
             object that is viewing it -- for example field "a" above.
-            Note also: not all field indices may be visible from the 
+            Note also: not all field indices may be visible from the
             callbacks, but all indices are shown for illustrative purposes.
             <p/>
             The interface <code>I1</code> will have the
@@ -3631,46 +3631,46 @@
                 </td>
               </tr>
             </table></dd></dl>
-	  </description>	    
+	  </description>
 	</field>
       </typedef>
 
-      <typedef id="jvmtiHeapReferenceInfoArray" 
-               label="Reference information structure for Array references" 
+      <typedef id="jvmtiHeapReferenceInfoArray"
+               label="Reference information structure for Array references"
                since="1.1">
         <description>
-          Reference information returned for 
+          Reference information returned for
          <datalink id="JVMTI_HEAP_REFERENCE_ARRAY_ELEMENT"/> references.
         </description>
 	<field id="index">
 	  <jint/>
-	  <description>	    
+	  <description>
 	    The array index.
 	  </description>
 	</field>
       </typedef>
 
-      <typedef id="jvmtiHeapReferenceInfoConstantPool" 
-               label="Reference information structure for Constant Pool references" 
+      <typedef id="jvmtiHeapReferenceInfoConstantPool"
+               label="Reference information structure for Constant Pool references"
                since="1.1">
         <description>
-          Reference information returned for 
+          Reference information returned for
           <datalink id="JVMTI_HEAP_REFERENCE_CONSTANT_POOL"/> references.
         </description>
 	<field id="index">
 	  <jint/>
-	  <description>	    
-	    The index into the constant pool of the class. See the description in 
+	  <description>
+	    The index into the constant pool of the class. See the description in
       <vmspec chapter="4.4"/>.
 	  </description>
 	</field>
       </typedef>
 
-      <typedef id="jvmtiHeapReferenceInfoStackLocal" 
-               label="Reference information structure for Local Variable references" 
+      <typedef id="jvmtiHeapReferenceInfoStackLocal"
+               label="Reference information structure for Local Variable references"
                since="1.1">
         <description>
-          Reference information returned for 
+          Reference information returned for
           <datalink id="JVMTI_HEAP_REFERENCE_STACK_LOCAL"/> references.
         </description>
         <field id="thread_tag">
@@ -3688,7 +3688,7 @@
         <field id="depth">
 	  <jint/>
 	  <description>
-	    The depth of the frame. 
+	    The depth of the frame.
 	  </description>
 	</field>
         <field id="method">
@@ -3711,11 +3711,11 @@
 	</field>
       </typedef>
 
-      <typedef id="jvmtiHeapReferenceInfoJniLocal" 
-               label="Reference information structure for JNI local references" 
+      <typedef id="jvmtiHeapReferenceInfoJniLocal"
+               label="Reference information structure for JNI local references"
                since="1.1">
         <description>
-          Reference information returned for 
+          Reference information returned for
           <datalink id="JVMTI_HEAP_REFERENCE_JNI_LOCAL"/> references.
         </description>
         <field id="thread_tag">
@@ -3733,7 +3733,7 @@
         <field id="depth">
 	  <jint/>
 	  <description>
-	    The depth of the frame. 
+	    The depth of the frame.
 	  </description>
 	</field>
         <field id="method">
@@ -3744,8 +3744,8 @@
 	</field>
       </typedef>
 
-      <typedef id="jvmtiHeapReferenceInfoReserved" 
-               label="Reference information structure for Other references" 
+      <typedef id="jvmtiHeapReferenceInfoReserved"
+               label="Reference information structure for Other references"
                since="1.1">
         <description>
           Reference information returned for other references.
@@ -3800,8 +3800,8 @@
 	</field>
       </typedef>
 
-      <uniontypedef id="jvmtiHeapReferenceInfo" 
-               label="Reference information structure" 
+      <uniontypedef id="jvmtiHeapReferenceInfo"
+               label="Reference information structure"
                since="1.1">
         <description>
           The information returned about referrers.
@@ -3809,50 +3809,50 @@
         </description>
 	<field id="field">
 	  <struct>jvmtiHeapReferenceInfoField</struct>
-	  <description>	    
-	    The referrer information for 
-            <datalink id="JVMTI_HEAP_REFERENCE_FIELD"/> 
+	  <description>
+	    The referrer information for
+            <datalink id="JVMTI_HEAP_REFERENCE_FIELD"/>
             and <datalink id="JVMTI_HEAP_REFERENCE_STATIC_FIELD"/> references.
 	  </description>
 	</field>
 	<field id="array">
 	  <struct>jvmtiHeapReferenceInfoArray</struct>
-	  <description>	    
-	    The referrer information for 
+	  <description>
+	    The referrer information for
 	    For <datalink id="JVMTI_HEAP_REFERENCE_ARRAY_ELEMENT"/> references.
 	  </description>
 	</field>
 	<field id="constant_pool">
 	  <struct>jvmtiHeapReferenceInfoConstantPool</struct>
-	  <description>	    
-	    The referrer information for 
+	  <description>
+	    The referrer information for
 	    For <datalink id="JVMTI_HEAP_REFERENCE_CONSTANT_POOL"/> references.
 	  </description>
 	</field>
         <field id="stack_local">
 	  <struct>jvmtiHeapReferenceInfoStackLocal</struct>
-	  <description>	    
-	    The referrer information for 
+	  <description>
+	    The referrer information for
 	    For <datalink id="JVMTI_HEAP_REFERENCE_STACK_LOCAL"/> references.
 	  </description>
 	</field>
         <field id="jni_local">
 	  <struct>jvmtiHeapReferenceInfoJniLocal</struct>
-	  <description>	    
-	    The referrer information for 
+	  <description>
+	    The referrer information for
 	    For <datalink id="JVMTI_HEAP_REFERENCE_JNI_LOCAL"/> references.
 	  </description>
 	</field>
         <field id="other">
 	  <struct>jvmtiHeapReferenceInfoReserved</struct>
-	  <description>	    
+	  <description>
 	    reserved for future use.
 	  </description>
 	</field>
       </uniontypedef>
 
-      <typedef id="jvmtiHeapCallbacks" 
-               label="Heap callback function structure" 
+      <typedef id="jvmtiHeapCallbacks"
+               label="Heap callback function structure"
                since="1.1">
         <field id="heap_iteration_callback">
 	  <ptrtype>
@@ -3860,22 +3860,22 @@
 	  </ptrtype>
 	  <description>
 	    The callback to be called to describe an
-	    object in the heap. Used by the 
+	    object in the heap. Used by the
             <functionlink id="IterateThroughHeap"/> function, ignored by the
             <functionlink id="FollowReferences"/> function.
 	  </description>
-	</field>		  
+	</field>
         <field id="heap_reference_callback">
 	  <ptrtype>
 	    <struct>jvmtiHeapReferenceCallback</struct>
 	  </ptrtype>
 	  <description>
 	    The callback to be called to describe an
-	    object reference.  Used by the 
+	    object reference.  Used by the
             <functionlink id="FollowReferences"/> function, ignored by the
             <functionlink id="IterateThroughHeap"/> function.
 	  </description>
-	</field>		  
+	</field>
         <field id="primitive_field_callback">
 	  <ptrtype>
 	    <struct>jvmtiPrimitiveFieldCallback</struct>
@@ -3884,7 +3884,7 @@
             The callback to be called to describe a
             primitive field.
           </description>
-	</field>		  
+	</field>
         <field id="array_primitive_value_callback">
 	  <ptrtype>
 	    <struct>jvmtiArrayPrimitiveValueCallback</struct>
@@ -3893,7 +3893,7 @@
 	    The callback to be called to describe an
 	    array of primitive values.
 	  </description>
-	</field>		  
+	</field>
         <field id="string_primitive_value_callback">
 	  <ptrtype>
 	    <struct>jvmtiStringPrimitiveValueCallback</struct>
@@ -3901,7 +3901,7 @@
 	  <description>
 	    The callback to be called to describe a String value.
 	  </description>
-	</field>		  
+	</field>
         <field id="reserved5">
 	  <ptrtype>
 	    <struct>jvmtiReservedCallback</struct>
@@ -3909,7 +3909,7 @@
 	  <description>
 	    Reserved for future use..
 	  </description>
-	</field>		  
+	</field>
         <field id="reserved6">
 	  <ptrtype>
 	    <struct>jvmtiReservedCallback</struct>
@@ -3917,7 +3917,7 @@
 	  <description>
 	    Reserved for future use..
 	  </description>
-	</field>		  
+	</field>
         <field id="reserved7">
 	  <ptrtype>
 	    <struct>jvmtiReservedCallback</struct>
@@ -3925,7 +3925,7 @@
 	  <description>
 	    Reserved for future use..
 	  </description>
-	</field>		  
+	</field>
         <field id="reserved8">
 	  <ptrtype>
 	    <struct>jvmtiReservedCallback</struct>
@@ -3933,7 +3933,7 @@
 	  <description>
 	    Reserved for future use..
 	  </description>
-	</field>		  
+	</field>
         <field id="reserved9">
 	  <ptrtype>
 	    <struct>jvmtiReservedCallback</struct>
@@ -3941,7 +3941,7 @@
 	  <description>
 	    Reserved for future use..
 	  </description>
-	</field>		  
+	</field>
         <field id="reserved10">
 	  <ptrtype>
 	    <struct>jvmtiReservedCallback</struct>
@@ -3949,7 +3949,7 @@
 	  <description>
 	    Reserved for future use..
 	  </description>
-	</field>		  
+	</field>
         <field id="reserved11">
 	  <ptrtype>
 	    <struct>jvmtiReservedCallback</struct>
@@ -3957,7 +3957,7 @@
 	  <description>
 	    Reserved for future use..
 	  </description>
-	</field>		  
+	</field>
         <field id="reserved12">
 	  <ptrtype>
 	    <struct>jvmtiReservedCallback</struct>
@@ -3965,7 +3965,7 @@
 	  <description>
 	    Reserved for future use..
 	  </description>
-	</field>		  
+	</field>
         <field id="reserved13">
 	  <ptrtype>
 	    <struct>jvmtiReservedCallback</struct>
@@ -3973,7 +3973,7 @@
 	  <description>
 	    Reserved for future use..
 	  </description>
-	</field>		  
+	</field>
         <field id="reserved14">
 	  <ptrtype>
 	    <struct>jvmtiReservedCallback</struct>
@@ -3981,7 +3981,7 @@
 	  <description>
 	    Reserved for future use..
 	  </description>
-	</field>		  
+	</field>
         <field id="reserved15">
 	  <ptrtype>
 	    <struct>jvmtiReservedCallback</struct>
@@ -3989,7 +3989,7 @@
 	  <description>
 	    Reserved for future use..
 	  </description>
-	</field>		  
+	</field>
       </typedef>
 
 
@@ -4033,10 +4033,10 @@
         <param id="class_tag">
 	  <jlong/>
 	  <description>
-	    The tag of the class of object (zero if the class is not tagged). 
-	    If the object represents a runtime class, 
-            the <code>class_tag</code> is the tag 
-	    associated with <code>java.lang.Class</code> 
+	    The tag of the class of object (zero if the class is not tagged).
+	    If the object represents a runtime class,
+            the <code>class_tag</code> is the tag
+	    associated with <code>java.lang.Class</code>
             (zero if <code>java.lang.Class</code> is not tagged).
 	  </description>
 	</param>
@@ -4051,7 +4051,7 @@
 	  <description>
 	    The object tag value, or zero if the object is not tagged.
 	    To set the tag value to be associated with the object
-	    the agent sets the <code>jlong</code> pointed to by the parameter. 
+	    the agent sets the <code>jlong</code> pointed to by the parameter.
 	  </description>
 	</param>
         <param id="length">
@@ -4063,17 +4063,17 @@
         <param id="user_data">
 	  <outptr><void/></outptr>
 	  <description>
-	    The user supplied data that was passed into the iteration function. 
-	  </description>
-	</param>
-      </parameters>
-    </callback>  
+	    The user supplied data that was passed into the iteration function.
+	  </description>
+	</param>
+      </parameters>
+    </callback>
 
     <callback id="jvmtiHeapReferenceCallback" since="1.1">
       <jint/>
       <synopsis>Heap Reference Callback</synopsis>
       <description>
-        Agent supplied callback function.	
+        Agent supplied callback function.
 	Describes a reference from an object or the VM (the referrer) to another object
 	(the referree) or a heap root to a referree.
         <p/>
@@ -4097,12 +4097,12 @@
 	    <struct>jvmtiHeapReferenceInfo</struct>
 	  </inptr>
 	  <description>
-	    Details about the reference. 
+	    Details about the reference.
             Set when the <datalink id="jvmtiHeapReferenceCallback.reference_kind">reference_kind</datalink> is
             <datalink id="JVMTI_HEAP_REFERENCE_FIELD"/>,
 	    <datalink id="JVMTI_HEAP_REFERENCE_STATIC_FIELD"/>,
 	    <datalink id="JVMTI_HEAP_REFERENCE_ARRAY_ELEMENT"/>,
-	    <datalink id="JVMTI_HEAP_REFERENCE_CONSTANT_POOL"/>, 
+	    <datalink id="JVMTI_HEAP_REFERENCE_CONSTANT_POOL"/>,
             <datalink id="JVMTI_HEAP_REFERENCE_STACK_LOCAL"/>,
             or <datalink id="JVMTI_HEAP_REFERENCE_JNI_LOCAL"/>.
             Otherwise <code>NULL</code>.
@@ -4111,9 +4111,9 @@
         <param id="class_tag">
 	  <jlong/>
 	  <description>
-	    The tag of the class of referree object (zero if the class is not tagged). 
-            If the referree object represents a runtime class, 
-            the <code>class_tag</code> is the tag 
+	    The tag of the class of referree object (zero if the class is not tagged).
+            If the referree object represents a runtime class,
+            the <code>class_tag</code> is the tag
             associated with <code>java.lang.Class</code>
             (zero if <code>java.lang.Class</code> is not tagged).
 	  </description>
@@ -4131,14 +4131,14 @@
         <param id="size">
 	  <jlong/>
 	  <description>
-	    Size of the referree object (in bytes). 
+	    Size of the referree object (in bytes).
             See <functionlink id="GetObjectSize"/>.
 	  </description>
 	</param>
         <param id="tag_ptr">
 	  <outptr><jlong/></outptr>
 	  <description>
-	    Points to the referree object tag value, or zero if the object is not 
+	    Points to the referree object tag value, or zero if the object is not
 	    tagged.
 	    To set the tag value to be associated with the object
 	    the agent sets the <code>jlong</code> pointed to by the parameter.
@@ -4147,14 +4147,14 @@
         <param id="referrer_tag_ptr">
 	  <outptr><jlong/></outptr>
 	  <description>
-	    Points to the tag of the referrer object, or 
+	    Points to the tag of the referrer object, or
             points to the zero if the referrer
-	    object is not tagged. 
+	    object is not tagged.
             <code>NULL</code> if the referrer in not an object (that is,
             this callback is reporting a heap root).
 	    To set the tag value to be associated with the referrer object
 	    the agent sets the <code>jlong</code> pointed to by the parameter.
-            If this callback is reporting a reference from an object to itself, 
+            If this callback is reporting a reference from an object to itself,
             <code>referrer_tag_ptr == tag_ptr</code>.
 	  </description>
 	</param>
@@ -4167,7 +4167,7 @@
         <param id="user_data">
 	  <outptr><void/></outptr>
 	  <description>
-	    The user supplied data that was passed into the iteration function. 
+	    The user supplied data that was passed into the iteration function.
 	  </description>
 	</param>
       </parameters>
@@ -4177,7 +4177,7 @@
       <jint/>
       <synopsis>Primitive Field Callback</synopsis>
       <description>
-        Agent supplied callback function which	
+        Agent supplied callback function which
         describes a primitive field of an object (<i>the object</i>).
         A primitive field is a field whose type is a primitive type.
         This callback will describe a static field if the object is a class,
@@ -4195,7 +4195,7 @@
 	<param id="kind">
 	  <enum>jvmtiHeapReferenceKind</enum>
 	  <description>
-	    The kind of field -- instance or static (<datalink id="JVMTI_HEAP_REFERENCE_FIELD"/> or 
+	    The kind of field -- instance or static (<datalink id="JVMTI_HEAP_REFERENCE_FIELD"/> or
             <datalink id="JVMTI_HEAP_REFERENCE_STATIC_FIELD"/>).
 	  </description>
 	</param>
@@ -4210,17 +4210,17 @@
         <param id="object_class_tag">
 	  <jlong/>
 	  <description>
-            The tag of the class of the object (zero if the class is not tagged). 
-            If the object represents a runtime class, the 
-            <code>object_class_tag</code> is the tag 
-            associated with <code>java.lang.Class</code> 
+            The tag of the class of the object (zero if the class is not tagged).
+            If the object represents a runtime class, the
+            <code>object_class_tag</code> is the tag
+            associated with <code>java.lang.Class</code>
             (zero if <code>java.lang.Class</code> is not tagged).
 	  </description>
 	</param>
         <param id="object_tag_ptr">
 	  <outptr><jlong/></outptr>
 	  <description>
-	    Points to the tag of the object, or zero if the object is not 
+	    Points to the tag of the object, or zero if the object is not
 	    tagged.
 	    To set the tag value to be associated with the object
 	    the agent sets the <code>jlong</code> pointed to by the parameter.
@@ -4241,7 +4241,7 @@
         <param id="user_data">
 	  <outptr><void/></outptr>
 	  <description>
-	    The user supplied data that was passed into the iteration function. 
+	    The user supplied data that was passed into the iteration function.
 	  </description>
 	</param>
       </parameters>
@@ -4251,7 +4251,7 @@
       <jint/>
       <synopsis>Array Primitive Value Callback</synopsis>
       <description>
-        Agent supplied callback function.	
+        Agent supplied callback function.
 	Describes the values in an array of a primitive type.
         <p/>
         This function should return a bit vector of the desired
@@ -4266,20 +4266,20 @@
         <param id="class_tag">
 	  <jlong/>
 	  <description>
-	    The tag of the class of the array object (zero if the class is not tagged). 
+	    The tag of the class of the array object (zero if the class is not tagged).
 	  </description>
 	</param>
         <param id="size">
 	  <jlong/>
 	  <description>
-	    Size of the array (in bytes). 
+	    Size of the array (in bytes).
             See <functionlink id="GetObjectSize"/>.
 	  </description>
 	</param>
         <param id="tag_ptr">
 	  <outptr><jlong/></outptr>
 	  <description>
-	    Points to the tag of the array object, or zero if the object is not 
+	    Points to the tag of the array object, or zero if the object is not
 	    tagged.
 	    To set the tag value to be associated with the object
 	    the agent sets the <code>jlong</code> pointed to by the parameter.
@@ -4307,7 +4307,7 @@
         <param id="user_data">
 	  <outptr><void/></outptr>
 	  <description>
-	    The user supplied data that was passed into the iteration function. 
+	    The user supplied data that was passed into the iteration function.
 	  </description>
 	</param>
       </parameters>
@@ -4317,7 +4317,7 @@
       <jint/>
       <synopsis>String Primitive Value Callback</synopsis>
       <description>
-        Agent supplied callback function.	
+        Agent supplied callback function.
 	Describes the value of a java.lang.String.
         <p/>
         This function should return a bit vector of the desired
@@ -4332,21 +4332,21 @@
         <param id="class_tag">
 	  <jlong/>
 	  <description>
-	    The tag of the class of the String class (zero if the class is not tagged). 
+	    The tag of the class of the String class (zero if the class is not tagged).
             <issue>Is this needed?</issue>
 	  </description>
 	</param>
         <param id="size">
 	  <jlong/>
 	  <description>
-	    Size of the string (in bytes). 
+	    Size of the string (in bytes).
             See <functionlink id="GetObjectSize"/>.
 	  </description>
 	</param>
         <param id="tag_ptr">
 	  <outptr><jlong/></outptr>
 	  <description>
-	    Points to the tag of the String object, or zero if the object is not 
+	    Points to the tag of the String object, or zero if the object is not
 	    tagged.
 	    To set the tag value to be associated with the object
 	    the agent sets the <code>jlong</code> pointed to by the parameter.
@@ -4361,15 +4361,15 @@
         <param id="value_length">
 	  <jint/>
 	  <description>
-	    The length of the string. 
-            The length is equal to the number of 16-bit Unicode 
+	    The length of the string.
+            The length is equal to the number of 16-bit Unicode
             characters in the string.
 	  </description>
 	</param>
         <param id="user_data">
 	  <outptr><void/></outptr>
 	  <description>
-	    The user supplied data that was passed into the iteration function. 
+	    The user supplied data that was passed into the iteration function.
 	  </description>
 	</param>
       </parameters>
@@ -4388,27 +4388,27 @@
 
     <function id="FollowReferences" num="115" since="1.1">
       <synopsis>Follow References</synopsis>
-      <description>	
-        This function initiates a traversal over the objects that are 
+      <description>
+        This function initiates a traversal over the objects that are
         directly and indirectly reachable from the specified object or,
-        if <code>initial_object</code> is not specified, all objects 
+        if <code>initial_object</code> is not specified, all objects
         reachable from the heap roots.
-	The heap root are the set of system classes, 
-	JNI globals, references from thread stacks, and other objects used as roots 
-	for the purposes of garbage collection. 
+	The heap root are the set of system classes,
+	JNI globals, references from thread stacks, and other objects used as roots
+	for the purposes of garbage collection.
         <p/>
         This function operates by traversing the reference graph.
         Let <i>A</i>, <i>B</i>, ... represent objects.
         When a reference from <i>A</i> to <i>B</i> is traversed,
-        when a reference from a heap root to <i>B</i> is traversed, 
-        or when <i>B</i> is specified as the <paramlink id="initial_object"/>, 
+        when a reference from a heap root to <i>B</i> is traversed,
+        or when <i>B</i> is specified as the <paramlink id="initial_object"/>,
         then <i>B</i> is said to be <i>visited</i>.
-        A reference from <i>A</i> to <i>B</i> is not traversed until <i>A</i> 
+        A reference from <i>A</i> to <i>B</i> is not traversed until <i>A</i>
         is visited.
         References are reported in the same order that the references are traversed.
-        Object references are reported by invoking the agent supplied  
+        Object references are reported by invoking the agent supplied
         callback function <functionlink id="jvmtiHeapReferenceCallback"/>.
-        In a reference from <i>A</i> to <i>B</i>, <i>A</i> is known 
+        In a reference from <i>A</i> to <i>B</i>, <i>A</i> is known
         as the <i>referrer</i> and <i>B</i> as the <i>referree</i>.
         The callback is invoked exactly once for each reference from a referrer;
         this is true even if there are reference cycles or multiple paths to
@@ -4416,10 +4416,10 @@
         There may be more than one reference between a referrer and a referree,
         each reference is reported.
         These references may be distinguished by examining the
-        <datalink 
+        <datalink
          id="jvmtiHeapReferenceCallback.reference_kind"><code>reference_kind</code></datalink>
          and
-        <datalink 
+        <datalink
          id="jvmtiHeapReferenceCallback.reference_info"><code>reference_info</code></datalink>
         parameters of the <functionlink id="jvmtiHeapReferenceCallback"/> callback.
 	<p/>
@@ -4456,10 +4456,10 @@
         whether the callback will be invoked, it does not influence
         which objects are visited nor does it influence whether other callbacks
         will be invoked.
-        However, the 
+        However, the
         <datalink id="jvmtiHeapVisitControl">visit control flags</datalink>
         returned by <functionlink id="jvmtiHeapReferenceCallback"/>
-        do determine if the objects referenced by the 
+        do determine if the objects referenced by the
         current object as visited.
         The <datalink id="jvmtiHeapFilter">heap filter flags</datalink>
         and <paramlink id="klass"/> provided as parameters to this function
@@ -4468,7 +4468,7 @@
         For example, if the only callback that was set is
         <fieldlink id="array_primitive_value_callback" struct="jvmtiHeapCallbacks"/> and <code>klass</code>
         is set to the array of bytes class, then only arrays of byte will be
-        reported.  
+        reported.
         The table below summarizes this:
         <p/>
         <table>
@@ -4547,22 +4547,22 @@
         <p/>
         During the execution of this function the state of the heap
         does not change: no objects are allocated, no objects are
-        garbage collected, and the state of objects (including 
-        held values) does not change. 
-        As a result, threads executing Java 
+        garbage collected, and the state of objects (including
+        held values) does not change.
+        As a result, threads executing Java
         programming language code, threads attempting to resume the
-        execution of Java programming language code, and threads 
+        execution of Java programming language code, and threads
         attempting to execute JNI functions are typically stalled.
       </description>
       <origin>new</origin>
       <capabilities>
         <required id="can_tag_objects"></required>
       </capabilities>
-      <parameters>             
+      <parameters>
         <param id="heap_filter">
           <jint/>
           <description>
-            This bit vector of 
+            This bit vector of
             <datalink id="jvmtiHeapFilter">heap filter flags</datalink>.
             restricts the objects for which the callback function is called.
             This applies to both the object and primitive callbacks.
@@ -4575,7 +4575,7 @@
                     class</nullok>
           </ptrtype>
           <description>
-            Callbacks are only reported when the object is an instance of 
+            Callbacks are only reported when the object is an instance of
             this class.
             Objects which are instances of a subclass of <code>klass</code>
             are not reported.
@@ -4599,14 +4599,14 @@
           <description>
             Structure defining the set of callback functions.
           </description>
-        </param>                  
+        </param>
         <param id="user_data">
           <inbuf>
             <void/>
             <nullok><code>NULL</code> is passed as the user supplied data</nullok>
           </inbuf>
           <description>
-            User supplied data to be passed to the callback. 
+            User supplied data to be passed to the callback.
           </description>
         </param>
       </parameters>
@@ -4623,12 +4623,12 @@
 
     <function id="IterateThroughHeap" num="116" since="1.1">
       <synopsis>Iterate Through Heap</synopsis>
-      <description>        
-        Initiate an iteration over all objects in the heap. 
-        This includes both reachable and 
+      <description>
+        Initiate an iteration over all objects in the heap.
+        This includes both reachable and
         unreachable objects. Objects are visited in no particular order.
         <p/>
-        Heap objects are reported by invoking the agent supplied 
+        Heap objects are reported by invoking the agent supplied
         callback function <functionlink id="jvmtiHeapIterationCallback"/>.
         References between objects are not reported.
         If only reachable objects are desired, or if object reference information
@@ -4642,7 +4642,7 @@
         <functionlink id="jvmtiStringPrimitiveValueCallback"/>.
         A primitive field
         is reported after the object with that field is visited;
-        it is reported by invoking the agent supplied 
+        it is reported by invoking the agent supplied
         callback function
         <functionlink id="jvmtiPrimitiveFieldCallback"/>.
         <p/>
@@ -4660,7 +4660,7 @@
         For example, if the only callback that was set is
         <fieldlink id="array_primitive_value_callback" struct="jvmtiHeapCallbacks"/> and <code>klass</code>
         is set to the array of bytes class, then only arrays of byte will be
-        reported. The table below summarizes this (contrast this with 
+        reported. The table below summarizes this (contrast this with
         <functionlink id="FollowReferences"/>):
         <p/>
         <table>
@@ -4739,11 +4739,11 @@
         <p/>
         During the execution of this function the state of the heap
         does not change: no objects are allocated, no objects are
-        garbage collected, and the state of objects (including 
-        held values) does not change. 
-        As a result, threads executing Java 
+        garbage collected, and the state of objects (including
+        held values) does not change.
+        As a result, threads executing Java
         programming language code, threads attempting to resume the
-        execution of Java programming language code, and threads 
+        execution of Java programming language code, and threads
         attempting to execute JNI functions are typically stalled.
       </description>
       <origin>new</origin>
@@ -4754,7 +4754,7 @@
         <param id="heap_filter">
           <jint/>
           <description>
-            This bit vector of 
+            This bit vector of
             <datalink id="jvmtiHeapFilter">heap filter flags</datalink>.
             restricts the objects for which the callback function is called.
             This applies to both the object and primitive callbacks.
@@ -4766,7 +4766,7 @@
             <nullok>callbacks are not limited to instances of a particular class</nullok>
           </ptrtype>
           <description>
-            Callbacks are only reported when the object is an instance of 
+            Callbacks are only reported when the object is an instance of
             this class.
             Objects which are instances of a subclass of <code>klass</code>
             are not reported.
@@ -4781,14 +4781,14 @@
           <description>
             Structure defining the set callback functions.
           </description>
-        </param>                  
+        </param>
         <param id="user_data">
           <inbuf>
             <void/>
             <nullok><code>NULL</code> is passed as the user supplied data</nullok>
           </inbuf>
           <description>
-            User supplied data to be passed to the callback. 
+            User supplied data to be passed to the callback.
           </description>
         </param>
       </parameters>
@@ -4803,7 +4803,7 @@
       <synopsis>Get Tag</synopsis>
       <description>
         Retrieve the tag associated with an object.
-        The tag is a long value typically used to store a 
+        The tag is a long value typically used to store a
         unique identifier or pointer to object information.
         The tag is set with
         <functionlink id="SetTag"></functionlink>.
@@ -4824,7 +4824,7 @@
         <param id="tag_ptr">
 	  <outptr><jlong/></outptr>
 	  <description>
-	    On return, the referenced long is set to the value 
+	    On return, the referenced long is set to the value
 	    of the tag.
 	  </description>
 	</param>
@@ -4837,7 +4837,7 @@
       <synopsis>Set Tag</synopsis>
       <description>
         Set the tag associated with an object.
-        The tag is a long value typically used to store a 
+        The tag is a long value typically used to store a
         unique identifier or pointer to object information.
         The tag is visible with
         <functionlink id="GetTag"></functionlink>.
@@ -4895,7 +4895,7 @@
 	    <jint/>
 	  </outptr>
 	    <description>
-	      Return the number of objects with any of the tags 
+	      Return the number of objects with any of the tags
 	      in <paramlink id="tags"/>.
 	    </description>
 	</param>
@@ -4905,7 +4905,7 @@
 	    <nullok>this information is not returned</nullok>
 	  </allocbuf>
 	    <description>
-	      Returns the array of objects with any of the tags 
+	      Returns the array of objects with any of the tags
 	      in <paramlink id="tags"/>.
 	    </description>
 	</param>
@@ -4936,13 +4936,13 @@
         This function does not return until the garbage collection
         is finished.
         <p/>
-        Although garbage collection is as complete 
-        as possible there is no guarantee that all 
+        Although garbage collection is as complete
+        as possible there is no guarantee that all
         <eventlink id="ObjectFree"/>
-        events will have been 
-        sent by the time that this function 
-        returns. In particular, an object may be 
-        prevented from being freed because it 
+        events will have been
+        sent by the time that this function
+        returns. In particular, an object may be
+        prevented from being freed because it
         is awaiting finalization.
       </description>
       <origin>new</origin>
@@ -4960,7 +4960,7 @@
   <category id="Heap_1_0" label="Heap (1.0)">
     <intro>
       <b>
-        These functions and data types were introduced in the original 
+        These functions and data types were introduced in the original
         <jvmti/> version 1.0 and have been superseded by more
       </b>
       <internallink id="Heap"><b>powerful and flexible versions</b></internallink>
@@ -4970,7 +4970,7 @@
       <ul>
         <li>
           <b>
-            Allow access to primitive values (the value of Strings, arrays, 
+            Allow access to primitive values (the value of Strings, arrays,
             and primitive fields)
           </b>
         </li>
@@ -5034,13 +5034,13 @@
         <constants id="jvmtiObjectReferenceKind" label="Object Reference Enumeration" kind="enum">
 	  <constant id="JVMTI_REFERENCE_CLASS" num="1">
 	    Reference from an object to its class.
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_REFERENCE_FIELD" num="2">
 	    Reference from an object to the value of one of its instance fields.
 	    For references of this kind the <code>referrer_index</code>
 	    parameter to the <internallink id="jvmtiObjectReferenceCallback">
             jvmtiObjectReferenceCallback</internallink> is the index of the
- 	    the instance field. The index is based on the order of all the 
+ 	    the instance field. The index is based on the order of all the
             object's fields. This includes all fields of the directly declared
             static and instance fields in the class, and includes all fields (both
             public and private) fields declared in superclasses and superinterfaces.
@@ -5063,7 +5063,7 @@
 	  </constant>
 	  <constant id="JVMTI_REFERENCE_PROTECTION_DOMAIN" num="6">
 	    Reference from a class to its protection domain.
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_REFERENCE_INTERFACE" num="7">
 	    Reference from a class to one of its interfaces.
 	  </constant>
@@ -5072,7 +5072,7 @@
 	    For references of this kind the <code>referrer_index</code>
 	    parameter to the <internallink id="jvmtiObjectReferenceCallback">
             jvmtiObjectReferenceCallback</internallink> is the index of the
- 	    the static field. The index is based on the order of all the 
+ 	    the static field. The index is based on the order of all the
             object's fields. This includes all fields of the directly declared
             static and instance fields in the class, and includes all fields (both
             public and private) fields declared in superclasses and superinterfaces.
@@ -5095,11 +5095,11 @@
 
         <constants id="jvmtiIterationControl" label="Iteration Control Enumeration" kind="enum">
 	  <constant id="JVMTI_ITERATION_CONTINUE" num="1">
-	    Continue the iteration.  
+	    Continue the iteration.
             If this is a reference iteration, follow the references of this object.
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_ITERATION_IGNORE" num="2">
-	    Continue the iteration.  
+	    Continue the iteration.
             If this is a reference iteration, ignore the references of this object.
 	  </constant>
 	  <constant id="JVMTI_ITERATION_ABORT" num="0">
@@ -5125,9 +5125,9 @@
         <param id="class_tag">
 	  <jlong/>
 	  <description>
-	    The tag of the class of object (zero if the class is not tagged). 
-	    If the object represents a runtime class, 
-            the <code>class_tag</code> is the tag 
+	    The tag of the class of object (zero if the class is not tagged).
+	    If the object represents a runtime class,
+            the <code>class_tag</code> is the tag
 	    associated with <code>java.lang.Class</code>
             (zero if <code>java.lang.Class</code> is not tagged).
 	  </description>
@@ -5143,82 +5143,82 @@
 	  <description>
 	    The object tag value, or zero if the object is not tagged.
 	    To set the tag value to be associated with the object
-	    the agent sets the <code>jlong</code> pointed to by the parameter. 
-	  </description>
-	</param>
-        <param id="user_data">
-	  <outptr><void/></outptr>
-	  <description>
-	    The user supplied data that was passed into the iteration function. 
-	  </description>
-	</param>
-      </parameters>
-    </callback>  
-
-    <callback id="jvmtiHeapRootCallback">
-      <enum>jvmtiIterationControl</enum>
-      <synopsis>Heap Root Object Callback</synopsis>
-      <description>
-        Agent supplied callback function.
-	Describes (but does not pass in) an object that is a root for the purposes
-	of garbage collection.
-        <p/>
-        Return value should be <code>JVMTI_ITERATION_CONTINUE</code> to continue iteration,
-        <code>JVMTI_ITERATION_IGNORE</code> to continue iteration without pursuing 
-        references from referree object or <code>JVMTI_ITERATION_ABORT</code> to stop iteration.
-        <p/>
-        See the <internallink id="heapCallbacks">heap callback
-        function restrictions</internallink>.
-      </description>
-      <parameters>
-	<param id="root_kind">
-	  <enum>jvmtiHeapRootKind</enum>
-	  <description>
-	    The kind of heap root.
-	  </description>
-	</param>
-        <param id="class_tag">
-	  <jlong/>
-	  <description>
-	    The tag of the class of object (zero if the class is not tagged). 
-            If the object represents a runtime class, the <code>class_tag</code> is the tag 
-            associated with <code>java.lang.Class</code> 
-            (zero if <code>java.lang.Class</code> is not tagged).
-	  </description>
-	</param>
-        <param id="size">
-	  <jlong/>
-	  <description>
-	    Size of the object (in bytes). See <functionlink id="GetObjectSize"/>.
-	  </description>
-	</param>
-        <param id="tag_ptr">
-	  <outptr><jlong/></outptr>
-	  <description>
-	    The object tag value, or zero if the object is not tagged.
-	    To set the tag value to be associated with the object
 	    the agent sets the <code>jlong</code> pointed to by the parameter.
 	  </description>
 	</param>
         <param id="user_data">
 	  <outptr><void/></outptr>
 	  <description>
-	    The user supplied data that was passed into the iteration function. 
-	  </description>
-	</param>
-      </parameters>
-    </callback> 
+	    The user supplied data that was passed into the iteration function.
+	  </description>
+	</param>
+      </parameters>
+    </callback>
+
+    <callback id="jvmtiHeapRootCallback">
+      <enum>jvmtiIterationControl</enum>
+      <synopsis>Heap Root Object Callback</synopsis>
+      <description>
+        Agent supplied callback function.
+	Describes (but does not pass in) an object that is a root for the purposes
+	of garbage collection.
+        <p/>
+        Return value should be <code>JVMTI_ITERATION_CONTINUE</code> to continue iteration,
+        <code>JVMTI_ITERATION_IGNORE</code> to continue iteration without pursuing
+        references from referree object or <code>JVMTI_ITERATION_ABORT</code> to stop iteration.
+        <p/>
+        See the <internallink id="heapCallbacks">heap callback
+        function restrictions</internallink>.
+      </description>
+      <parameters>
+	<param id="root_kind">
+	  <enum>jvmtiHeapRootKind</enum>
+	  <description>
+	    The kind of heap root.
+	  </description>
+	</param>
+        <param id="class_tag">
+	  <jlong/>
+	  <description>
+	    The tag of the class of object (zero if the class is not tagged).
+            If the object represents a runtime class, the <code>class_tag</code> is the tag
+            associated with <code>java.lang.Class</code>
+            (zero if <code>java.lang.Class</code> is not tagged).
+	  </description>
+	</param>
+        <param id="size">
+	  <jlong/>
+	  <description>
+	    Size of the object (in bytes). See <functionlink id="GetObjectSize"/>.
+	  </description>
+	</param>
+        <param id="tag_ptr">
+	  <outptr><jlong/></outptr>
+	  <description>
+	    The object tag value, or zero if the object is not tagged.
+	    To set the tag value to be associated with the object
+	    the agent sets the <code>jlong</code> pointed to by the parameter.
+	  </description>
+	</param>
+        <param id="user_data">
+	  <outptr><void/></outptr>
+	  <description>
+	    The user supplied data that was passed into the iteration function.
+	  </description>
+	</param>
+      </parameters>
+    </callback>
 
     <callback id="jvmtiStackReferenceCallback">
       <enum>jvmtiIterationControl</enum>
       <synopsis>Stack Reference Object Callback</synopsis>
       <description>
         Agent supplied callback function.
-	Describes (but does not pass in) an object on the stack that is a root for 
+	Describes (but does not pass in) an object on the stack that is a root for
 	the purposes of garbage collection.
         <p/>
         Return value should be <code>JVMTI_ITERATION_CONTINUE</code> to continue iteration,
-        <code>JVMTI_ITERATION_IGNORE</code> to continue iteration without pursuing 
+        <code>JVMTI_ITERATION_IGNORE</code> to continue iteration without pursuing
         references from referree object or <code>JVMTI_ITERATION_ABORT</code> to stop iteration.
         <p/>
         See the <internallink id="heapCallbacks">heap callback
@@ -5235,9 +5235,9 @@
         <param id="class_tag">
 	  <jlong/>
 	  <description>
-           The tag of the class of object (zero if the class is not tagged). 
-           If the object represents a runtime class, the  <code>class_tag</code> is the tag 
-           associated with <code>java.lang.Class</code> 
+           The tag of the class of object (zero if the class is not tagged).
+           If the object represents a runtime class, the  <code>class_tag</code> is the tag
+           associated with <code>java.lang.Class</code>
            (zero if <code>java.lang.Class</code> is not tagged).
 	  </description>
 	</param>
@@ -5264,7 +5264,7 @@
         <param id="depth">
 	  <jint/>
 	  <description>
-	    The depth of the frame. 
+	    The depth of the frame.
 	  </description>
 	</param>
         <param id="method">
@@ -5282,7 +5282,7 @@
         <param id="user_data">
 	  <outptr><void/></outptr>
 	  <description>
-	    The user supplied data that was passed into the iteration function. 
+	    The user supplied data that was passed into the iteration function.
 	  </description>
 	</param>
       </parameters>
@@ -5292,12 +5292,12 @@
       <enum>jvmtiIterationControl</enum>
       <synopsis>Object Reference Callback</synopsis>
       <description>
-        Agent supplied callback function.	
+        Agent supplied callback function.
 	Describes a reference from an object (the referrer) to another object
 	(the referree).
         <p/>
         Return value should be <code>JVMTI_ITERATION_CONTINUE</code> to continue iteration,
-        <code>JVMTI_ITERATION_IGNORE</code> to continue iteration without pursuing 
+        <code>JVMTI_ITERATION_IGNORE</code> to continue iteration without pursuing
         references from referree object or <code>JVMTI_ITERATION_ABORT</code> to stop iteration.
         <p/>
         See the <internallink id="heapCallbacks">heap callback
@@ -5313,24 +5313,24 @@
         <param id="class_tag">
 	  <jlong/>
 	  <description>
-	    The tag of the class of referree object (zero if the class is not tagged). 
+	    The tag of the class of referree object (zero if the class is not tagged).
             If the referree object represents a runtime class,
-            the  <code>class_tag</code> is the tag 
-            associated with <code>java.lang.Class</code> 
+            the  <code>class_tag</code> is the tag
+            associated with <code>java.lang.Class</code>
             (zero if <code>java.lang.Class</code> is not tagged).
 	  </description>
 	</param>
         <param id="size">
 	  <jlong/>
 	  <description>
-	    Size of the referree object (in bytes). 
+	    Size of the referree object (in bytes).
             See <functionlink id="GetObjectSize"/>.
 	  </description>
 	</param>
         <param id="tag_ptr">
 	  <outptr><jlong/></outptr>
 	  <description>
-	    The referree object tag value, or zero if the object is not 
+	    The referree object tag value, or zero if the object is not
 	    tagged.
 	    To set the tag value to be associated with the object
 	    the agent sets the <code>jlong</code> pointed to by the parameter.
@@ -5345,11 +5345,11 @@
 	</param>
 	<param id="referrer_index">
 	  <jint/>
-	  <description>	    
+	  <description>
 	    For references of type <code>JVMTI_REFERENCE_FIELD</code> or
             <code>JVMTI_REFERENCE_STATIC_FIELD</code> the index
-	    of the field in the referrer object. The index is based on the 
-	    order of all the object's fields - see <internallink 
+	    of the field in the referrer object. The index is based on the
+	    order of all the object's fields - see <internallink
 	    id="JVMTI_REFERENCE_FIELD">JVMTI_REFERENCE_FIELD</internallink>
             or <internallink
 	    id="JVMTI_REFERENCE_STATIC_FIELD">JVMTI_REFERENCE_STATIC_FIELD
@@ -5362,7 +5362,7 @@
 	    For references of type <code>JVMTI_REFERENCE_CONSTANT_POOL</code>
 	    the index into the constant pool of the class - see
 	    <internallink id="JVMTI_REFERENCE_CONSTANT_POOL">
-	    JVMTI_REFERENCE_CONSTANT_POOL</internallink> for further 
+	    JVMTI_REFERENCE_CONSTANT_POOL</internallink> for further
 	    description.
 	    <p/>
 	    For references of other kinds the <code>referrer_index</code> is
@@ -5372,7 +5372,7 @@
         <param id="user_data">
 	  <outptr><void/></outptr>
 	  <description>
-	    The user supplied data that was passed into the iteration function. 
+	    The user supplied data that was passed into the iteration function.
 	  </description>
 	</param>
       </parameters>
@@ -5380,17 +5380,17 @@
 
     <function id="IterateOverObjectsReachableFromObject" num="109">
       <synopsis>Iterate Over Objects Reachable From Object</synopsis>
-      <description>	
+      <description>
         This function iterates over all objects that are directly
         and indirectly reachable from the specified object.
 	For each object <i>A</i> (known
-	as the referrer) with a reference to object <i>B</i> the specified 
+	as the referrer) with a reference to object <i>B</i> the specified
 	callback function is called to describe the object reference.
         The callback is called exactly once for each reference from a referrer;
         this is true even if there are reference cycles or multiple paths to
         the referrer.
         There may be more than one reference between a referrer and a referree,
-        These may be distinguished by the 
+        These may be distinguished by the
         <datalink id="jvmtiObjectReferenceCallback.reference_kind"></datalink> and
         <datalink id="jvmtiObjectReferenceCallback.referrer_index"></datalink>.
         The callback for an object will always occur after the callback for
@@ -5401,18 +5401,18 @@
         <p/>
         During the execution of this function the state of the heap
         does not change: no objects are allocated, no objects are
-        garbage collected, and the state of objects (including 
-        held values) does not change. 
-        As a result, threads executing Java 
+        garbage collected, and the state of objects (including
+        held values) does not change.
+        As a result, threads executing Java
         programming language code, threads attempting to resume the
-        execution of Java programming language code, and threads 
+        execution of Java programming language code, and threads
         attempting to execute JNI functions are typically stalled.
       </description>
       <origin>new</origin>
       <capabilities>
         <required id="can_tag_objects"></required>
       </capabilities>
-      <parameters>             
+      <parameters>
         <param id="object">
 	  <jobject/>
 	    <description>
@@ -5427,14 +5427,14 @@
 	      The callback to be called to describe each
 	      object reference.
 	    </description>
-	</param>		  
+	</param>
         <param id="user_data">
 	  <inbuf>
 	    <void/>
 	    <nullok><code>NULL</code> is passed as the user supplied data</nullok>
 	  </inbuf>
 	  <description>
-	    User supplied data to be passed to the callback. 
+	    User supplied data to be passed to the callback.
 	  </description>
 	</param>
       </parameters>
@@ -5447,9 +5447,9 @@
       <description>
         This function iterates over the root objects and all objects that
         are directly and indirectly reachable from the root objects.
-	The root objects comprise the set of system classes, 
-	JNI globals, references from thread stacks, and other objects used as roots 
-	for the purposes of garbage collection. 
+	The root objects comprise the set of system classes,
+	JNI globals, references from thread stacks, and other objects used as roots
+	for the purposes of garbage collection.
 	<p/>
 	For each root the <paramlink id="heap_root_callback"></paramlink>
 	or <paramlink id="stack_ref_callback"></paramlink> callback is called.
@@ -5462,7 +5462,7 @@
         this is true even if there are reference cycles or multiple paths to
         the referrer.
         There may be more than one reference between a referrer and a referree,
-        These may be distinguished by the 
+        These may be distinguished by the
         <datalink id="jvmtiObjectReferenceCallback.reference_kind"></datalink> and
         <datalink id="jvmtiObjectReferenceCallback.referrer_index"></datalink>.
         The callback for an object will always occur after the callback for
@@ -5472,26 +5472,26 @@
         references which are reported.
 	<p/>
 	Roots are always reported to the profiler before any object references
-	are reported. In other words, the <paramlink id="object_ref_callback"></paramlink> 
+	are reported. In other words, the <paramlink id="object_ref_callback"></paramlink>
 	callback will not be called until the appropriate callback has been called
-	for all roots. If the <paramlink id="object_ref_callback"></paramlink> callback is 
+	for all roots. If the <paramlink id="object_ref_callback"></paramlink> callback is
 	specified as <code>NULL</code> then this function returns after
 	reporting the root objects to the profiler.
         <p/>
         During the execution of this function the state of the heap
         does not change: no objects are allocated, no objects are
-        garbage collected, and the state of objects (including 
-        held values) does not change. 
-        As a result, threads executing Java 
+        garbage collected, and the state of objects (including
+        held values) does not change.
+        As a result, threads executing Java
         programming language code, threads attempting to resume the
-        execution of Java programming language code, and threads 
+        execution of Java programming language code, and threads
         attempting to execute JNI functions are typically stalled.
       </description>
       <origin>new</origin>
       <capabilities>
         <required id="can_tag_objects"></required>
       </capabilities>
-      <parameters>      	
+      <parameters>
         <param id="heap_root_callback">
 	  <ptrtype>
 	    <struct>jvmtiHeapRootCallback</struct>
@@ -5502,7 +5502,7 @@
 	      <code>JVMTI_HEAP_ROOT_JNI_GLOBAL</code>,
 	      <code>JVMTI_HEAP_ROOT_SYSTEM_CLASS</code>,
 	      <code>JVMTI_HEAP_ROOT_MONITOR</code>,
-	      <code>JVMTI_HEAP_ROOT_THREAD</code>, or 
+	      <code>JVMTI_HEAP_ROOT_THREAD</code>, or
 	      <code>JVMTI_HEAP_ROOT_OTHER</code>.
 	    </description>
 	</param>
@@ -5532,7 +5532,7 @@
 	    <nullok><code>NULL</code> is passed as the user supplied data</nullok>
 	  </inbuf>
 	  <description>
-	    User supplied data to be passed to the callback. 
+	    User supplied data to be passed to the callback.
 	  </description>
 	</param>
       </parameters>
@@ -5542,14 +5542,14 @@
 
     <function id="IterateOverHeap" num="111">
       <synopsis>Iterate Over Heap</synopsis>
-      <description>        
-        Iterate over all objects in the heap. This includes both reachable and 
+      <description>
+        Iterate over all objects in the heap. This includes both reachable and
 	unreachable objects.
 	<p/>
 	The <paramlink id="object_filter"></paramlink> parameter indicates the
 	objects for which the callback function is called. If this parameter
-	is <code>JVMTI_HEAP_OBJECT_TAGGED</code> then the callback will only be 
-	called for every object that is tagged. If the parameter is 
+	is <code>JVMTI_HEAP_OBJECT_TAGGED</code> then the callback will only be
+	called for every object that is tagged. If the parameter is
 	<code>JVMTI_HEAP_OBJECT_UNTAGGED</code> then the callback will only be
 	for objects that are not tagged. If the parameter
 	is <code>JVMTI_HEAP_OBJECT_EITHER</code> then the callback will be
@@ -5558,11 +5558,11 @@
         <p/>
         During the execution of this function the state of the heap
         does not change: no objects are allocated, no objects are
-        garbage collected, and the state of objects (including 
-        held values) does not change. 
-        As a result, threads executing Java 
+        garbage collected, and the state of objects (including
+        held values) does not change.
+        As a result, threads executing Java
         programming language code, threads attempting to resume the
-        execution of Java programming language code, and threads 
+        execution of Java programming language code, and threads
         attempting to execute JNI functions are typically stalled.
       </description>
       <origin>new</origin>
@@ -5591,7 +5591,7 @@
 	    <nullok><code>NULL</code> is passed as the user supplied data</nullok>
 	  </inbuf>
 	  <description>
-	    User supplied data to be passed to the callback. 
+	    User supplied data to be passed to the callback.
 	  </description>
 	</param>
       </parameters>
@@ -5602,15 +5602,15 @@
     <function id="IterateOverInstancesOfClass" num="112">
       <synopsis>Iterate Over Instances Of Class</synopsis>
       <description>
-        Iterate over all objects in the heap that are instances of the specified class. 
-        This includes direct instances of the specified class and 
+        Iterate over all objects in the heap that are instances of the specified class.
+        This includes direct instances of the specified class and
         instances of all subclasses of the specified class.
 	This includes both reachable and unreachable objects.
 	<p/>
 	The <paramlink id="object_filter"></paramlink> parameter indicates the
 	objects for which the callback function is called. If this parameter
-	is <code>JVMTI_HEAP_OBJECT_TAGGED</code> then the callback will only be 
-	called for every object that is tagged. If the parameter is 
+	is <code>JVMTI_HEAP_OBJECT_TAGGED</code> then the callback will only be
+	called for every object that is tagged. If the parameter is
 	<code>JVMTI_HEAP_OBJECT_UNTAGGED</code> then the callback will only be
 	called for objects that are not tagged. If the parameter
 	is <code>JVMTI_HEAP_OBJECT_EITHER</code> then the callback will be
@@ -5619,11 +5619,11 @@
 	<p/>
 	During the execution of this function the state of the heap
 	does not change: no objects are allocated, no objects are
-	garbage collected, and the state of objects (including 
-	held values) does not change. 
-	As a result, threads executing Java 
+	garbage collected, and the state of objects (including
+	held values) does not change.
+	As a result, threads executing Java
 	programming language code, threads attempting to resume the
-	execution of Java programming language code, and threads 
+	execution of Java programming language code, and threads
 	attempting to execute JNI functions are typically stalled.
       </description>
       <origin>new</origin>
@@ -5649,7 +5649,7 @@
 	  </ptrtype>
 	    <description>
 	      The iterator function to be called for each
-	      <paramlink id="klass"/> instance matching 
+	      <paramlink id="klass"/> instance matching
               the <paramlink id="object_filter"/>.
 	    </description>
 	</param>
@@ -5659,7 +5659,7 @@
 	    <nullok><code>NULL</code> is passed as the user supplied data</nullok>
 	  </inbuf>
 	  <description>
-	    User supplied data to be passed to the callback. 
+	    User supplied data to be passed to the callback.
 	  </description>
 	</param>
       </parameters>
@@ -5672,19 +5672,19 @@
   <category id="local" label="Local Variable">
 
     <intro>
-      These functions are used to retrieve or set the value of a local variable. 
+      These functions are used to retrieve or set the value of a local variable.
       The variable is identified by the depth of the frame containing its
-      value and the variable's slot number within that frame. 
-      The mapping of variables to 
-      slot numbers can be obtained with the function 
+      value and the variable's slot number within that frame.
+      The mapping of variables to
+      slot numbers can be obtained with the function
       <functionlink id="GetLocalVariableTable"></functionlink>.
     </intro>
 
     <function id="GetLocalObject" num="21">
       <synopsis>Get Local Variable - Object</synopsis>
       <description>
-	This function can be used to retrieve the value of a local 
-        variable whose type is <code>Object</code> or a subclass of <code>Object</code>. 
+	This function can be used to retrieve the value of a local
+        variable whose type is <code>Object</code> or a subclass of <code>Object</code>.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -5712,7 +5712,7 @@
 	<param id="value_ptr">
 	  <outptr><jobject/></outptr>
 	    <description>
-	      On return, points to the variable's value. 
+	      On return, points to the variable's value.
 	    </description>
 	</param>
       </parameters>
@@ -5720,11 +5720,11 @@
 	<error id="JVMTI_ERROR_INVALID_SLOT">
 	  Invalid <code>slot</code>.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
           The variable type is not
           <code>Object</code> or a subclass of <code>Object</code>.
 	</error>
-	<error id="JVMTI_ERROR_OPAQUE_FRAME"> 
+	<error id="JVMTI_ERROR_OPAQUE_FRAME">
 	  Not a visible frame
 	</error>
       </errors>
@@ -5736,7 +5736,7 @@
         This function can be used to retrieve the value of the local object
         variable at slot 0 (the "<code>this</code>" object) from non-static
         frames.  This function can retrieve the "<code>this</code>" object from
-        native method frames, whereas <code>GetLocalObject()</code> would 
+        native method frames, whereas <code>GetLocalObject()</code> would
         return <code>JVMTI_ERROR_OPAQUE_FRAME</code> in those cases.
       </description>
       <origin>new</origin>
@@ -5759,7 +5759,7 @@
 	<param id="value_ptr">
 	  <outptr><jobject/></outptr>
 	    <description>
-	      On return, points to the variable's value. 
+	      On return, points to the variable's value.
 	    </description>
 	</param>
       </parameters>
@@ -5772,10 +5772,10 @@
     <function id="GetLocalInt" num="22">
       <synopsis>Get Local Variable - Int</synopsis>
       <description>
-	This function can be used to retrieve the value of a local 
+	This function can be used to retrieve the value of a local
         variable whose type is <code>int</code>,
-        <code>short</code>, <code>char</code>, <code>byte</code>, or 
-	<code>boolean</code>. 
+        <code>short</code>, <code>char</code>, <code>byte</code>, or
+	<code>boolean</code>.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -5803,7 +5803,7 @@
 	<param id="value_ptr">
 	  <outptr><jint/></outptr>
 	  <description>
-	    On return, points to the variable's value. 
+	    On return, points to the variable's value.
 	  </description>
 	</param>
       </parameters>
@@ -5811,13 +5811,13 @@
 	<error id="JVMTI_ERROR_INVALID_SLOT">
 	  Invalid <code>slot</code>.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
-	  The variable type is not 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
+	  The variable type is not
           <code>int</code>, <code>short</code>,
-          <code>char</code>, <code>byte</code>, or 
+          <code>char</code>, <code>byte</code>, or
   	  <code>boolean</code>.
 	</error>
-	<error id="JVMTI_ERROR_OPAQUE_FRAME"> 
+	<error id="JVMTI_ERROR_OPAQUE_FRAME">
 	  Not a visible frame
 	</error>
       </errors>
@@ -5826,8 +5826,8 @@
     <function id="GetLocalLong" num="23">
       <synopsis>Get Local Variable - Long</synopsis>
       <description>
-	This function can be used to retrieve the value of a local 
-        variable whose type is <code>long</code>. 
+	This function can be used to retrieve the value of a local
+        variable whose type is <code>long</code>.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -5855,7 +5855,7 @@
 	<param id="value_ptr">
 	  <outptr><jlong/></outptr>
 	  <description>
-	    On return, points to the variable's value. 
+	    On return, points to the variable's value.
 	  </description>
 	</param>
       </parameters>
@@ -5863,10 +5863,10 @@
 	<error id="JVMTI_ERROR_INVALID_SLOT">
 	  Invalid <code>slot</code>.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
 	  The variable type is not <code>long</code>.
 	</error>
-	<error id="JVMTI_ERROR_OPAQUE_FRAME"> 
+	<error id="JVMTI_ERROR_OPAQUE_FRAME">
 	  Not a visible frame
 	</error>
       </errors>
@@ -5875,8 +5875,8 @@
     <function id="GetLocalFloat" num="24">
       <synopsis>Get Local Variable - Float</synopsis>
       <description>
-	This function can be used to retrieve the value of a local 
-        variable whose type is <code>float</code>. 
+	This function can be used to retrieve the value of a local
+        variable whose type is <code>float</code>.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -5904,7 +5904,7 @@
 	<param id="value_ptr">
 	  <outptr><jfloat/></outptr>
 	  <description>
-	    On return, points to the variable's value. 
+	    On return, points to the variable's value.
 	  </description>
 	</param>
       </parameters>
@@ -5912,10 +5912,10 @@
 	<error id="JVMTI_ERROR_INVALID_SLOT">
 	  Invalid <code>slot</code>.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
 	  The variable type is not <code>float</code>.
 	</error>
-	<error id="JVMTI_ERROR_OPAQUE_FRAME"> 
+	<error id="JVMTI_ERROR_OPAQUE_FRAME">
 	  Not a visible frame
 	</error>
       </errors>
@@ -5924,8 +5924,8 @@
     <function id="GetLocalDouble" num="25">
       <synopsis>Get Local Variable - Double</synopsis>
       <description>
-	This function can be used to retrieve the value of a local 
-        variable whose type is <code>long</code>. 
+	This function can be used to retrieve the value of a local
+        variable whose type is <code>long</code>.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -5953,7 +5953,7 @@
 	<param id="value_ptr">
 	  <outptr><jdouble/></outptr>
 	  <description>
-	    On return, points to the variable's value. 
+	    On return, points to the variable's value.
 	  </description>
 	</param>
       </parameters>
@@ -5961,10 +5961,10 @@
 	<error id="JVMTI_ERROR_INVALID_SLOT">
 	  Invalid <code>slot</code>.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
 	  The variable type is not <code>double</code>.
 	</error>
-	<error id="JVMTI_ERROR_OPAQUE_FRAME"> 
+	<error id="JVMTI_ERROR_OPAQUE_FRAME">
 	  Not a visible frame
 	</error>
       </errors>
@@ -5973,8 +5973,8 @@
     <function id="SetLocalObject" num="26">
       <synopsis>Set Local Variable - Object</synopsis>
       <description>
-	This function can be used to set the value of a local 
-        variable whose type is <code>Object</code> or a subclass of <code>Object</code>. 
+	This function can be used to set the value of a local
+        variable whose type is <code>Object</code> or a subclass of <code>Object</code>.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -6015,7 +6015,7 @@
 	  <code>Object</code> or a subclass of <code>Object</code>.
 	</error>
 	<error id="JVMTI_ERROR_TYPE_MISMATCH">
-	  The supplied <paramlink id="value"/> is not compatible 
+	  The supplied <paramlink id="value"/> is not compatible
 	  with the variable type.
 	</error>
 	<error id="JVMTI_ERROR_OPAQUE_FRAME">
@@ -6027,10 +6027,10 @@
     <function id="SetLocalInt" num="27">
       <synopsis>Set Local Variable - Int</synopsis>
       <description>
-	This function can be used to set the value of a local 
+	This function can be used to set the value of a local
         variable whose type is <code>int</code>,
-        <code>short</code>, <code>char</code>, <code>byte</code>, or 
-	<code>boolean</code>. 
+        <code>short</code>, <code>char</code>, <code>byte</code>, or
+	<code>boolean</code>.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -6066,10 +6066,10 @@
 	<error id="JVMTI_ERROR_INVALID_SLOT">
 	  Invalid <code>slot</code>.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
-	  The variable type is not 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
+	  The variable type is not
           <code>int</code>, <code>short</code>,
-          <code>char</code>, <code>byte</code>, or 
+          <code>char</code>, <code>byte</code>, or
   	  <code>boolean</code>.
 	</error>
 	<error id="JVMTI_ERROR_OPAQUE_FRAME">
@@ -6081,8 +6081,8 @@
     <function id="SetLocalLong" num="28">
       <synopsis>Set Local Variable - Long</synopsis>
       <description>
-	This function can be used to set the value of a local 
-        variable whose type is <code>long</code>. 
+	This function can be used to set the value of a local
+        variable whose type is <code>long</code>.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -6118,7 +6118,7 @@
 	<error id="JVMTI_ERROR_INVALID_SLOT">
 	  Invalid <code>slot</code>.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
 	  The variable type is not <code>long</code>.
 	</error>
 	<error id="JVMTI_ERROR_OPAQUE_FRAME">
@@ -6130,8 +6130,8 @@
     <function id="SetLocalFloat" num="29">
       <synopsis>Set Local Variable - Float</synopsis>
       <description>
-	This function can be used to set the value of a local 
-        variable whose type is <code>float</code>. 
+	This function can be used to set the value of a local
+        variable whose type is <code>float</code>.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -6167,7 +6167,7 @@
 	<error id="JVMTI_ERROR_INVALID_SLOT">
 	  Invalid <code>slot</code>.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
 	  The variable type is not <code>float</code>.
 	</error>
 	<error id="JVMTI_ERROR_OPAQUE_FRAME">
@@ -6179,8 +6179,8 @@
     <function id="SetLocalDouble" num="30">
       <synopsis>Set Local Variable - Double</synopsis>
       <description>
-	This function can be used to set the value of a local 
-        variable whose type is <code>double</code>. 
+	This function can be used to set the value of a local
+        variable whose type is <code>double</code>.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -6216,7 +6216,7 @@
 	<error id="JVMTI_ERROR_INVALID_SLOT">
 	  Invalid <code>slot</code>.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
 	  The variable type is not <code>double</code>.
 	</error>
 	<error id="JVMTI_ERROR_OPAQUE_FRAME">
@@ -6267,7 +6267,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_DUPLICATE"> 
+	<error id="JVMTI_ERROR_DUPLICATE">
 	  The designated bytecode already has a breakpoint.
 	</error>
       </errors>
@@ -6304,7 +6304,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_NOT_FOUND"> 
+	<error id="JVMTI_ERROR_NOT_FOUND">
 	  There's no breakpoint at the designated bytecode.
 	</error>
       </errors>
@@ -6325,14 +6325,14 @@
 	by <code>klass</code> and
 	<code>field</code> is about to be accessed.
 	An event will be generated for each access of the field
-	until it is canceled with 
+	until it is canceled with
 	<functionlink id="ClearFieldAccessWatch"></functionlink>.
 	Field accesses from Java programming language code or from JNI code are watched,
 	fields modified by other means are not watched.
 	Note that <jvmti/> users should be aware that their own field accesses
 	will trigger the watch.
 	A field can only have one field access watch set.
-	Modification of a field is not considered an access--use 
+	Modification of a field is not considered an access--use
 	<functionlink id="SetFieldModificationWatch"></functionlink>
 	to monitor modifications.
       </description>
@@ -6356,7 +6356,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_DUPLICATE"> 
+	<error id="JVMTI_ERROR_DUPLICATE">
 	  The designated field is already being watched for accesses.
 	</error>
       </errors>
@@ -6365,8 +6365,8 @@
     <function id="ClearFieldAccessWatch" num="42">
       <synopsis>Clear Field Access Watch</synopsis>
       <description>
-	Cancel a field access watch previously set by 
-	<functionlink id="SetFieldAccessWatch"></functionlink>, on the 
+	Cancel a field access watch previously set by
+	<functionlink id="SetFieldAccessWatch"></functionlink>, on the
 	field specified
 	by <code>klass</code> and
 	<code>field</code>.
@@ -6391,7 +6391,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_NOT_FOUND"> 
+	<error id="JVMTI_ERROR_NOT_FOUND">
 	  The designated field is not being watched for accesses.
 	</error>
       </errors>
@@ -6405,7 +6405,7 @@
 	by <code>klass</code> and
 	<code>field</code> is about to be modified.
 	An event will be generated for each modification of the field
-	until it is canceled with 
+	until it is canceled with
 	<functionlink id="ClearFieldModificationWatch"></functionlink>.
 	Field modifications from Java programming language code or from JNI code are watched,
 	fields modified by other means are not watched.
@@ -6433,7 +6433,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_DUPLICATE"> 
+	<error id="JVMTI_ERROR_DUPLICATE">
 	  The designated field is already being watched for modifications.
 	</error>
       </errors>
@@ -6443,8 +6443,8 @@
       <synopsis>Clear Field Modification Watch</synopsis>
       <description>
 
-	Cancel a field modification watch previously set by 
-	<functionlink id="SetFieldModificationWatch"></functionlink>, on the 
+	Cancel a field modification watch previously set by
+	<functionlink id="SetFieldModificationWatch"></functionlink>, on the
 	field specified
 	by <code>klass</code> and
 	<code>field</code>.
@@ -6469,7 +6469,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_NOT_FOUND"> 
+	<error id="JVMTI_ERROR_NOT_FOUND">
 	  The designated field is not being watched for modifications.
 	</error>
       </errors>
@@ -6857,9 +6857,9 @@
 	<code>class_count_ptr</code>, and the array itself via
 	<code>classes_ptr</code>.
 	<p/>
-	Array classes of all types (including arrays of primitive types) are 
-	included in the returned list. Primitive classes (for example, 
-	<code>java.lang.Integer.TYPE</code>) are <i>not</i> included in this list. 
+	Array classes of all types (including arrays of primitive types) are
+	included in the returned list. Primitive classes (for example,
+	<code>java.lang.Integer.TYPE</code>) are <i>not</i> included in this list.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -6887,8 +6887,8 @@
       <synopsis>Get Classloader Classes</synopsis>
       <description>
 	Returns an array of those classes for which this class loader has
-	been recorded as an initiating loader. Each 
-	class in the returned array was created by this class loader, 
+	been recorded as an initiating loader. Each
+	class in the returned array was created by this class loader,
 	either by defining it directly or by delegation to another class loader.
 	See <vmspec chapter="5.3"/>.
 	<p/>
@@ -6930,14 +6930,14 @@
     <function id="GetClassSignature" phase="start" num="48">
       <synopsis>Get Class Signature</synopsis>
       <description>
-        For the class indicated by <code>klass</code>, return the 
-        <externallink id="docs/technotes/guides/jni/spec/types.html#type_signatures">JNI 
-            type signature</externallink> 
+        For the class indicated by <code>klass</code>, return the
+        <externallink id="jni/types.html#type-signatures">JNI
+            type signature</externallink>
         and the generic signature of the class.
         For example, <code>java.util.List</code> is <code>"Ljava/util/List;"</code>
         and <code>int[]</code> is <code>"[I"</code>
 	The returned name for primitive classes
-	is the type signature character of the corresponding primitive type. 
+	is the type signature character of the corresponding primitive type.
         For example, <code>java.lang.Integer.TYPE</code> is <code>"I"</code>.
       </description>
       <origin>jvmdiClone</origin>
@@ -6952,7 +6952,7 @@
 	</param>
 	<param id="signature_ptr">
 	  <allocbuf>
-            <char/>           
+            <char/>
             <nullok>the signature is not returned</nullok>
           </allocbuf>
 	  <description>
@@ -6962,14 +6962,14 @@
 	</param>
 	<param id="generic_ptr">
 	  <allocbuf>
-            <char/>           
+            <char/>
             <nullok>the generic signature is not returned</nullok>
           </allocbuf>
 	  <description>
 	    On return, points to the generic signature of the class, encoded as a
 	    <internallink id="mUTF">modified UTF-8</internallink> string.
             If there is no generic signature attribute for the class, then,
-            on return, points to <code>NULL</code>. 
+            on return, points to <code>NULL</code>.
 	  </description>
 	</param>
       </parameters>
@@ -6980,7 +6980,7 @@
     <function id="GetClassStatus" phase="start" num="49">
       <synopsis>Get Class Status</synopsis>
       <description>
-	Get the status of the class. Zero or more of the following bits can be 
+	Get the status of the class. Zero or more of the following bits can be
 	set.
 	<constants id="jvmtiClassStatus" label="Class Status Flags" kind="bits">
 	  <constant id="JVMTI_CLASS_STATUS_VERIFIED" num="1">
@@ -6999,7 +6999,7 @@
 	    Class is an array.  If set, all other bits are zero.
 	  </constant>
 	  <constant id="JVMTI_CLASS_STATUS_PRIMITIVE" num="32">
-	    Class is a primitive class (for example, <code>java.lang.Integer.TYPE</code>).  
+	    Class is a primitive class (for example, <code>java.lang.Integer.TYPE</code>).
 	    If set, all other bits are zero.
 	  </constant>
 	</constants>
@@ -7017,7 +7017,7 @@
 	<param id="status_ptr">
 	  <outptr><jint/></outptr>
 	  <description>
-	    On return, points to the current state of this class as one or 
+	    On return, points to the current state of this class as one or
 	    more of the <internallink id="jvmtiClassStatus">class status flags</internallink>.
 	  </description>
 	</param>
@@ -7030,11 +7030,11 @@
       <synopsis>Get Source File Name</synopsis>
       <description>
 	For the class indicated by <code>klass</code>, return the source file
-	name via <code>source_name_ptr</code>. The returned string 
-	is a file name only and never contains a directory name. 
+	name via <code>source_name_ptr</code>. The returned string
+	is a file name only and never contains a directory name.
 	<p/>
-	For primitive classes (for example, <code>java.lang.Integer.TYPE</code>) 
-	and for arrays this function returns 
+	For primitive classes (for example, <code>java.lang.Integer.TYPE</code>)
+	and for arrays this function returns
 	<errorlink id="JVMTI_ERROR_ABSENT_INFORMATION"></errorlink>.
       </description>
       <origin>jvmdi</origin>
@@ -7057,7 +7057,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_ABSENT_INFORMATION"> 
+	<error id="JVMTI_ERROR_ABSENT_INFORMATION">
 	  Class information does not include a source file name. This includes
 	  cases where the class is an array class or primitive class.
 	</error>
@@ -7072,17 +7072,17 @@
 	via <code>modifiers_ptr</code>.
 	Access flags are defined in <vmspec chapter="4"/>.
 	<p/>
-	If the class is an array class, then its public, private, and protected 
-	modifiers are the same as those of its component type. For arrays of 
-	primitives, this component type is represented by one of the primitive 
-	classes (for example, <code>java.lang.Integer.TYPE</code>). 
+	If the class is an array class, then its public, private, and protected
+	modifiers are the same as those of its component type. For arrays of
+	primitives, this component type is represented by one of the primitive
+	classes (for example, <code>java.lang.Integer.TYPE</code>).
 	<p/>
-	If the class is a primitive class, its public modifier is always true, 
-	and its protected and private modifiers are always false. 
+	If the class is a primitive class, its public modifier is always true,
+	and its protected and private modifiers are always false.
 	<p/>
-	If the class is an array class or a primitive class then its final 
-	modifier is always true and its interface modifier is always false. 
-	The values of its other modifiers are not determined by this specification. 
+	If the class is an array class or a primitive class then its final
+	modifier is always true and its interface modifier is always false.
+	The values of its other modifiers are not determined by this specification.
 
       </description>
       <origin>jvmdi</origin>
@@ -7112,7 +7112,7 @@
       <description>
 	For the class indicated by <code>klass</code>, return a count of
 	methods via <code>method_count_ptr</code> and a list of
-	method IDs via <code>methods_ptr</code>. The method list contains 
+	method IDs via <code>methods_ptr</code>. The method list contains
 	constructors and static initializers as well as true methods.
 	Only directly declared methods are returned (not inherited methods).
 	An empty method list is returned for array classes and primitive classes
@@ -7185,7 +7185,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_CLASS_NOT_PREPARED"> 
+	<error id="JVMTI_ERROR_CLASS_NOT_PREPARED">
 	  <paramlink id="klass"></paramlink> is not prepared.
 	</error>
       </errors>
@@ -7194,7 +7194,7 @@
     <function id="GetImplementedInterfaces" phase="start" num="54">
       <synopsis>Get Implemented Interfaces</synopsis>
       <description>
-	Return the direct super-interfaces of this class. For a class, this 
+	Return the direct super-interfaces of this class. For a class, this
 	function returns the interfaces declared in its <code>implements</code>
 	clause. For an interface, this function returns the interfaces declared in
 	its <code>extends</code> clause.
@@ -7225,7 +7225,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_CLASS_NOT_PREPARED"> 
+	<error id="JVMTI_ERROR_CLASS_NOT_PREPARED">
 	  <paramlink id="klass"></paramlink> is not prepared.
 	</error>
       </errors>
@@ -7234,10 +7234,10 @@
     <function id="GetClassVersionNumbers" phase="start" num="145" since="1.1">
       <synopsis>Get Class Version Numbers</synopsis>
       <description>
-        For the class indicated by <code>klass</code>, 
+        For the class indicated by <code>klass</code>,
         return the minor and major version numbers,
         as defined in
-        <vmspec chapter="4"/>. 
+        <vmspec chapter="4"/>.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -7253,7 +7253,7 @@
 	  <outptr><jint/></outptr>
 	  <description>
 	    On return, points to the value of the
-            <code>minor_version</code> item of the 
+            <code>minor_version</code> item of the
             Class File Format.
             Note: to be consistent with the Class File Format,
             the minor version number is the first parameter.
@@ -7263,13 +7263,13 @@
 	  <outptr><jint/></outptr>
 	  <description>
 	    On return, points to the value of the
-            <code>major_version</code> item of the 
+            <code>major_version</code> item of the
             Class File Format.
 	  </description>
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_ABSENT_INFORMATION"> 
+	<error id="JVMTI_ERROR_ABSENT_INFORMATION">
 	  The class is a primitive or array class.
 	</error>
       </errors>
@@ -7278,13 +7278,13 @@
     <function id="GetConstantPool" phase="start" num="146" since="1.1">
       <synopsis>Get Constant Pool</synopsis>
       <description>
-	For the class indicated by <code>klass</code>, 
+	For the class indicated by <code>klass</code>,
         return the raw bytes of the constant pool in the format of the
-        <code>constant_pool</code> item of 
+        <code>constant_pool</code> item of
         <vmspec chapter="4"/>.
         The format of the constant pool may differ between versions
-        of the Class File Format, so, the 
-        <functionlink id="GetClassVersionNumbers">minor and major 
+        of the Class File Format, so, the
+        <functionlink id="GetClassVersionNumbers">minor and major
         class version numbers</functionlink> should be checked for
         compatibility.
         <p/>
@@ -7294,17 +7294,17 @@
         more or fewer entries than the defining constant pool.
         Entries may be in a different order.
         The constant pool returned by GetConstantPool() will match the
-        constant pool used by 
+        constant pool used by
         <functionlink id="GetBytecodes">GetBytecodes()</functionlink>.
         That is, the bytecodes returned by GetBytecodes() will have
         constant pool indices which refer to constant pool entries returned
         by GetConstantPool().
-        Note that since <functionlink id="RetransformClasses"/> 
-        and <functionlink id="RedefineClasses"/> can change 
+        Note that since <functionlink id="RetransformClasses"/>
+        and <functionlink id="RedefineClasses"/> can change
         the constant pool, the constant pool returned by this function
-        can change accordingly.  Thus, the correspondence between 
+        can change accordingly.  Thus, the correspondence between
         GetConstantPool() and GetBytecodes() does not hold if there
-        is an intervening class retransformation or redefinition. 
+        is an intervening class retransformation or redefinition.
         The value of a constant pool entry used by a given bytecode will
         match that of the defining class file (even if the indices don't match).
         Constant pool entries which are not used directly or indirectly by
@@ -7342,13 +7342,13 @@
 	  <allocbuf outcount="constant_pool_byte_count_ptr"><uchar/></allocbuf>
 	    <description>
 	      On return, points to the raw constant pool, that is the bytes
-              defined by the <code>constant_pool</code> item of the 
+              defined by the <code>constant_pool</code> item of the
               Class File Format
 	    </description>
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_ABSENT_INFORMATION"> 
+	<error id="JVMTI_ERROR_ABSENT_INFORMATION">
 	  The class is a primitive or array class.
 	</error>
       </errors>
@@ -7360,7 +7360,7 @@
 	Determines whether a class object reference represents an interface.
 	The <code>jboolean</code> result is
 	<code>JNI_TRUE</code> if the "class" is actually an interface,
-	<code>JNI_FALSE</code> otherwise. 
+	<code>JNI_FALSE</code> otherwise.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -7390,7 +7390,7 @@
 	Determines whether a class object reference represents an array.
 	The <code>jboolean</code> result is
 	<code>JNI_TRUE</code> if the class is an array,
-	<code>JNI_FALSE</code> otherwise. 
+	<code>JNI_FALSE</code> otherwise.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -7420,11 +7420,11 @@
 	Determines whether a class is modifiable.
         If a class is modifiable (<paramlink id="is_modifiable_class_ptr"/>
         returns <code>JNI_TRUE</code>) the class can be
-        redefined with <functionlink id="RedefineClasses"/> (assuming 
+        redefined with <functionlink id="RedefineClasses"/> (assuming
         the agent possesses the
         <fieldlink id="can_redefine_classes" struct="jvmtiCapabilities"/>
         capability) or
-        retransformed with <functionlink id="RetransformClasses"/> (assuming 
+        retransformed with <functionlink id="RetransformClasses"/> (assuming
         the agent possesses the
         <fieldlink id="can_retransform_classes" struct="jvmtiCapabilities"/>
         capability).
@@ -7433,7 +7433,7 @@
         redefined nor retransformed.
         <p/>
         Primitive classes (for example, <code>java.lang.Integer.TYPE</code>),
-        array classes, and some implementation defined classes are never modifiable. 
+        array classes, and some implementation defined classes are never modifiable.
         <p/>
       </description>
       <origin>new</origin>
@@ -7511,11 +7511,11 @@
     <function id="GetSourceDebugExtension" phase="start" num="90">
       <synopsis>Get Source Debug Extension</synopsis>
       <description>
-	For the class indicated by <code>klass</code>, return the debug 
+	For the class indicated by <code>klass</code>, return the debug
         extension via <code>source_debug_extension_ptr</code>.
-        The returned string 
+        The returned string
 	contains exactly the debug extension information present in the
-	class file of <code>klass</code>. 
+	class file of <code>klass</code>.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -7537,7 +7537,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_ABSENT_INFORMATION"> 
+	<error id="JVMTI_ERROR_ABSENT_INFORMATION">
 	  Class information does not include a debug extension.
 	</error>
       </errors>
@@ -7546,15 +7546,15 @@
     <function id="RetransformClasses" jkernel="yes" num="152" since="1.1">
       <synopsis>Retransform Classes</synopsis>
       <description>
-        This function facilitates the 
+        This function facilitates the
         <internallink id="bci">bytecode instrumentation</internallink>
         of already loaded classes.
         To replace the class definition without reference to the existing
-        bytecodes, as one might do when recompiling from source for 
+        bytecodes, as one might do when recompiling from source for
         fix-and-continue debugging, <functionlink id="RedefineClasses"/>
         function should be used instead.
         <p/>
-        When classes are initially loaded or when they are 
+        When classes are initially loaded or when they are
         <functionlink id="RedefineClasses">redefined</functionlink>,
         the initial class file bytes can be transformed with the
         <eventlink id="ClassFileLoadHook"/> event.
@@ -7562,16 +7562,16 @@
         (whether or not a transformation has previously occurred).
         This retransformation follows these steps:
         <ul>
-          <li>starting from the initial class file bytes 
+          <li>starting from the initial class file bytes
           </li>
           <li>for each <fieldlink id="can_retransform_classes"
                      struct="jvmtiCapabilities">retransformation
                                                 incapable</fieldlink>
             agent which received a
             <code>ClassFileLoadHook</code> event during the previous
-            load or redefine, the bytes it returned 
+            load or redefine, the bytes it returned
             (via the <code>new_class_data</code> parameter)
-            are reused as the output of the transformation; 
+            are reused as the output of the transformation;
             note that this is equivalent to reapplying
             the previous transformation, unaltered. except that
             the <code>ClassFileLoadHook</code> event
@@ -7589,7 +7589,7 @@
         </ul>
         See the <eventlink id="ClassFileLoadHook"/> event for more details.
         <p/>
-        The initial class file bytes represent the bytes passed to 
+        The initial class file bytes represent the bytes passed to
         <code>ClassLoader.defineClass</code>
         or <code>RedefineClasses</code> (before any transformations
         were applied), however they may not exactly match them.
@@ -7601,13 +7601,13 @@
         order may not be preserved.
         <p/>
         Retransformation can cause new versions of methods to be installed.
-        Old method versions may become 
+        Old method versions may become
         <internallink id="obsoleteMethods">obsolete</internallink>
-        The new method version will be used on new invokes.  
+        The new method version will be used on new invokes.
         If a method has active stack frames, those active frames continue to
-        run the bytecodes of the original method version. 
-        <p/>
-        This function does not cause any initialization except that which 
+        run the bytecodes of the original method version.
+        <p/>
+        This function does not cause any initialization except that which
         would occur under the customary JVM semantics.
         In other words, retransforming a class does not cause its initializers to be
         run. The values of static fields will remain as they were
@@ -7620,7 +7620,7 @@
         All attributes are updated.
         <p/>
         Instances of the retransformed class are not affected -- fields retain their
-        previous values.  
+        previous values.
         <functionlink id="GetTag">Tags</functionlink> on the instances are
         also unaffected.
         <p/>
@@ -7629,8 +7629,8 @@
         will be sent.
         <p/>
         The retransformation may change method bodies, the constant pool and attributes.
-        The retransformation must not add, remove or rename fields or methods, change the 
-        signatures of methods, change modifiers, or change inheritance.  
+        The retransformation must not add, remove or rename fields or methods, change the
+        signatures of methods, change modifiers, or change inheritance.
         These restrictions may be lifted in future versions.
         See the error return description below for information on error codes
         returned if an unsupported retransformation is attempted.
@@ -7640,7 +7640,7 @@
         If any error code is returned other than <code>JVMTI_ERROR_NONE</code>,
         none of the classes to be retransformed will have a new definition installed.
         When this function returns (with the error code of <code>JVMTI_ERROR_NONE</code>)
-        all of the classes to be retransformed will have their new definitions installed.        
+        all of the classes to be retransformed will have their new definitions installed.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -7663,7 +7663,7 @@
       </parameters>
       <errors>
         <error id="JVMTI_ERROR_UNMODIFIABLE_CLASS">
-          One of the <paramlink id="classes"/> cannot be modified. 
+          One of the <paramlink id="classes"/> cannot be modified.
           See <functionlink id="IsModifiableClass"/>.
         </error>
         <error id="JVMTI_ERROR_INVALID_CLASS">
@@ -7676,7 +7676,7 @@
           A retransformed class file is malformed (The VM would return a <code>ClassFormatError</code>).
         </error>
         <error id="JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION">
-          The retransformed class file definitions would lead to a circular definition 
+          The retransformed class file definitions would lead to a circular definition
           (the VM would return a <code>ClassCircularityError</code>).
         </error>
         <error id="JVMTI_ERROR_FAILS_VERIFICATION">
@@ -7739,22 +7739,22 @@
 	This function is used to replace the definition of a class
 	with a new definition, as might be needed in fix-and-continue
 	debugging.
-	Where the existing class file bytes are to be transformed, for 
+	Where the existing class file bytes are to be transformed, for
 	example in
 	<internallink id="bci">bytecode instrumentation</internallink>,
 	<functionlink id="RetransformClasses"/> should be used.
 	<p/>
 	Redefinition can cause new versions of methods to be installed.
-	Old method versions may become 
+	Old method versions may become
 	<internallink id="obsoleteMethods">obsolete</internallink>
-	The new method version will be used on new invokes.  
+	The new method version will be used on new invokes.
 	If a method has active stack frames, those active frames continue to
-        run the bytecodes of the original method version. 
-	If resetting of stack frames is desired, use 
+        run the bytecodes of the original method version.
+	If resetting of stack frames is desired, use
 	<functionlink id="PopFrame"></functionlink>
 	to pop frames with obsolete method versions.
 	<p/>
-	This function does not cause any initialization except that which 
+	This function does not cause any initialization except that which
 	would occur under the customary JVM semantics.
 	In other words, redefining a class does not cause its initializers to be
 	run. The values of static fields will remain as they were
@@ -7767,7 +7767,7 @@
 	All attributes are updated.
 	<p/>
         Instances of the redefined class are not affected -- fields retain their
-        previous values.  
+        previous values.
 	<functionlink id="GetTag">Tags</functionlink> on the instances are
         also unaffected.
 	<p/>
@@ -7776,8 +7776,8 @@
         will be sent (if enabled), but no other <jvmti/> events will be sent.
         <p/>
         The redefinition may change method bodies, the constant pool and attributes.
-        The redefinition must not add, remove or rename fields or methods, change the 
-        signatures of methods, change modifiers, or change inheritance.  
+        The redefinition must not add, remove or rename fields or methods, change the
+        signatures of methods, change modifiers, or change inheritance.
         These restrictions may be lifted in future versions.
 	See the error return description below for information on error codes
 	returned if an unsupported redefinition is attempted.
@@ -7788,7 +7788,7 @@
         If any error code is returned other than <code>JVMTI_ERROR_NONE</code>,
         none of the classes to be redefined will have a new definition installed.
         When this function returns (with the error code of <code>JVMTI_ERROR_NONE</code>)
-        all of the classes to be redefined will have their new definitions installed.        
+        all of the classes to be redefined will have their new definitions installed.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -7827,7 +7827,7 @@
 	  A new class file is malformed (The VM would return a <code>ClassFormatError</code>).
 	</error>
 	<error id="JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION">
-	  The new class file definitions would lead to a circular definition 
+	  The new class file definitions would lead to a circular definition
 	  (the VM would return a <code>ClassCircularityError</code>).
 	</error>
 	<error id="JVMTI_ERROR_FAILS_VERIFICATION">
@@ -7876,7 +7876,7 @@
 	For the object indicated by <code>object</code>,
 	return via <code>size_ptr</code> the size of the object.
         This size is an implementation-specific approximation of
-        the amount of storage consumed by this object. 
+        the amount of storage consumed by this object.
         It may include some or all of the object's overhead, and thus
         is useful for comparison within an implementation but not
         between implementations.
@@ -7909,11 +7909,11 @@
 	For the object indicated by <code>object</code>,
 	return via <code>hash_code_ptr</code> a hash code.
         This hash code could be used to maintain a hash table of object references,
-        however, on some implementations this can cause significant performance 
-        impacts--in most cases 
-        <internallink id="Heap">tags</internallink> 
+        however, on some implementations this can cause significant performance
+        impacts--in most cases
+        <internallink id="Heap">tags</internallink>
         will be a more efficient means of associating information with objects.
-	This function guarantees 
+	This function guarantees
 	the same hash code value for a particular object throughout its life
       </description>
       <origin>jvmdi</origin>
@@ -7979,7 +7979,7 @@
       </typedef>
       <description>
 	Get information about the object's monitor.
-	The fields of the <functionlink id="jvmtiMonitorUsage"></functionlink> structure 
+	The fields of the <functionlink id="jvmtiMonitorUsage"></functionlink> structure
 	are filled in with information about usage of the monitor.
 	  <todo>
 	    Decide and then clarify suspend requirements.
@@ -7999,7 +7999,7 @@
 	<param id="info_ptr">
 	  <outptr><struct>jvmtiMonitorUsage</struct></outptr>
 	  <description>
-	    On return, filled with monitor information for the 
+	    On return, filled with monitor information for the
 	    specified object.
 	  </description>
 	</param>
@@ -8014,7 +8014,7 @@
       <description>
         Return the list of object monitors.
         <p/>
-        Note: details about each monitor can be examined with 
+        Note: details about each monitor can be examined with
         <functionlink id="GetObjectMonitorUsage"></functionlink>.
       </description>
       <origin>new</origin>
@@ -8025,7 +8025,7 @@
         <param id="monitorCnt">
 	  <outptr><jint/></outptr>
 	  <description>
-	    On return, pointer to the number 
+	    On return, pointer to the number
 	    of monitors returned in <code>monitors_ptr</code>.
 	  </description>
 	</param>
@@ -8056,7 +8056,7 @@
 	<paramlink id="signature_ptr"/>.
 	<p/>
         Field signatures are defined in the
-        <externallink id="docs/technotes/guides/jni/spec/jniTOC.html">JNI Specification</externallink>
+        <externallink id="jni/index.html">JNI Specification</externallink>
         and are referred to as <code>field descriptors</code> in
         <vmspec chapter="4.3.2"/>.
       </description>
@@ -8098,14 +8098,14 @@
 	</param>
 	<param id="generic_ptr">
 	  <allocbuf>
-            <char/>           
+            <char/>
             <nullok>the generic signature is not returned</nullok>
           </allocbuf>
 	  <description>
 	    On return, points to the generic signature of the field, encoded as a
 	    <internallink id="mUTF">modified UTF-8</internallink> string.
             If there is no generic signature attribute for the field, then,
-            on return, points to <code>NULL</code>. 
+            on return, points to <code>NULL</code>.
 	  </description>
 	</param>
       </parameters>
@@ -8187,7 +8187,7 @@
       <description>
 	For the field indicated by <code>klass</code> and <code>field</code>, return a
 	value indicating whether the field is synthetic via <code>is_synthetic_ptr</code>.
-	Synthetic fields are generated by the compiler but not present in the 
+	Synthetic fields are generated by the compiler but not present in the
 	original source code.
       </description>
       <origin>jvmdi</origin>
@@ -8241,7 +8241,7 @@
       An original method version which is not equivalent to the
       new method version is called obsolete and is assigned a new method ID;
       the original method ID now refers to the new method version.
-      A method ID can be tested for obsolescence with 
+      A method ID can be tested for obsolescence with
       <functionlink id="IsMethodObsolete"/>.
     </intro>
 
@@ -8253,8 +8253,8 @@
 	<code>signature_ptr</code>.
         <p/>
         Method signatures are defined in the
-        <externallink id="docs/technotes/guides/jni/spec/jniTOC.html">JNI Specification</externallink>
-        and are referred to as <code>method descriptors</code> in 
+        <externallink id="jni/index.html">JNI Specification</externallink>
+        and are referred to as <code>method descriptors</code> in
         <vmspec chapter="4.3.3"/>.
 	Note this is different
 	than method signatures as defined in the <i>Java Language Specification</i>.
@@ -8291,14 +8291,14 @@
 	</param>
 	<param id="generic_ptr">
 	  <allocbuf>
-            <char/>           
+            <char/>
             <nullok>the generic signature is not returned</nullok>
           </allocbuf>
 	  <description>
 	    On return, points to the generic signature of the method, encoded as a
 	    <internallink id="mUTF">modified UTF-8</internallink> string.
             If there is no generic signature attribute for the method, then,
-            on return, points to <code>NULL</code>. 
+            on return, points to <code>NULL</code>.
 	  </description>
 	</param>
       </parameters>
@@ -8379,7 +8379,7 @@
 	  For the method indicated by <code>method</code>,
 	  return the number of local variable slots used by the method,
 	  including the local variables used to pass parameters to the
-	  method on its invocation. 
+	  method on its invocation.
 	  <p/>
 	  See <code>max_locals</code> in <vmspec chapter="4.7.3"/>.
       </description>
@@ -8465,7 +8465,7 @@
 	For the method indicated by <code>method</code>,
 	return a table of source line number entries. The size of the table is
 	returned via <code>entry_count_ptr</code> and the table itself is
-	returned via <code>table_ptr</code>. 
+	returned via <code>table_ptr</code>.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -8498,7 +8498,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_ABSENT_INFORMATION"> 
+	<error id="JVMTI_ERROR_ABSENT_INFORMATION">
 	  Class information does not include line numbers.
 	</error>
       </errors>
@@ -8510,10 +8510,10 @@
 	For the method indicated by <code>method</code>,
 	return the beginning and ending addresses through
 	<code>start_location_ptr</code> and <code>end_location_ptr</code>. In a
-	conventional byte code indexing scheme, 
+	conventional byte code indexing scheme,
 	<code>start_location_ptr</code> will always point to zero
-	and <code>end_location_ptr</code> 
-	will always point to the byte code count minus one. 
+	and <code>end_location_ptr</code>
+	will always point to the byte code count minus one.
       </description>
       <origin>jvmdi</origin>
       <capabilities>
@@ -8534,9 +8534,9 @@
 	<param id="start_location_ptr">
 	  <outptr><jlocation/></outptr>
 	  <description>
-	    On return, points to the first location, or 
+	    On return, points to the first location, or
 	    <code>-1</code> if location information is not available.
-	    If the information is available and 
+	    If the information is available and
 	    <functionlink id="GetJLocationFormat"></functionlink>
 	    returns <datalink id="JVMTI_JLOCATION_JVMBCI"></datalink>
 	    then this will always be zero.
@@ -8551,7 +8551,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_ABSENT_INFORMATION"> 
+	<error id="JVMTI_ERROR_ABSENT_INFORMATION">
 	  Class information does not include method sizes.
 	</error>
       </errors>
@@ -8571,7 +8571,7 @@
 	  <jint/>
 	  <description>
             The length of the valid section for this local variable.
-	    The last code array index where the local variable is valid 
+	    The last code array index where the local variable is valid
             is <code>start_location + length</code>.
 	  </description>
 	</field>
@@ -8596,7 +8596,7 @@
 	  <description>
 	    The local variable's generic signature, encoded as a
 	    <internallink id="mUTF">modified UTF-8</internallink> string.
-            The value of this field will be <code>NULL</code> for any local 
+            The value of this field will be <code>NULL</code> for any local
             variable which does not have a generic type.
 	  </description>
 	</field>
@@ -8722,7 +8722,7 @@
       <description>
 	For the method indicated by <code>method</code>, return a
 	value indicating whether the method is synthetic via <code>is_synthetic_ptr</code>.
-	Synthetic methods are generated by the compiler but not present in the 
+	Synthetic methods are generated by the compiler but not present in the
 	original source code.
       </description>
       <origin>jvmdi</origin>
@@ -8793,7 +8793,7 @@
 	This function modifies the failure handling of
         native method resolution by allowing retry
         with a prefix applied to the name.
-        When used with the 
+        When used with the
         <eventlink id="ClassFileLoadHook">ClassFileLoadHook
         event</eventlink>, it enables native methods to be
         <internallink id="bci">instrumented</internallink>.
@@ -8805,7 +8805,7 @@
         <example>
 native boolean foo(int x);</example>
         <p/>
-        We could transform the class file (with the 
+        We could transform the class file (with the
         ClassFileLoadHook event) so that this becomes:
         <example>
 boolean foo(int x) {
@@ -8823,28 +8823,28 @@
         better but would make these examples less readable.
         <p/>
         The wrapper will allow data to be collected on the native
-        method call, but now the problem becomes linking up the  
-        wrapped method with the native implementation.  
-        That is, the method <code>wrapped_foo</code> needs to be 
+        method call, but now the problem becomes linking up the
+        wrapped method with the native implementation.
+        That is, the method <code>wrapped_foo</code> needs to be
         resolved to the native implementation of <code>foo</code>,
         which might be:
         <example>
 Java_somePackage_someClass_foo(JNIEnv* env, jint x)</example>
         <p/>
         This function allows the prefix to be specified and the
-        proper resolution to occur.  
+        proper resolution to occur.
         Specifically, when the standard resolution fails, the
         resolution is retried taking the prefix into consideration.
         There are two ways that resolution occurs, explicit
         resolution with the JNI function <code>RegisterNatives</code>
-        and the normal automatic resolution.  For 
-        <code>RegisterNatives</code>, the VM will attempt this 
+        and the normal automatic resolution.  For
+        <code>RegisterNatives</code>, the VM will attempt this
         association:
         <example>
 method(foo) -> nativeImplementation(foo)</example>
         <p/>
         When this fails, the resolution will be retried with
-        the specified prefix prepended to the method name, 
+        the specified prefix prepended to the method name,
         yielding the correct resolution:
         <example>
 method(wrapped_foo) -> nativeImplementation(foo)</example>
@@ -8854,7 +8854,7 @@
 method(wrapped_foo) -> nativeImplementation(wrapped_foo)</example>
         <p/>
         When this fails, the resolution will be retried with
-        the specified prefix deleted from the implementation name, 
+        the specified prefix deleted from the implementation name,
         yielding the correct resolution:
         <example>
 method(wrapped_foo) -> nativeImplementation(foo)</example>
@@ -8863,7 +8863,7 @@
         resolution fails, native methods can be wrapped selectively.
         <p/>
         Since each <jvmti/> environment is independent and
-        can do its own transformation of the bytecodes, more 
+        can do its own transformation of the bytecodes, more
         than one layer of wrappers may be applied. Thus each
         environment needs its own prefix.  Since transformations
         are applied in order, the prefixes, if applied, will
@@ -8871,21 +8871,21 @@
         The order of transformation application is described in
         the <eventlink id="ClassFileLoadHook"/> event.
         Thus if three environments applied
-        wrappers, <code>foo</code> might become 
+        wrappers, <code>foo</code> might become
         <code>$env3_$env2_$env1_foo</code>.  But if, say,
         the second environment did not apply a wrapper to
-        <code>foo</code> it would be just 
-        <code>$env3_$env1_foo</code>.  To be able to 
+        <code>foo</code> it would be just
+        <code>$env3_$env1_foo</code>.  To be able to
         efficiently determine the sequence of prefixes,
         an intermediate prefix is only applied if its non-native
-        wrapper exists.  Thus, in the last example, even though 
+        wrapper exists.  Thus, in the last example, even though
         <code>$env1_foo</code> is not a native method, the
-        <code>$env1_</code> prefix is applied since 
+        <code>$env1_</code> prefix is applied since
         <code>$env1_foo</code> exists.
         <p/>
         Since the prefixes are used at resolution time
         and since resolution may be arbitrarily delayed, a
-        native method prefix must remain set as long as there 
+        native method prefix must remain set as long as there
         are corresponding prefixed native methods.
       </description>
       <origin>new</origin>
@@ -8918,7 +8918,7 @@
          For a meta-agent that performs multiple independent class
          file transformations (for example as a proxy for another
          layer of agents) this function allows each transformation
-         to have its own prefix.  
+         to have its own prefix.
          The prefixes are applied in the order supplied and are
          processed in the same manor as described for the
          application of prefixes from multiple <jvmti/> environments
@@ -8929,13 +8929,13 @@
          disables prefixing in this environment.
          <p/>
          <functionlink id="SetNativeMethodPrefix"/> and this function
-         are the two ways to set the prefixes.  
-         Calling <code>SetNativeMethodPrefix</code> with 
-         a prefix is the same as calling this function with 
-         <paramlink id="prefix_count"/> of <code>1</code>. 
-         Calling <code>SetNativeMethodPrefix</code> with 
-         <code>NULL</code> is the same as calling this function with 
-         <paramlink id="prefix_count"/> of <code>0</code>. 
+         are the two ways to set the prefixes.
+         Calling <code>SetNativeMethodPrefix</code> with
+         a prefix is the same as calling this function with
+         <paramlink id="prefix_count"/> of <code>1</code>.
+         Calling <code>SetNativeMethodPrefix</code> with
+         <code>NULL</code> is the same as calling this function with
+         <paramlink id="prefix_count"/> of <code>0</code>.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -9014,16 +9014,16 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_NOT_MONITOR_OWNER"> 
+	<error id="JVMTI_ERROR_NOT_MONITOR_OWNER">
 	  Not monitor owner
-	</error>        
+	</error>
       </errors>
     </function>
 
     <function id="RawMonitorEnter" phase="any" callbacksafe="safe" impl="innative notrace" num="33">
       <synopsis>Raw Monitor Enter</synopsis>
       <description>
-	Gain exclusive ownership of a raw monitor.  
+	Gain exclusive ownership of a raw monitor.
         The same thread may enter a monitor more then once.
         The thread must
         <functionlink id="RawMonitorExit">exit</functionlink>
@@ -9064,7 +9064,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_NOT_MONITOR_OWNER"> 
+	<error id="JVMTI_ERROR_NOT_MONITOR_OWNER">
 	  Not monitor owner
 	</error>
       </errors>
@@ -9075,9 +9075,9 @@
       <description>
         Wait for notification of the raw monitor.
         <p/>
-        Causes the current thread to wait until either another thread calls 
-        <functionlink id="RawMonitorNotify"/> or 
-        <functionlink id="RawMonitorNotifyAll"/> 
+        Causes the current thread to wait until either another thread calls
+        <functionlink id="RawMonitorNotify"/> or
+        <functionlink id="RawMonitorNotifyAll"/>
         for the specified raw monitor, or the specified
         <paramlink id="millis">timeout</paramlink>
         has elapsed.
@@ -9102,10 +9102,10 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_NOT_MONITOR_OWNER"> 
+	<error id="JVMTI_ERROR_NOT_MONITOR_OWNER">
 	  Not monitor owner
 	</error>
-	<error id="JVMTI_ERROR_INTERRUPT"> 
+	<error id="JVMTI_ERROR_INTERRUPT">
 	  Wait was interrupted, try again
 	</error>
       </errors>
@@ -9151,7 +9151,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_NOT_MONITOR_OWNER"> 
+	<error id="JVMTI_ERROR_NOT_MONITOR_OWNER">
 	  Not monitor owner
 	</error>
       </errors>
@@ -9161,7 +9161,7 @@
     <function id="GetRawMonitorUse" num="118">
       <synopsis>Get Raw Monitor Use</synopsis>
       <description>
-        The fields of the <functionlink id="jvmtiMonitorUsage"></functionlink> structure 
+        The fields of the <functionlink id="jvmtiMonitorUsage"></functionlink> structure
         are filled in with information about usage of the raw monitor.
       </description>
       <origin>new</origin>
@@ -9178,7 +9178,7 @@
         <param id="info_ptr">
 	  <outptr><struct>jvmtiMonitorUsage</struct></outptr>
 	  <description>
-	    On return, filled with monitor information for the 
+	    On return, filled with monitor information for the
 	    specified raw monitor.
 	  </description>
 	</param>
@@ -9192,7 +9192,7 @@
       <description>
         Return the list of raw monitors.
         <p/>
-        Note: details about each monitor can be examined with 
+        Note: details about each monitor can be examined with
         <functionlink id="GetRawMonitorUse"></functionlink>.
       </description>
       <origin>new</origin>
@@ -9203,7 +9203,7 @@
         <param id="monitorCnt">
 	  <outptr><jint/></outptr>
 	  <description>
-	    On return, pointer to the number 
+	    On return, pointer to the number
 	    of monitors returned in <code>monitors_ptr</code>.
 	  </description>
 	</param>
@@ -9223,13 +9223,13 @@
   <category id="jniIntercept" label="JNI Function Interception">
 
     <intro>
-      Provides the ability to intercept and resend 
+      Provides the ability to intercept and resend
       Java Native Interface (JNI) function calls
       by manipulating the JNI function table.
-      See <externallink id="docs/technotes/guides/jni/spec/functions.html">JNI
+      See <externallink id="jni/functions.html">JNI
 	Functions</externallink> in the <i>Java Native Interface Specification</i>.
       <p/>
-      The following example illustrates intercepting the 
+      The following example illustrates intercepting the
       <code>NewGlobalRef</code> JNI call in order to count reference
       creation.
       <example>
@@ -9274,19 +9274,19 @@
 	check that the example compiles and executes.
       </todo>
     </intro>
-    
+
     <function id="SetJNIFunctionTable" phase="start" num="120">
       <synopsis>Set JNI Function Table</synopsis>
       <description>
-        Set the JNI function table 
+        Set the JNI function table
         in all current and future JNI environments.
         As a result, all future JNI calls are directed to the specified functions.
         Use <functionlink id="GetJNIFunctionTable"></functionlink> to get the
         function table to pass to this function.
-        For this function to take effect the the updated table entries must be 
+        For this function to take effect the the updated table entries must be
         used by the JNI clients.
         Since the table is defined <code>const</code> some compilers may optimize
-        away the access to the table, thus preventing this function from taking 
+        away the access to the table, thus preventing this function from taking
         effect.
         The table is copied--changes to the local copy of the
         table have no effect.
@@ -9310,16 +9310,16 @@
       <errors>
       </errors>
     </function>
-    
+
     <function id="GetJNIFunctionTable" phase="start" num="121">
       <synopsis>Get JNI Function Table</synopsis>
       <description>
         Get the JNI function table.
         The JNI function table is copied into allocated memory.
-        If <functionlink id="SetJNIFunctionTable"></functionlink> 
+        If <functionlink id="SetJNIFunctionTable"></functionlink>
         has been called, the modified (not the original) function
         table is returned.
-        Only the function table is copied, no other aspects of the environment 
+        Only the function table is copied, no other aspects of the environment
         are copied.
         See the examples <internallink id="jniIntercept">above</internallink>.
       </description>
@@ -9332,7 +9332,7 @@
 	    <struct>jniNativeInterface</struct>
 	  </allocbuf>
           <description>
-	    On return, <code>*function_table</code> 
+	    On return, <code>*function_table</code>
 	    points a newly allocated copy of the JNI function table.
 	  </description>
 	</param>
@@ -9354,13 +9354,13 @@
         table have no effect.
         This is an atomic action, all callbacks are set at once.
         No events are sent before this function is called.
-        When an entry is <code>NULL</code> or when the event is beyond 
+        When an entry is <code>NULL</code> or when the event is beyond
         <paramlink id="size_of_callbacks"></paramlink> no event is sent.
-        Details on events are 
+        Details on events are
         described <internallink id="EventSection">later</internallink> in this document.
         An event must be enabled and have a callback in order to be
-        sent--the order in which this function and 
-        <functionlink id="SetEventNotificationMode"></functionlink> 
+        sent--the order in which this function and
+        <functionlink id="SetEventNotificationMode"></functionlink>
         are called does not affect the result.
       </description>
       <origin>new</origin>
@@ -9391,28 +9391,28 @@
     <function id="SetEventNotificationMode" jkernel="yes" phase="onload" num="2">
       <synopsis>Set Event Notification Mode</synopsis>
       <description>
-	Control the generation of events. 
+	Control the generation of events.
 	<constants id="jvmtiEventMode" label="Event Enable/Disable" kind="enum">
 	  <constant id="JVMTI_ENABLE" num="1">
-	    If <paramlink id="mode"></paramlink> is <code>JVMTI_ENABLE</code>, 
+	    If <paramlink id="mode"></paramlink> is <code>JVMTI_ENABLE</code>,
 	    the event <paramlink id="event_type"></paramlink> will be enabled
 	  </constant>
 	  <constant id="JVMTI_DISABLE" num="0">
-	    If <paramlink id="mode"></paramlink> is <code>JVMTI_DISABLE</code>, 
+	    If <paramlink id="mode"></paramlink> is <code>JVMTI_DISABLE</code>,
 	    the event <paramlink id="event_type"></paramlink> will be disabled
 	  </constant>
 	</constants>
 	If <code>thread</code> is <code>NULL</code>,
-	the event is enabled or disabled globally; otherwise, it is 
-	enabled or disabled for a particular thread. 
-	An event is generated for 
+	the event is enabled or disabled globally; otherwise, it is
+	enabled or disabled for a particular thread.
+	An event is generated for
 	a particular thread if it is enabled either at the thread or global
-	levels. 
+	levels.
 	<p/>
 	See <internallink id="EventIndex">below</internallink> for information on specific events.
 	<p/>
 	The following events cannot be controlled at the thread
-	level through this function. 
+	level through this function.
 	<ul>
 	  <li><eventlink id="VMInit"></eventlink></li>
 	  <li><eventlink id="VMStart"></eventlink></li>
@@ -9424,13 +9424,13 @@
 	  <li><eventlink id="DataDumpRequest"></eventlink></li>
 	</ul>
 	<p/>
-	Initially, no events are enabled at either the thread level 
+	Initially, no events are enabled at either the thread level
 	or the global level.
 	<p/>
         Any needed capabilities (see Event Enabling Capabilities below) must be possessed
         before calling this function.
         <p/>
-	Details on events are 
+	Details on events are
 	described <internallink id="EventSection">below</internallink>.
       </description>
       <origin>jvmdiClone</origin>
@@ -9472,10 +9472,10 @@
           <paramlink id="event_thread"/> is non-<code>NULL</code> and is not live (has not been started or is now dead).
         </error>
 	<error id="JVMTI_ERROR_ILLEGAL_ARGUMENT">
-	  thread level control was attempted on events which do not 
+	  thread level control was attempted on events which do not
           permit thread level control.
 	</error>
-        <error id="JVMTI_ERROR_MUST_POSSESS_CAPABILITY"> 
+        <error id="JVMTI_ERROR_MUST_POSSESS_CAPABILITY">
           The Required Event Enabling Capability is not possessed.
         </error>
       </errors>
@@ -9484,14 +9484,14 @@
     <function id="GenerateEvents" num="123">
       <synopsis>Generate Events</synopsis>
       <description>
-        Generate events to represent the current state of the VM.  
-        For example, if <paramlink id="event_type"/> is 
+        Generate events to represent the current state of the VM.
+        For example, if <paramlink id="event_type"/> is
         <code>JVMTI_EVENT_COMPILED_METHOD_LOAD</code>,
         a <eventlink id="CompiledMethodLoad"></eventlink> event will be
         sent for each currently compiled method.
         Methods that were loaded and now have been unloaded are not sent.
-        The history of what events have previously been sent does not 
-        effect what events are sent by this function--for example, 
+        The history of what events have previously been sent does not
+        effect what events are sent by this function--for example,
         all currently compiled methods
         will be sent each time this function is called.
         <p/>
@@ -9502,14 +9502,14 @@
 	Attempts to execute Java programming language code or
 	JNI functions may be paused until this function returns -
 	so neither should be called from the thread sending the event.
-	This function returns only after the missed events have been 
+	This function returns only after the missed events have been
         sent, processed and have returned.
 	The event may be sent on a different thread than the thread
 	on which the event occurred.
-	The callback for the event must be set with 
-        <functionlink id="SetEventCallbacks"></functionlink> 
+	The callback for the event must be set with
+        <functionlink id="SetEventCallbacks"></functionlink>
 	and the event must be enabled with
-        <functionlink id="SetEventNotificationMode"></functionlink> 
+        <functionlink id="SetEventNotificationMode"></functionlink>
 	or the events will not occur.
 	If the VM no longer has the information to generate some or
         all of the requested events, the events are simply not sent -
@@ -9538,13 +9538,13 @@
 	</param>
       </parameters>
       <errors>
-        <error id="JVMTI_ERROR_MUST_POSSESS_CAPABILITY"> 
-          <paramlink id="event_type"/> is 
+        <error id="JVMTI_ERROR_MUST_POSSESS_CAPABILITY">
+          <paramlink id="event_type"/> is
 	  <eventlink id="CompiledMethodLoad"><code>JVMTI_EVENT_COMPILED_METHOD_LOAD</code></eventlink>
 	  and <fieldlink id="can_generate_compiled_method_load_events" struct="jvmtiCapabilities"></fieldlink>
 	  is <code>false</code>.
         </error>
-        <error id="JVMTI_ERROR_ILLEGAL_ARGUMENT"> 
+        <error id="JVMTI_ERROR_ILLEGAL_ARGUMENT">
           <paramlink id="event_type"/> is other than
 	  <eventlink id="CompiledMethodLoad"><code>JVMTI_EVENT_COMPILED_METHOD_LOAD</code></eventlink>
 	  or <eventlink id="DynamicCodeGenerated"><code>JVMTI_EVENT_DYNAMIC_CODE_GENERATED</code></eventlink>.
@@ -9566,63 +9566,63 @@
 
 	<constants id="jvmtiParamTypes" label="Extension Function/Event Parameter Types" kind="enum">
 	  <constant id="JVMTI_TYPE_JBYTE" num="101">
-	    Java programming language primitive type - <code>byte</code>. 
+	    Java programming language primitive type - <code>byte</code>.
 	    JNI type <code>jbyte</code>.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JCHAR" num="102">
-	    Java programming language primitive type - <code>char</code>. 
+	    Java programming language primitive type - <code>char</code>.
 	    JNI type <code>jchar</code>.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JSHORT" num="103">
-	    Java programming language primitive type - <code>short</code>. 
+	    Java programming language primitive type - <code>short</code>.
 	    JNI type <code>jshort</code>.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JINT" num="104">
-	    Java programming language primitive type - <code>int</code>. 
+	    Java programming language primitive type - <code>int</code>.
 	    JNI type <datalink id="jint"></datalink>.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JLONG" num="105">
-	    Java programming language primitive type - <code>long</code>. 
+	    Java programming language primitive type - <code>long</code>.
 	    JNI type <datalink id="jlong"></datalink>.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JFLOAT" num="106">
-	    Java programming language primitive type - <code>float</code>. 
+	    Java programming language primitive type - <code>float</code>.
 	    JNI type <datalink id="jfloat"></datalink>.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JDOUBLE" num="107">
-	    Java programming language primitive type - <code>double</code>. 
+	    Java programming language primitive type - <code>double</code>.
 	    JNI type <datalink id="jdouble"></datalink>.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JBOOLEAN" num="108">
-	    Java programming language primitive type - <code>boolean</code>. 
+	    Java programming language primitive type - <code>boolean</code>.
 	    JNI type <datalink id="jboolean"></datalink>.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JOBJECT" num="109">
-	    Java programming language object type - <code>java.lang.Object</code>. 
+	    Java programming language object type - <code>java.lang.Object</code>.
 	    JNI type <datalink id="jobject"></datalink>.
 	    Returned values are JNI local references and must be managed.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JTHREAD" num="110">
-	    Java programming language object type - <code>java.lang.Thread</code>. 
+	    Java programming language object type - <code>java.lang.Thread</code>.
 	    <jvmti/> type <datalink id="jthread"></datalink>.
 	    Returned values are JNI local references and must be managed.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JCLASS" num="111">
-	    Java programming language object type - <code>java.lang.Class</code>. 
+	    Java programming language object type - <code>java.lang.Class</code>.
 	    JNI type <datalink id="jclass"></datalink>.
 	    Returned values are JNI local references and must be managed.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JVALUE" num="112">
-	    Union of all Java programming language primitive and object types - 
+	    Union of all Java programming language primitive and object types -
 	    JNI type <datalink id="jvalue"></datalink>.
 	    Returned values which represent object types are JNI local references and must be managed.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JFIELDID" num="113">
-	    Java programming language field identifier - 
+	    Java programming language field identifier -
 	    JNI type <datalink id="jfieldID"></datalink>.
 	  </constant>
 	  <constant id="JVMTI_TYPE_JMETHODID" num="114">
-	    Java programming language method identifier - 
+	    Java programming language method identifier -
 	    JNI type <datalink id="jmethodID"></datalink>.
 	  </constant>
 	  <constant id="JVMTI_TYPE_CCHAR" num="115">
@@ -9757,7 +9757,7 @@
 	      <struct>jvmtiParamInfo</struct>
 	    </allocfieldbuf>
 	    <description>
-	      Array of 
+	      Array of
 	      <fieldlink id="param_count" struct="jvmtiExtensionFunctionInfo"></fieldlink>
 	      parameters (<code>jvmtiEnv *jvmti_env</code> excluded)
 	    </description>
@@ -9840,7 +9840,7 @@
 	      <struct>jvmtiParamInfo</struct>
 	    </allocfieldbuf>
 	    <description>
-	      Array of 
+	      Array of
 	      <fieldlink id="param_count" struct="jvmtiExtensionEventInfo"></fieldlink>
 	      parameters (<code>jvmtiEnv *jvmti_env</code> excluded)
 	    </description>
@@ -9876,7 +9876,7 @@
 	  <synopsis>Extension Event</synopsis>
 	<description>
 	  This is the implementation-specific event.
-          The event handler is set with 
+          The event handler is set with
           <functionlink id="SetExtensionEventCallback"/>.
           <p/>
           Event handlers for extension events must be declared varargs to match this definition.
@@ -9927,9 +9927,9 @@
 	    <jint/>
 	      <description>
 		Identifies which callback to set.
-		This index is the 
+		This index is the
 		<fieldlink id="extension_event_index" struct="jvmtiExtensionEventInfo"></fieldlink>
-		field of 
+		field of
 		<datalink id="jvmtiExtensionEventInfo"/>.
 	      </description>
 	  </param>
@@ -9939,18 +9939,18 @@
 	      <nullok>disable the event</nullok>
 	    </ptrtype>
 	    <description>
-	      If <code>callback</code> is non-<code>NULL</code>, 
+	      If <code>callback</code> is non-<code>NULL</code>,
 	      set <code>callback</code> to be the event callback function
 	      and enable the event.
 	    </description>
 	  </param>
 	</parameters>
 	<errors>
-        <error id="JVMTI_ERROR_ILLEGAL_ARGUMENT"> 
+        <error id="JVMTI_ERROR_ILLEGAL_ARGUMENT">
             <paramlink id="extension_event_index"/> is not an
-            <fieldlink id="extension_event_index" 
+            <fieldlink id="extension_event_index"
                        struct="jvmtiExtensionEventInfo"/>
-            returned by 
+            returned by
             <functionlink id="GetExtensionEvents"/>
         </error>
 	</errors>
@@ -9962,30 +9962,30 @@
 
     <intro>
       The capabilities functions allow you to change the
-      functionality available to <jvmti/>--that is, 
-      which <jvmti/> 
+      functionality available to <jvmti/>--that is,
+      which <jvmti/>
       functions can be called, what events can be generated,
       and what functionality these events and functions can
       provide.
       <p/>
-        The "Capabilities" section of each function and event describe which 
+        The "Capabilities" section of each function and event describe which
         capabilities, if any, they are associated with. "Required Functionality"
         means it is available for use and no capabilities must be added to use it.
         "Optional Functionality" means the agent must possess the capability
-        before it can be used.  
+        before it can be used.
         To possess a capability, the agent must
         <functionlink id="AddCapabilities">add the capability</functionlink>.
         "Optional Features" describe capabilities which,
         if added, extend the feature set.
         <p/>
-        The potentially available capabilities of each <jvmti/> implementation are different.  
+        The potentially available capabilities of each <jvmti/> implementation are different.
         Depending on the implementation, a capability:
         <ul>
           <li>may never be added</li>
           <li>may be added in either the <code>OnLoad</code> or live phase in any environment</li>
           <li>may be added only during the <code>OnLoad</code> phase</li>
           <li>may be possessed by only one environment at a time</li>
-          <li>may be possessed by only one environment at a time, 
+          <li>may be possessed by only one environment at a time,
               and only during the <code>OnLoad</code> phase</li>
           <li>and so on ...</li>
         </ul>
@@ -9993,24 +9993,24 @@
       time, and/or memory footprint.  Note that the overhead of using a capability
       is completely different than the overhead of possessing a capability.
       Take single stepping as an example. When single stepping is on (that
-      is, when the event is enabled and thus actively sending events) 
-      the overhead of sending and processing an event 
-      on each instruction is huge in any implementation. 
-      However, the overhead of possessing the capability may be small or large, 
+      is, when the event is enabled and thus actively sending events)
+      the overhead of sending and processing an event
+      on each instruction is huge in any implementation.
+      However, the overhead of possessing the capability may be small or large,
       depending on the implementation.  Also, when and if a capability is potentially
       available depends on the implementation.  Some examples:
       <ul>
-	<li>One VM might perform all execution by compiling bytecodes into 
+	<li>One VM might perform all execution by compiling bytecodes into
 	  native code and be unable to generate single step instructions.
 	  In this implementation the capability can not be added.</li>
 	<li>Another VM may be able to switch execution to a single stepping
-	  interpreter at any time.  In this implementation, having the capability has no 
+	  interpreter at any time.  In this implementation, having the capability has no
 	  overhead and could be added at any time.</li>
 	<li>Yet another VM might be able to choose a bytecode compiling or single stepping capable interpreted
 	  execution engine at start up, but be unable to switch between them.
-	  In this implementation the capability would need to be added 
+	  In this implementation the capability would need to be added
           during the <code>OnLoad</code> phase (before bytecode
-	  execution begins) and would have a large impact on execution speed 
+	  execution begins) and would have a large impact on execution speed
 	  even if single stepping was never used.</li>
 	<li>Still another VM might be able to add an "is single stepping on" check
 	  into compiled bytecodes or a generated interpreter.  Again in this implementation
@@ -10019,30 +10019,30 @@
       </ul>
       <p/>
       Each <jvmti/> <internallink id="environments">environment</internallink>
-      has its own set of capabilities.  
+      has its own set of capabilities.
       Initially, that set is empty.
       Any desired capability must be added.
-      If possible, capabilities should be added during the <code>OnLoad</code> phase.  For most 
-      virtual machines certain capabilities require special set up for 
+      If possible, capabilities should be added during the <code>OnLoad</code> phase.  For most
+      virtual machines certain capabilities require special set up for
       the virtual machine and this set up must happen
-      during the <code>OnLoad</code> phase, before the virtual machine begins execution. 
+      during the <code>OnLoad</code> phase, before the virtual machine begins execution.
       Once a capability is added, it can
       only be removed if explicitly relinquished by the environment.
       <p/>
-      The agent can, 
+      The agent can,
       <functionlink id="GetPotentialCapabilities">determine what
 	capabilities this VM can potentially provide</functionlink>,
       <functionlink id="AddCapabilities">add the capabilities
 	to be used</functionlink>,
       <functionlink id="RelinquishCapabilities">release capabilities
 	which are no longer needed</functionlink>, and
-      <functionlink id="GetCapabilities">examine the currently available 
+      <functionlink id="GetCapabilities">examine the currently available
 	capabilities</functionlink>.
     </intro>
 
     <intro id="capabilityExamples" label="Capability Examples">
       For example, a freshly started agent (in the <code>OnLoad</code> function)
-      wants to enable all possible capabilities.  
+      wants to enable all possible capabilities.
       Note that, in general, this is not advisable as the agent may suffer
       a performance penalty for functionality it is not using.
       The code might look like this in C:
@@ -10055,9 +10055,9 @@
 	   err = (*jvmti)-&gt;AddCapabilities(jvmti, &amp;capa);
       </example>
       For example, if an  agent wants to check if it can get
-      the bytecodes of a method (that is, it wants to check 
-      if it previously added this capability and has not 
-      relinquished it), the code might 
+      the bytecodes of a method (that is, it wants to check
+      if it previously added this capability and has not
+      relinquished it), the code might
       look like this in C:
       <example>
 	jvmtiCapabilities capa;
@@ -10065,13 +10065,13 @@
 
 	err = (*jvmti)-&gt;GetCapabilities(jvmti, &amp;capa);
 	if (err == JVMTI_ERROR_NONE) {
-   	   if (capa.can_get_bytecodes) { ... } } 
+   	   if (capa.can_get_bytecodes) { ... } }
       </example>
     </intro>
 
     <capabilitiestypedef id="jvmtiCapabilities" label="The Capabilities Structure">
       <description>
-        The functions in this category use this capabilities structure 
+        The functions in this category use this capabilities structure
         which contains boolean flags corresponding to each capability:
       </description>
       <capabilityfield id="can_tag_objects">
@@ -10099,14 +10099,14 @@
       </capabilityfield>
       <capabilityfield id="can_get_synthetic_attribute">
 	<description>
-	  Can test if a field or method is synthetic - 
+	  Can test if a field or method is synthetic -
           <functionlink id="IsFieldSynthetic"></functionlink> and
           <functionlink id="IsMethodSynthetic"></functionlink>
 	</description>
       </capabilityfield>
       <capabilityfield id="can_get_owned_monitor_info">
 	<description>
-	  Can get information about ownership of monitors - 
+	  Can get information about ownership of monitors -
           <functionlink id="GetOwnedMonitorInfo"></functionlink>
 	</description>
       </capabilityfield>
@@ -10167,19 +10167,19 @@
       </capabilityfield>
       <capabilityfield id="can_generate_exception_events">
 	<description>
-	  Can get <eventlink id="Exception">exception thrown</eventlink> and 
+	  Can get <eventlink id="Exception">exception thrown</eventlink> and
             <eventlink id="ExceptionCatch">exception catch</eventlink> events
 	</description>
       </capabilityfield>
       <capabilityfield id="can_generate_frame_pop_events">
 	<description>
-	  Can <functionlink id="NotifyFramePop">set</functionlink> and thus get 
+	  Can <functionlink id="NotifyFramePop">set</functionlink> and thus get
             <eventlink id="FramePop"></eventlink> events
 	</description>
       </capabilityfield>
       <capabilityfield id="can_generate_breakpoint_events">
 	<description>
-	  Can <functionlink id="SetBreakpoint">set</functionlink> and thus get 
+	  Can <functionlink id="SetBreakpoint">set</functionlink> and thus get
             <eventlink id="Breakpoint"></eventlink> events
 	</description>
       </capabilityfield>
@@ -10206,65 +10206,65 @@
 	  thread CPU time
 	</description>
       </capabilityfield>
-      <capabilityfield id="can_generate_method_entry_events" 
-		       disp1="can_generate" disp2="_method_entry_events" 
+      <capabilityfield id="can_generate_method_entry_events"
+		       disp1="can_generate" disp2="_method_entry_events"
 		       >
 	<description>
 	  Can generate method entry events on entering a method
 	</description>
       </capabilityfield>
-      <capabilityfield id="can_generate_method_exit_events" 
-		       disp1="can_generate" disp2="_method_exit_events" 
+      <capabilityfield id="can_generate_method_exit_events"
+		       disp1="can_generate" disp2="_method_exit_events"
 		       >
 	<description>
 	  Can generate method exit events on leaving a method
 	</description>
       </capabilityfield>
-      <capabilityfield id="can_generate_all_class_hook_events" 
-		       disp1="can_generate" disp2="_all_class_hook_events" 
+      <capabilityfield id="can_generate_all_class_hook_events"
+		       disp1="can_generate" disp2="_all_class_hook_events"
 		       >
 	<description>
 	  Can generate ClassFileLoadHook events for every loaded class.
 	</description>
       </capabilityfield>
-      <capabilityfield id="can_generate_compiled_method_load_events" 
-		       disp1="can_generate" disp2="_compiled_method_load_events" 
+      <capabilityfield id="can_generate_compiled_method_load_events"
+		       disp1="can_generate" disp2="_compiled_method_load_events"
 		       >
 	<description>
 	  Can generate events when a method is compiled or unloaded
 	</description>
       </capabilityfield>
-      <capabilityfield id="can_generate_monitor_events" 
-		       disp1="can_generate" disp2="_monitor_events" 
+      <capabilityfield id="can_generate_monitor_events"
+		       disp1="can_generate" disp2="_monitor_events"
 		       >
 	<description>
 	  Can generate events on monitor activity
 	</description>
       </capabilityfield>
-      <capabilityfield id="can_generate_vm_object_alloc_events" 
-		       disp1="can_generate" disp2="_vm_object_alloc_events" 
+      <capabilityfield id="can_generate_vm_object_alloc_events"
+		       disp1="can_generate" disp2="_vm_object_alloc_events"
 		       >
 	<description>
 	  Can generate events on VM allocation of an object
 	</description>
       </capabilityfield>
-      <capabilityfield id="can_generate_native_method_bind_events" 
-		       disp1="can_generate" disp2="_native_method_bind_events" 
+      <capabilityfield id="can_generate_native_method_bind_events"
+		       disp1="can_generate" disp2="_native_method_bind_events"
 		       >
 	<description>
 	  Can generate events when a native method is bound to its
 	  implementation
 	</description>
       </capabilityfield>
-      <capabilityfield id="can_generate_garbage_collection_events" 
-		       disp1="can_generate" disp2="_garbage_collection_events" 
+      <capabilityfield id="can_generate_garbage_collection_events"
+		       disp1="can_generate" disp2="_garbage_collection_events"
 		       >
 	<description>
 	  Can generate events when garbage collection begins or ends
 	</description>
       </capabilityfield>
-      <capabilityfield id="can_generate_object_free_events" 
-		       disp1="can_generate" disp2="_object_free_events" 
+      <capabilityfield id="can_generate_object_free_events"
+		       disp1="can_generate" disp2="_object_free_events"
 		       >
 	<description>
 	  Can generate events when the garbage collector frees an object
@@ -10298,16 +10298,16 @@
       <capabilityfield id="can_retransform_classes" since="1.1">
 	<description>
 	  Can retransform classes with <functionlink id="RetransformClasses"/>.
-          In addition to the restrictions imposed by the specific 
+          In addition to the restrictions imposed by the specific
           implementation on this capability (see the
           <internallink id="capability">Capability</internallink> section),
-          this capability must be set before the 
+          this capability must be set before the
           <eventlink id="ClassFileLoadHook"/> event is enabled for the
           first time in this environment.
-          An environment that possesses this capability at the time that 
+          An environment that possesses this capability at the time that
           <code>ClassFileLoadHook</code> is enabled for the first time is
           said to be <i>retransformation capable</i>.
-          An environment that does not possess this capability at the time that 
+          An environment that does not possess this capability at the time that
           <code>ClassFileLoadHook</code> is enabled for the first time is
           said to be <i>retransformation incapable</i>.
 	</description>
@@ -10322,7 +10322,7 @@
       </capabilityfield>
       <capabilityfield id="can_generate_resource_exhaustion_heap_events" since="1.1">
 	<description>
-          Can generate events when the VM is unable to allocate memory from 
+          Can generate events when the VM is unable to allocate memory from
           the <tm>Java</tm> platform heap.
           See <eventlink id="ResourceExhausted"/>.
 	</description>
@@ -10355,11 +10355,11 @@
     <function id="GetPotentialCapabilities" jkernel="yes" phase="onload" num="140">
       <synopsis>Get Potential Capabilities</synopsis>
       <description>
-        Returns via <paramlink id="capabilities_ptr"></paramlink> the <jvmti/> 
+        Returns via <paramlink id="capabilities_ptr"></paramlink> the <jvmti/>
         features that can potentially be possessed by this environment
 	at this time.
 	The returned capabilities differ from the complete set of capabilities
-	implemented by the VM in two cases: another environment possesses 
+	implemented by the VM in two cases: another environment possesses
 	capabilities that can only be possessed by one environment, or the
 	current <functionlink id="GetPhase">phase</functionlink> is live,
 	and certain capabilities can only be added during the <code>OnLoad</code> phase.
@@ -10402,7 +10402,7 @@
 	  conditional implementations would be used or are even a good idea.
 	  The thought is that release documentation for the implementation
 	  would be the best means of exposing this information.
-	  Unless new arguments are presented, I intend to remove this 
+	  Unless new arguments are presented, I intend to remove this
 	  function in the next revision.
 	</issue>
         <p/>
@@ -10412,15 +10412,15 @@
         <paramlink id="capabilities_ptr"></paramlink>.
         The returned estimates are in percentage of additional overhead, thus
         a time impact of 100 mean the application might run
-        at half the speed.  
+        at half the speed.
         The estimates are very rough approximations and are not guaranteed.
         Note also, that the estimates are of the impact of having the
         capability available--when and if it is used the impact may be
         much greater.
-        Estimates can be for a single capability or for a set of 
+        Estimates can be for a single capability or for a set of
         capabilities.  Note that the costs are not necessarily additive,
-        adding support for one capability might make another available 
-        for free or conversely having two capabilities at once may 
+        adding support for one capability might make another available
+        for free or conversely having two capabilities at once may
         have multiplicative impact.
         Estimates are relative to the current set of capabilities -
         that is, how much more impact given the currently possessed capabilities.
@@ -10460,7 +10460,7 @@
 	</param>
       </parameters>
       <errors>
-        <error id="JVMTI_ERROR_NOT_AVAILABLE"> 
+        <error id="JVMTI_ERROR_NOT_AVAILABLE">
           The desired capabilities are not even potentially available.
         </error>
       </errors>
@@ -10470,7 +10470,7 @@
     <function id="AddCapabilities" jkernel="yes" phase="onload" num="142">
       <synopsis>Add Capabilities</synopsis>
       <description>
-        Set new capabilities by adding the capabilities 
+        Set new capabilities by adding the capabilities
         whose values are set to one (<code>1</code>) in
         <code>*</code><paramlink id="capabilities_ptr"></paramlink>.
         All previous capabilities are retained.
@@ -10493,7 +10493,7 @@
 	</param>
       </parameters>
       <errors>
-        <error id="JVMTI_ERROR_NOT_AVAILABLE"> 
+        <error id="JVMTI_ERROR_NOT_AVAILABLE">
           The desired capabilities are not even potentially available.
         </error>
       </errors>
@@ -10547,7 +10547,7 @@
     <function id="GetCapabilities" jkernel="yes" phase="any" num="89">
       <synopsis>Get Capabilities</synopsis>
         <description>
-          Returns via <paramlink id="capabilities_ptr"></paramlink> the optional <jvmti/> 
+          Returns via <paramlink id="capabilities_ptr"></paramlink> the optional <jvmti/>
           features which this environment currently possesses.
           Each possessed capability is indicated by a one (<code>1</code>) in the
           corresponding field of the <internallink id="jvmtiCapabilities">capabilities
@@ -10578,16 +10578,16 @@
     </function>
 
   </category>
-  
-  
+
+
   <category id="timers" label="Timers">
 
       <intro>
 	These functions provide timing information.
-	The resolution at which the time is updated is not specified. 
-	They provides nanosecond precision, but not necessarily nanosecond accuracy. 
+	The resolution at which the time is updated is not specified.
+	They provides nanosecond precision, but not necessarily nanosecond accuracy.
 	Details about the timers, such as their maximum values, can be accessed with
-	the timer information functions.  
+	the timer information functions.
       </intro>
 
       <typedef id="jvmtiTimerInfo" label="Timer Info">
@@ -10621,7 +10621,7 @@
 	  <enum>jvmtiTimerKind</enum>
 	  <description>
 	    The kind of timer.
-            On a platform that does not distinguish between user and system time, <datalink 
+            On a platform that does not distinguish between user and system time, <datalink
                  id="JVMTI_TIMER_TOTAL_CPU"><code>JVMTI_TIMER_TOTAL_CPU</code></datalink>
             is returned.
 	  </description>
@@ -10659,12 +10659,12 @@
     <function id="GetCurrentThreadCpuTimerInfo" callbacksafe="safe"  impl="innative notrace" phase="start" num="134">
       <synopsis>Get Current Thread CPU Timer Information</synopsis>
       <description>
-	Get information about the 
-        <functionlink id="GetCurrentThreadCpuTime"/> timer. 
-	The fields of the <datalink id="jvmtiTimerInfo"/> structure 
+	Get information about the
+        <functionlink id="GetCurrentThreadCpuTime"/> timer.
+	The fields of the <datalink id="jvmtiTimerInfo"/> structure
 	are filled in with details about the timer.
         This information is specific to the platform and the implementation of
-        <functionlink id="GetCurrentThreadCpuTime"/> and thus 
+        <functionlink id="GetCurrentThreadCpuTime"/> and thus
         does not vary by thread nor does it vary
         during a particular invocation of the VM.
         <p/>
@@ -10696,15 +10696,15 @@
     <function id="GetCurrentThreadCpuTime" callbacksafe="safe" impl="innative notrace" phase="start" num="135">
       <synopsis>Get Current Thread CPU Time</synopsis>
       <description>
-            Return the CPU time utilized by the current thread.  
+            Return the CPU time utilized by the current thread.
             <p/>
             Note that the <functionlink id="GetThreadCpuTime"/>
             function provides CPU time for any thread, including
-            the current thread. <code>GetCurrentThreadCpuTime</code> 
+            the current thread. <code>GetCurrentThreadCpuTime</code>
             exists to support platforms which cannot
-            supply CPU time for threads other than the current 
+            supply CPU time for threads other than the current
             thread or which have more accurate information for
-            the current thread (see 
+            the current thread (see
             <functionlink id="GetCurrentThreadCpuTimerInfo"/> vs
             <functionlink id="GetThreadCpuTimerInfo"/>).
             On many platforms this call will be equivalent to:
@@ -10717,13 +10717,13 @@
 	<required id="can_get_current_thread_cpu_time">
 	    Can get current thread CPU time.
             <p/>
-	    If this capability is enabled after threads have started, 
+	    If this capability is enabled after threads have started,
 	    the implementation may choose any time up
-	    to and including the time that the capability is enabled 
+	    to and including the time that the capability is enabled
 	    as the point where CPU time collection starts.
             <p/>
-            This capability must be potentially available on any 
-            platform where 
+            This capability must be potentially available on any
+            platform where
             <internallink id="jvmtiCapabilities.can_get_thread_cpu_time"><code>can_get_thread_cpu_time</code></internallink>
             is potentially available.
 	</required>
@@ -10733,7 +10733,7 @@
 	  <outptr><jlong/></outptr>
 	  <description>
 	    On return, points to the CPU time used by this thread
-	    in nanoseconds.  
+	    in nanoseconds.
             This is an unsigned value.  If tested or printed as a jlong (signed value)
             it may appear to be a negative number.
 	  </description>
@@ -10746,12 +10746,12 @@
     <function id="GetThreadCpuTimerInfo" num="136">
       <synopsis>Get Thread CPU Timer Information</synopsis>
       <description>
-	Get information about the 
-        <functionlink id="GetThreadCpuTime"/> timer. 
-	The fields of the <datalink id="jvmtiTimerInfo"/> structure 
+	Get information about the
+        <functionlink id="GetThreadCpuTime"/> timer.
+	The fields of the <datalink id="jvmtiTimerInfo"/> structure
 	are filled in with details about the timer.
         This information is specific to the platform and the implementation of
-        <functionlink id="GetThreadCpuTime"/> and thus 
+        <functionlink id="GetThreadCpuTime"/> and thus
         does not vary by thread nor does it vary
         during a particular invocation of the VM.
         <p/>
@@ -10783,19 +10783,19 @@
     <function id="GetThreadCpuTime" num="137">
       <synopsis>Get Thread CPU Time</synopsis>
       <description>
-          Return the CPU time utilized by the specified thread. 
+          Return the CPU time utilized by the specified thread.
           <p/>
 	  Get information about this timer with
-          <functionlink id="GetThreadCpuTimerInfo"/>. 
+          <functionlink id="GetThreadCpuTimerInfo"/>.
       </description>
       <origin>new</origin>
       <capabilities>
 	<required id="can_get_thread_cpu_time">
 	    Can get thread CPU time.
             <p/>
-	    If this capability is enabled after threads have started, 
+	    If this capability is enabled after threads have started,
 	    the implementation may choose any time up
-	    to and including the time that the capability is enabled 
+	    to and including the time that the capability is enabled
 	    as the point where CPU time collection starts.
 	</required>
       </capabilities>
@@ -10810,7 +10810,7 @@
 	  <outptr><jlong/></outptr>
 	  <description>
 	    On return, points to the CPU time used by the specified thread
-	    in nanoseconds.  
+	    in nanoseconds.
             This is an unsigned value.  If tested or printed as a jlong (signed value)
             it may appear to be a negative number.
 	  </description>
@@ -10823,9 +10823,9 @@
     <function id="GetTimerInfo" phase="any" callbacksafe="safe" num="138">
       <synopsis>Get Timer Information</synopsis>
       <description>
-	Get information about the 
-        <functionlink id="GetTime"/> timer. 
-	The fields of the <datalink id="jvmtiTimerInfo"/> structure 
+	Get information about the
+        <functionlink id="GetTime"/> timer.
+	The fields of the <datalink id="jvmtiTimerInfo"/> structure
 	are filled in with details about the timer.
         This information will not change during a particular invocation of the VM.
       </description>
@@ -10848,7 +10848,7 @@
     <function id="GetTime" phase="any" callbacksafe="safe" num="139">
       <synopsis>Get Time</synopsis>
       <description>
-          Return the current value of the system timer, in nanoseconds. 
+          Return the current value of the system timer, in nanoseconds.
           <p/>
           The value returned represents nanoseconds since some fixed but
           arbitrary time (perhaps in the future, so values may be
@@ -10857,7 +10857,7 @@
           how frequently values change.
           <p/>
 	  Get information about this timer with
-          <functionlink id="GetTimerInfo"/>. 
+          <functionlink id="GetTimerInfo"/>.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -10866,7 +10866,7 @@
         <param id="nanos_ptr">
 	  <outptr><jlong/></outptr>
 	  <description>
-	    On return, points to the time in nanoseconds.  
+	    On return, points to the time in nanoseconds.
             This is an unsigned value.  If tested or printed as a jlong (signed value)
             it may appear to be a negative number.
 	  </description>
@@ -10881,7 +10881,7 @@
       <description>
           Returns the number of processors available to the Java virtual machine.
           <p/>
-          This value may change during a particular invocation of the virtual machine. 
+          This value may change during a particular invocation of the virtual machine.
           Applications that are sensitive to the number of available processors should
           therefore occasionally poll this property.
       </description>
@@ -10893,7 +10893,7 @@
 	  <outptr><jint/></outptr>
 	  <description>
 	    On return, points to the maximum number of processors available to the
-            virtual machine; never smaller than one.  
+            virtual machine; never smaller than one.
 	  </description>
 	</param>
       </parameters>
@@ -10914,18 +10914,18 @@
     <function id="AddToBootstrapClassLoaderSearch" jkernel="yes" phase="onload" num="149">
       <synopsis>Add To Bootstrap Class Loader Search</synopsis>
       <description>
-          This function can be used to cause instrumentation classes to be defined by the 
+          This function can be used to cause instrumentation classes to be defined by the
           bootstrap class loader. See <vmspec chapter="5.3.1"/>.
           After the bootstrap
-	  class loader unsuccessfully searches for a class, the specified platform-dependent 
-	  search path <paramlink id="segment"/> will be searched as well. Only one segment may be specified in 
-	  the <paramlink id="segment"/>. This function may be called multiple times to add multiple segments, 
+	  class loader unsuccessfully searches for a class, the specified platform-dependent
+	  search path <paramlink id="segment"/> will be searched as well. Only one segment may be specified in
+	  the <paramlink id="segment"/>. This function may be called multiple times to add multiple segments,
 	  the segments will be searched in the order that this function was called.
 	  <p/>
-	  In the <code>OnLoad</code> phase the function may be used to specify any platform-dependent 
+	  In the <code>OnLoad</code> phase the function may be used to specify any platform-dependent
 	  search path segment to be searched after the bootstrap class loader unsuccessfully searches
 	  for a class. The segment is typically a directory or JAR file.
-	  <p/>	  
+	  <p/>
 	  In the live phase the <paramlink id="segment"/> may be used to specify any platform-dependent
 	  path to a <externallink id="docs/technotes/guides/jar/jar.html">
 	  JAR file</externallink>. The agent should take care that the JAR file does not
@@ -10953,7 +10953,7 @@
 	</param>
       </parameters>
       <errors>
-        <error id="JVMTI_ERROR_ILLEGAL_ARGUMENT">   
+        <error id="JVMTI_ERROR_ILLEGAL_ARGUMENT">
           <paramlink id="segment"/> is an invalid path. In the live phase, anything other than an
            existing JAR file is an invalid path.
         </error>
@@ -10965,15 +10965,15 @@
       <description>
 	  This function can be used to cause instrumentation classes to be
 	  defined by the system class loader. See <vmspec chapter="5.3.2"/>.
-	  After the class loader unsuccessfully searches for a class, the specified platform-dependent search 
-	  path <paramlink id="segment"/> will be searched as well. Only one segment may be specified in the 
-	  <paramlink id="segment"/>. This function may be called multiple times to add multiple segments, the 
+	  After the class loader unsuccessfully searches for a class, the specified platform-dependent search
+	  path <paramlink id="segment"/> will be searched as well. Only one segment may be specified in the
+	  <paramlink id="segment"/>. This function may be called multiple times to add multiple segments, the
 	  segments will be searched in the order that this function was called.
 	  <p/>
-	  In the <code>OnLoad</code> phase the function may be used to specify any platform-dependent 
+	  In the <code>OnLoad</code> phase the function may be used to specify any platform-dependent
 	  search path segment to be searched after the system class loader unsuccessfully searches
 	  for a class. The segment is typically a directory or JAR file.
-	  <p/>	  
+	  <p/>
 	  In the live phase the <paramlink id="segment"/> is a platform-dependent path to a
 	  <externallink id="docs/technotes/guides/jar/jar.html">JAR file</externallink> to be
 	  searched after the system class loader unsuccessfully searches for a class. The agent should
@@ -10981,9 +10981,9 @@
           defined by the system class loader for the purposes of instrumentation.
           <p/>
 	  In the live phase the system class loader supports adding a JAR file to be searched if
-          the system class loader implements a method name <code>appendToClassPathForInstrumentation</code> 
-	  which takes a single parameter of type <code>java.lang.String</code>. The method is not required 
-	  to have <code>public</code> access. 
+          the system class loader implements a method name <code>appendToClassPathForInstrumentation</code>
+	  which takes a single parameter of type <code>java.lang.String</code>. The method is not required
+	  to have <code>public</code> access.
 	  <p/>
           <vmspec/> specifies that a subsequent attempt to resolve a symbolic
           reference that the Java virtual machine has previously unsuccessfully attempted
@@ -11012,7 +11012,7 @@
         </error>
 	<error id="JVMTI_ERROR_CLASS_LOADER_UNSUPPORTED">
 	  Operation not supported by the system class loader.
-	</error>                                                                                         
+	</error>
       </errors>
     </function>
 
@@ -11028,7 +11028,7 @@
     <function id="GetSystemProperties" phase="onload" num="130">
       <synopsis>Get System Properties</synopsis>
       <description>
-        The list of VM system property keys which may be used with 
+        The list of VM system property keys which may be used with
 	<functionlink id="GetSystemProperty"/> is returned.
         It is strongly recommended that virtual machines provide the
         following property keys:
@@ -11043,15 +11043,15 @@
         Provides access to system properties defined by and used
         by the VM.
         Properties set on the command-line are included.
-	This allows getting and setting of these properties 
+	This allows getting and setting of these properties
         before the VM even begins executing bytecodes.
-	Since this is a VM view of system properties, the set of available 
+	Since this is a VM view of system properties, the set of available
         properties will usually be different than that
 	in <code>java.lang.System.getProperties</code>.
-        JNI method invocation may be used to access 
+        JNI method invocation may be used to access
         <code>java.lang.System.getProperties</code>.
         <p/>
-        The set of properties may grow during execution.	  
+        The set of properties may grow during execution.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -11066,7 +11066,7 @@
         <param id="property_ptr">
 	  <allocallocbuf outcount="count_ptr"><char/></allocallocbuf>
 	  <description>
-	    On return, points to an array of property keys, encoded as 
+	    On return, points to an array of property keys, encoded as
 	    <internallink id="mUTF">modified UTF-8</internallink> strings.
 	  </description>
 	</param>
@@ -11078,25 +11078,25 @@
     <function id="GetSystemProperty" phase="onload" num="131">
       <synopsis>Get System Property</synopsis>
       <description>
-        Return a VM system property value given the property key.  
+        Return a VM system property value given the property key.
         <p/>
 	The function <functionlink id="GetSystemProperties"/>
 	returns the set of property keys which may be used.
         The properties which can be retrieved may grow during
 	execution.
         <p/>
-	Since this is a VM view of system properties, the values 
-        of properties may differ from that returned by 
+	Since this is a VM view of system properties, the values
+        of properties may differ from that returned by
 	<code>java.lang.System.getProperty(String)</code>.
-        A typical VM might copy the values of the VM system 
+        A typical VM might copy the values of the VM system
         properties into the <code>Properties</code> held by
 	<code>java.lang.System</code> during the initialization
         of that class. Thereafter any changes to the VM system
-        properties (with <functionlink id="SetSystemProperty"/>) 
+        properties (with <functionlink id="SetSystemProperty"/>)
         or the <code>java.lang.System</code> system properties
         (with <code>java.lang.System.setProperty(String,String)</code>)
         would cause the values to diverge.
-        JNI method invocation may be used to access 
+        JNI method invocation may be used to access
         <code>java.lang.System.getProperty(String)</code>.
       </description>
       <origin>new</origin>
@@ -11119,7 +11119,7 @@
 	</param>
       </parameters>
       <errors>
-        <error id="JVMTI_ERROR_NOT_AVAILABLE"> 
+        <error id="JVMTI_ERROR_NOT_AVAILABLE">
           This property is not available.
 	  Use <functionlink id="GetSystemProperties"/> to find available properties.
         </error>
@@ -11129,7 +11129,7 @@
     <function id="SetSystemProperty" phase="onloadOnly" num="132">
       <synopsis>Set System Property</synopsis>
       <description>
-        Set a VM system property value.  
+        Set a VM system property value.
         <p/>
 	The function <functionlink id="GetSystemProperties"/>
 	returns the set of property keys, some of these may be settable.
@@ -11161,7 +11161,7 @@
 	</param>
       </parameters>
       <errors>
-        <error id="JVMTI_ERROR_NOT_AVAILABLE"> 
+        <error id="JVMTI_ERROR_NOT_AVAILABLE">
           This property is not available or is not writeable.
         </error>
       </errors>
@@ -11177,7 +11177,7 @@
     <function id="GetPhase" jkernel="yes" phase="any" num="133">
       <synopsis>Get Phase</synopsis>
       <description>
-          Return the current phase of VM execution.  
+          Return the current phase of VM execution.
           The phases proceed in sequence:
           <constants id="jvmtiPhase" label="Phases of execution" kind="enum">
             <constant id="JVMTI_PHASE_ONLOAD" num="1">
@@ -11193,7 +11193,7 @@
               <code>VMStart</code> event.
             </constant>
             <constant id="JVMTI_PHASE_START" num="6">
-              Start phase: when the <eventlink id="VMStart"><code>VMStart</code></eventlink> event 
+              Start phase: when the <eventlink id="VMStart"><code>VMStart</code></eventlink> event
               is sent and until the <code>VMInit</code> event is sent.
             </constant>
             <constant id="JVMTI_PHASE_LIVE" num="4">
@@ -11222,8 +11222,8 @@
           <p/>
           Most <jvmti/> events are sent only in the live phase.
           The following events operate in others phases:
-          <eventphaselist phase="start"/>          
-          <eventphaselist phase="any"/>          
+          <eventphaselist phase="start"/>
+          <eventphaselist phase="any"/>
       </description>
       <origin>new</origin>
       <capabilities>
@@ -11245,7 +11245,7 @@
       <description>
         Shutdown a <jvmti/> connection created with JNI <code>GetEnv</code>
         (see <internallink id="environments"><jvmti/> Environments</internallink>).
-        Dispose of any resources held by the environment.  
+        Dispose of any resources held by the environment.
         <issue>
 	    What resources are reclaimed? What is undone?
 	    Breakpoints,watchpoints removed?
@@ -11255,7 +11255,7 @@
         Memory allocated by this environment via calls to <jvmti/> functions
         is not released, this can be done explicitly by the agent
         by calling <functionlink id="Deallocate"/>.
-        Raw monitors created by this environment are not destroyed, 
+        Raw monitors created by this environment are not destroyed,
         this can be done explicitly by the agent
         by calling <functionlink id="DestroyRawMonitor"/>.
         The state of threads waiting on raw monitors created by this environment
@@ -11294,7 +11294,7 @@
         This value is <code>NULL</code> unless set with this function.
 	Agents can allocate memory in which they store environment specific
         information. By setting environment-local storage it can then be
-	accessed with 
+	accessed with
 	<functionlink id="GetEnvironmentLocalStorage"></functionlink>.
 	<p/>
         Called by the agent to set the value of the <jvmti/>
@@ -11307,10 +11307,10 @@
       </capabilities>
       <parameters>
         <param id="data">
-	  <inbuf> 
-	    <void/> 
-	    <nullok>value is set to <code>NULL</code></nullok> 
-	  </inbuf> 
+	  <inbuf>
+	    <void/>
+	    <nullok>value is set to <code>NULL</code></nullok>
+	  </inbuf>
 	  <description>
 	    The value to be entered into the environment-local storage.
 	  </description>
@@ -11324,7 +11324,7 @@
       <synopsis>Get Environment Local Storage</synopsis>
       <description>
         Called by the agent to get the value of the <jvmti/> environment-local
-        storage. 
+        storage.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -11333,10 +11333,10 @@
         <param id="data_ptr">
 	  <agentbuf><void/></agentbuf>
 	  <description>
-	    Pointer through which the value of the environment local 
+	    Pointer through which the value of the environment local
 	    storage is returned.
 	    If environment-local storage has not been set with
-	    <functionlink id="SetEnvironmentLocalStorage"></functionlink> returned 
+	    <functionlink id="SetEnvironmentLocalStorage"></functionlink> returned
 	    pointer is <code>NULL</code>.
 	  </description>
 	</param>
@@ -11349,7 +11349,7 @@
       <synopsis>Get Version Number</synopsis>
       <description>
         Return the <jvmti/> version via <code>version_ptr</code>.
-        The return value is the version identifier. 
+        The return value is the version identifier.
         The version identifier includes major, minor and micro
         version as well as the interface type.
 	<constants id="jvmtiVersionInterfaceTypes" label="Version Interface Types" kind="bits">
@@ -11362,10 +11362,10 @@
 	</constants>
 	<constants id="jvmtiVersionMasks" label="Version Masks" kind="bits">
 	  <constant id="JVMTI_VERSION_MASK_INTERFACE_TYPE" num="0x70000000">
-	    Mask to extract interface type.  
+	    Mask to extract interface type.
 	    The value of the version returned by this function masked with
 	    <code>JVMTI_VERSION_MASK_INTERFACE_TYPE</code> is always
-            <code>JVMTI_VERSION_INTERFACE_JVMTI</code> 
+            <code>JVMTI_VERSION_INTERFACE_JVMTI</code>
             since this is a <jvmti/> function.
 	  </constant>
 	  <constant id="JVMTI_VERSION_MASK_MAJOR" num="0x0FFF0000">
@@ -11409,11 +11409,11 @@
     <function id="GetErrorName" phase="any" num="128">
       <synopsis>Get Error Name</synopsis>
       <description>
-        Return the symbolic name for an 
-          <internallink id="ErrorSection">error code</internallink>.  
-        <p/>
-	For example 
-        <code>GetErrorName(env, JVMTI_ERROR_NONE, &amp;err_name)</code> 
+        Return the symbolic name for an
+          <internallink id="ErrorSection">error code</internallink>.
+        <p/>
+	For example
+        <code>GetErrorName(env, JVMTI_ERROR_NONE, &amp;err_name)</code>
         would return in <code>err_name</code> the string
         <code>"JVMTI_ERROR_NONE"</code>.
       </description>
@@ -11459,7 +11459,7 @@
 	  </constant>
         </constants>
 	Control verbose output.
-	This is the output which typically is sent to <code>stderr</code>. 
+	This is the output which typically is sent to <code>stderr</code>.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -11488,18 +11488,18 @@
       <description>
         Although the greatest functionality is achieved with location information
         referencing the virtual machine bytecode index, the definition of
-        <code>jlocation</code> has intentionally been left unconstrained to allow VM 
+        <code>jlocation</code> has intentionally been left unconstrained to allow VM
         implementations that do not have this information.
         <p/>
         This function describes the representation of <code>jlocation</code> used in this VM.
-        If the returned format is <datalink id="JVMTI_JLOCATION_JVMBCI"></datalink>, 
+        If the returned format is <datalink id="JVMTI_JLOCATION_JVMBCI"></datalink>,
         <code>jlocation</code>s can
         be used as in indices into the array returned by
-        <functionlink id="GetBytecodes"></functionlink>.  
+        <functionlink id="GetBytecodes"></functionlink>.
 	<constants id="jvmtiJlocationFormat" label="JLocation Format Enumeration" kind="enum">
 	  <constant id="JVMTI_JLOCATION_JVMBCI" num="1">
-	    <code>jlocation</code> values represent virtual machine 
-	    bytecode indices--that is, offsets into the 
+	    <code>jlocation</code> values represent virtual machine
+	    bytecode indices--that is, offsets into the
 	    virtual machine code for a method.
 	  </constant>
 	  <constant id="JVMTI_JLOCATION_MACHINEPC" num="2">
@@ -11534,16 +11534,16 @@
   <intro>
     Every <jvmti/> function returns a <b><code>jvmtiError</code></b> error code.
     <p/>
-    It is the responsibility of the agent to call <jvmti/> functions with 
+    It is the responsibility of the agent to call <jvmti/> functions with
     valid parameters and in the proper context (calling thread is attached,
-    phase is correct, etc.).  
-    Detecting some error conditions may be difficult, inefficient, or 
+    phase is correct, etc.).
+    Detecting some error conditions may be difficult, inefficient, or
     impossible for an implementation.
-    The errors listed in 
+    The errors listed in
     <internallink id="reqerrors">Function Specific Required Errors</internallink>
     must be detected by the implementation.
     All other errors represent the recommended response to the error
-    condition. 
+    condition.
   </intro>
 
   <errorcategory id="universal-error" label="Universal Errors">
@@ -11559,7 +11559,7 @@
       Pointer is unexpectedly <code>NULL</code>.
     </errorid>
     <errorid id="JVMTI_ERROR_OUT_OF_MEMORY" num="110">
-      The function attempted to allocate memory and no more memory was 
+      The function attempted to allocate memory and no more memory was
       available for allocation.
     </errorid>
     <errorid id="JVMTI_ERROR_ACCESS_DENIED" num="111">
@@ -11651,7 +11651,7 @@
     <intro>
       The following errors are returned by some <jvmti/> functions.
       They are returned in the event of invalid parameters passed by the
-      agent or usage in an invalid context.  
+      agent or usage in an invalid context.
       An implementation is not required to detect these errors.
     </intro>
 
@@ -11726,7 +11726,7 @@
       declared in the old class version.
     </errorid>
     <errorid id="JVMTI_ERROR_NAMES_DONT_MATCH" num="69">
-      The class name defined in the new class file is 
+      The class name defined in the new class file is
       different from the name in the old class object.
     </errorid>
     <errorid id="JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED" num="70">
@@ -11745,33 +11745,33 @@
     programs.
     <p/>
     To handle events, designate a set of callback functions with
-    <functionlink id="SetEventCallbacks"></functionlink>. 
-    For each event the corresponding callback function will be 
+    <functionlink id="SetEventCallbacks"></functionlink>.
+    For each event the corresponding callback function will be
     called.
     Arguments to the callback function provide additional
-    information about the event. 
+    information about the event.
     <p/>
-    The callback function is usually called from within an application 
-    thread. The <jvmti/> implementation does not 
+    The callback function is usually called from within an application
+    thread. The <jvmti/> implementation does not
     queue events in any way. This means
-    that event callback functions must be written 
-    carefully. Here are some general guidelines. See 
+    that event callback functions must be written
+    carefully. Here are some general guidelines. See
     the individual event descriptions for further
     suggestions.
     <p/>
     <ul>
-      <li>Any exception thrown during the execution of an event callback can 
+      <li>Any exception thrown during the execution of an event callback can
 	overwrite any current pending exception in the current application thread.
 	Care must be taken to preserve a pending exception
 	when an event callback makes a JNI call that might generate an exception.
       </li>
       <li>Event callback functions must be re-entrant. The <jvmti/> implementation does
-	not queue events. If an agent needs to process events one at a time, it 
-	can use a raw monitor inside the 
+	not queue events. If an agent needs to process events one at a time, it
+	can use a raw monitor inside the
 	event callback functions to serialize event processing.
       </li>
       <li>Event callback functions that execute JNI's FindClass function to load
-        classes need to note that FindClass locates the class loader associated 
+        classes need to note that FindClass locates the class loader associated
         with the current native method. For the purposes of class loading, an
         event callback that includes a JNI environment as a parameter to the
         callback will treated as if it is a native call, where the native method
@@ -11779,8 +11779,8 @@
       </li>
     </ul>
     <p/>
-    Some <jvmti/> events identify objects with JNI references. 
-    All references 
+    Some <jvmti/> events identify objects with JNI references.
+    All references
     in <jvmti/> events are JNI local references and will become invalid
     after the event callback returns.
     Unless stated otherwise, memory referenced by pointers sent in event
@@ -11791,13 +11791,13 @@
     Events are sent at the time they occur.
     The specification for each event includes the set of
     <functionlink id="GetPhase">phases</functionlink> in which it can be sent;
-    if an event triggering activity occurs during another phase, no event 
-    is sent. 
+    if an event triggering activity occurs during another phase, no event
+    is sent.
     <p/>
     A thread that generates an event does not change its execution status
     (for example, the event does not cause the thread to be suspended).
     If an agent wishes the event to result in suspension, then the agent
-    is responsible for explicitly suspending the thread with 
+    is responsible for explicitly suspending the thread with
     <functionlink id="SuspendThread"></functionlink>.
     <p/>
     If an event is enabled in multiple environments, the event will be sent
@@ -11810,26 +11810,26 @@
       <ul>
 	<li>
 	  If the event requires a capability, that capability must
-	  be added with 
+	  be added with
 	  <functionlink id="AddCapabilities"></functionlink>.
 	</li>
 	<li>
-	  A callback for the event must be set with 
+	  A callback for the event must be set with
 	  <functionlink id="SetEventCallbacks"></functionlink>.
 	</li>
 	<li>
 	  The event must be enabled with
-	  <functionlink id="SetEventNotificationMode"></functionlink>. 
+	  <functionlink id="SetEventNotificationMode"></functionlink>.
 	</li>
       </ul>
   </intro>
 
   <intro label="Multiple Co-located Events" id="eventorder">
-    In many situations it is possible for multiple events to occur 
-    at the same location in one thread. When this happens, all the events 
+    In many situations it is possible for multiple events to occur
+    at the same location in one thread. When this happens, all the events
     are reported through the event callbacks in the order specified in this section.
     <p/>
-    If the current location is at the entry point of a method, the 
+    If the current location is at the entry point of a method, the
     <eventlink id="MethodEntry"></eventlink> event is reported before
     any other event at the current location in the same thread.
     <p/>
@@ -11839,39 +11839,39 @@
     <code>exceptionCatch</code> event is reported before
     any other event at the current location in the same thread.
     <p/>
-    If a <code>singleStep</code> event or 
-    <code>breakpoint</code> event is triggered at the 
-    current location, the event is defined to occur 
-    immediately before the code at the current location is executed. 
-    These events are reported before any events which are triggered 
-    by the execution of code at the current location in the same 
-    thread (specifically: 
+    If a <code>singleStep</code> event or
+    <code>breakpoint</code> event is triggered at the
+    current location, the event is defined to occur
+    immediately before the code at the current location is executed.
+    These events are reported before any events which are triggered
+    by the execution of code at the current location in the same
+    thread (specifically:
     <code>exception</code>,
     <code>fieldAccess</code>, and
     <code>fieldModification</code>).
-    If both a step and breakpoint event are triggered for the same thread and 
+    If both a step and breakpoint event are triggered for the same thread and
     location, the step event is reported before the breakpoint event.
     <p/>
     If the current location is the exit point of a method (that is, the last
-    location before returning to the caller), the 
-    <eventlink id="MethodExit"></eventlink> event and 
+    location before returning to the caller), the
+    <eventlink id="MethodExit"></eventlink> event and
     the <eventlink id="FramePop"></eventlink> event (if requested)
     are reported after all other events at the current location in the same
-    thread. There is no specified ordering of these two events 
+    thread. There is no specified ordering of these two events
     with respect to each other.
     <p/>
     Co-located events can be triggered during the processing of some other
     event by the agent at the same location in the same thread.
-    If such an event, of type <i>y</i>, is triggered during the processing of 
-    an event of type <i>x</i>, and if <i>x</i> 
-    precedes <i>y</i> in the ordering specified above, the co-located event 
+    If such an event, of type <i>y</i>, is triggered during the processing of
+    an event of type <i>x</i>, and if <i>x</i>
+    precedes <i>y</i> in the ordering specified above, the co-located event
     <i>y</i> is reported for the current thread and location. If <i>x</i> does not precede
     <i>y</i>, <i>y</i> is not reported for the current thread and location.
-    For example, if a breakpoint is set at the current location 
+    For example, if a breakpoint is set at the current location
     during the processing of <eventlink id="SingleStep"></eventlink>,
-    that breakpoint will be reported before the thread moves off the current 
+    that breakpoint will be reported before the thread moves off the current
     location.
-    <p/>The following events are never considered to be co-located with 
+    <p/>The following events are never considered to be co-located with
     other events.
     <ul>
       <li><eventlink id="VMStart"></eventlink></li>
@@ -11887,7 +11887,7 @@
   <intro label="Event Callbacks" id="jvmtiEventCallbacks">
       The event callback structure below is used to specify the handler function
       for events.  It is set with the
-      <functionlink id="SetEventCallbacks"></functionlink> function. 
+      <functionlink id="SetEventCallbacks"></functionlink> function.
   </intro>
 
   <event label="Single Step"
@@ -11895,13 +11895,13 @@
     <description>
       Single step events allow the agent to trace thread execution
       at the finest granularity allowed by the VM. A single step event is
-      generated whenever a thread reaches a new location. 
-      Typically, single step events represent the completion of one VM 
-      instruction as defined in <vmspec/>. However, some implementations 
-      may define locations differently. In any case the 
+      generated whenever a thread reaches a new location.
+      Typically, single step events represent the completion of one VM
+      instruction as defined in <vmspec/>. However, some implementations
+      may define locations differently. In any case the
       <code>method</code> and <code>location</code>
       parameters  uniquely identify the current location and allow
-      the mapping to source file and line number when that information is 
+      the mapping to source file and line number when that information is
       available.
       <p/>
       No single step events are generated from within native methods.
@@ -11910,7 +11910,7 @@
     <capabilities>
       <required id="can_generate_single_step_events"></required>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -11953,14 +11953,14 @@
       designated as a breakpoint with <functionlink id="SetBreakpoint"></functionlink>.
       The <code>method</code> and <code>location</code>
       parameters uniquely identify the current location and allow
-      the mapping to source file and line number when that information is 
+      the mapping to source file and line number when that information is
       available.
     </description>
     <origin>jvmdi</origin>
     <capabilities>
       <required id="can_generate_breakpoint_events"></required>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -12000,18 +12000,18 @@
 	 id="FieldAccess" const="JVMTI_EVENT_FIELD_ACCESS" filtered="thread" num="63">
     <description>
       Field access events are generated whenever a thread accesses
-      a field that was designated as a watchpoint 
+      a field that was designated as a watchpoint
       with <functionlink id="SetFieldAccessWatch"></functionlink>.
-      The <code>method</code> and <code>location</code> 
+      The <code>method</code> and <code>location</code>
       parameters uniquely identify the current location and allow
-      the mapping to source file and line number when that information is 
-      available. 
+      the mapping to source file and line number when that information is
+      available.
     </description>
     <origin>jvmdi</origin>
     <capabilities>
       <required id="can_generate_field_access_events"></required>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -12070,18 +12070,18 @@
 	 id="FieldModification" const="JVMTI_EVENT_FIELD_MODIFICATION" filtered="thread" num="64">
     <description>
       Field modification events are generated whenever a thread modifies
-      a field that was designated as a watchpoint 
+      a field that was designated as a watchpoint
       with <functionlink id="SetFieldModificationWatch"></functionlink>.
-      The <code>method</code> and <code>location</code> 
+      The <code>method</code> and <code>location</code>
       parameters uniquely identify the current location and allow
-      the mapping to source file and line number when that information is 
-      available. 
+      the mapping to source file and line number when that information is
+      available.
     </description>
     <origin>jvmdi</origin>
     <capabilities>
       <required id="can_generate_field_modification_events"></required>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -12151,25 +12151,25 @@
   <event label="Frame Pop"
 	 id="FramePop" const="JVMTI_EVENT_FRAME_POP" filtered="thread" num="61">
     <description>
-      Frame pop events are generated upon exit from a single method 
+      Frame pop events are generated upon exit from a single method
       in a single frame as specified
       in a call to <functionlink id="NotifyFramePop"></functionlink>.
       This is true whether termination is caused by
       executing its return instruction
-      or by throwing an exception to its caller 
+      or by throwing an exception to its caller
       (see <paramlink id="was_popped_by_exception"></paramlink>).
-      However, frame pops caused by the <functionlink id="PopFrame"/> 
+      However, frame pops caused by the <functionlink id="PopFrame"/>
       function are not reported.
       <p/>
       The location reported by <functionlink id="GetFrameLocation"></functionlink>
-      identifies the executable location in the returning method, 
-      immediately prior to the return. 
+      identifies the executable location in the returning method,
+      immediately prior to the return.
     </description>
     <origin>jvmdi</origin>
     <capabilities>
       <required id="can_generate_frame_pop_events"></required>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -12209,24 +12209,24 @@
   <event label="Method Entry"
 	 id="MethodEntry" const="JVMTI_EVENT_METHOD_ENTRY" filtered="thread" num="65">
     <description>
-      Method entry events are generated upon entry of Java 
+      Method entry events are generated upon entry of Java
       programming language methods (including native methods).
       <p/>
       The location reported by <functionlink id="GetFrameLocation"></functionlink>
       identifies the initial executable location in
-      the method. 
+      the method.
       <p/>
       Enabling method
       entry or exit events will significantly degrade performance on many platforms and is thus
       not advised for performance critical usage (such as profiling).
-      <internallink id="bci">Bytecode instrumentation</internallink> should be 
+      <internallink id="bci">Bytecode instrumentation</internallink> should be
       used in these cases.
     </description>
     <origin>jvmdi</origin>
     <capabilities>
       <required id="can_generate_method_entry_events"></required>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -12259,25 +12259,25 @@
   <event label="Method Exit"
 	 id="MethodExit" const="JVMTI_EVENT_METHOD_EXIT" filtered="thread" num="66">
     <description>
-      Method exit events are generated upon exit from Java 
+      Method exit events are generated upon exit from Java
       programming language methods (including native methods).
       This is true whether termination is caused by
       executing its return instruction
-      or by throwing an exception to its caller 
+      or by throwing an exception to its caller
       (see <paramlink id="was_popped_by_exception"></paramlink>).
       <p/>
       The <code>method</code> field uniquely identifies the
-      method being entered or exited. The <code>frame</code> field provides 
+      method being entered or exited. The <code>frame</code> field provides
       access to the stack frame for the method.
       <p/>
       The location reported by <functionlink id="GetFrameLocation"></functionlink>
-      identifies the executable location in the returning method 
-      immediately prior to the return. 
+      identifies the executable location in the returning method
+      immediately prior to the return.
       <p/>
         Enabling method
 	entry or exit events will significantly degrade performance on many platforms and is thus
 	not advised for performance critical usage (such as profiling).
-        <internallink id="bci">Bytecode instrumentation</internallink> should be 
+        <internallink id="bci">Bytecode instrumentation</internallink> should be
         used in these cases.
     </description>
     <origin>jvmdi</origin>
@@ -12322,7 +12322,7 @@
 	<jvalue/>
 	<description>
 	  The return value of the method being exited.
-	  Undefined and should not be used if 
+	  Undefined and should not be used if
 	  <paramlink id="was_popped_by_exception"></paramlink>
 	  is true.
 	</description>
@@ -12333,18 +12333,18 @@
   <event label="Native Method Bind" phase="any"
 	 id="NativeMethodBind" const="JVMTI_EVENT_NATIVE_METHOD_BIND" num="67">
     <description>
-      A Native Method Bind event is sent when a VM binds a 
+      A Native Method Bind event is sent when a VM binds a
       Java programming language native method
-      to the address of a function that implements the native method. 
+      to the address of a function that implements the native method.
       This will occur when the native method is called for the first time
       and also occurs when the JNI function <code>RegisterNatives</code> is called.
       This event allows the bind to be redirected to an agent-specified
-      proxy function. 
+      proxy function.
       This event is not sent when the native method is unbound.
-      Typically, this proxy function will need to be specific to a 
+      Typically, this proxy function will need to be specific to a
       particular method or, to handle the general case, automatically
-      generated assembly code, since after instrumentation code is 
-      executed the function at the original binding 
+      generated assembly code, since after instrumentation code is
+      executed the function at the original binding
       address will usually be invoked.
       The original binding can be restored or the redirection changed
       by use of the JNI function <code>RegisterNatives</code>.
@@ -12363,7 +12363,7 @@
         </outptr>
           <description>
             The JNI environment of the event (current) thread
-	    Will be <code>NULL</code> if sent during the primordial 
+	    Will be <code>NULL</code> if sent during the primordial
             <functionlink id="GetPhase">phase</functionlink>.
           </description>
       </param>
@@ -12407,7 +12407,7 @@
 	 id="Exception" const="JVMTI_EVENT_EXCEPTION" filtered="thread" num="58">
     <description>
       Exception events are generated whenever an exception is first detected
-      in a Java programming language method. 
+      in a Java programming language method.
       Where "exception" means any <code>java.lang.Throwable</code>.
       The exception may have been thrown by a Java programming language or native
       method, but in the case of native methods, the event is not generated
@@ -12416,20 +12416,20 @@
       no exception event is generated.
       <p/>
       The <code>method</code> and <code>location</code>
-      parameters  uniquely identify the current location 
+      parameters  uniquely identify the current location
       (where the exception was detected) and allow
-      the mapping to source file and line number when that information is 
+      the mapping to source file and line number when that information is
       available. The <code>exception</code> field identifies the thrown
       exception object. The <code>catch_method</code>
       and <code>catch_location</code> identify the location of the catch clause,
       if any, that handles the thrown exception. If there is no such catch clause,
       each field is set to 0. There is no guarantee that the thread will ever
       reach this catch clause. If there are native methods on the call stack
-      between the throw location and the catch clause, the exception may 
+      between the throw location and the catch clause, the exception may
       be reset by one of those native methods.
       Similarly, exceptions that are reported as uncaught (<code>catch_klass</code>
       et al. set to 0) may in fact be caught by native code.
-      Agents can check for these occurrences by monitoring 
+      Agents can check for these occurrences by monitoring
       <eventlink id="ExceptionCatch"></eventlink> events.
       Note that finally clauses are implemented as catch and re-throw. Therefore they
       will be reported in the catch location.
@@ -12438,7 +12438,7 @@
     <capabilities>
       <required id="can_generate_exception_events"></required>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -12505,18 +12505,18 @@
       Where "exception" means any <code>java.lang.Throwable</code>.
       If the exception is caught in a Java programming language method, the event is generated
       when the catch clause is reached. If the exception is caught in a native
-      method, the event is generated as soon as control is returned to a Java programming language 
+      method, the event is generated as soon as control is returned to a Java programming language
       method. Exception catch events are generated for any exception for which
       a throw was detected in a Java programming language method.
       Note that finally clauses are implemented as catch and re-throw. Therefore they
       will generate exception catch events.
       <p/>
       The <code>method</code> and <code>location</code>
-      parameters uniquely identify the current location 
-      and allow the mapping to source file and line number when that information is 
-      available. For exceptions caught in a Java programming language method, the 
+      parameters uniquely identify the current location
+      and allow the mapping to source file and line number when that information is
+      available. For exceptions caught in a Java programming language method, the
       <code>exception</code> object identifies the exception object. Exceptions
-      caught in native methods are not necessarily available by the time the 
+      caught in native methods are not necessarily available by the time the
       exception catch is reported, so the <code>exception</code> field is set
       to <code>NULL</code>.
     </description>
@@ -12524,7 +12524,7 @@
     <capabilities>
       <required id="can_generate_exception_events"></required>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -12570,11 +12570,11 @@
 	 id="ThreadStart" const="JVMTI_EVENT_THREAD_START" num="52" phase="start">
     <description>
       Thread start events are generated by a new thread before its initial
-      method executes. 
+      method executes.
       <p/>
       A thread may be listed in the array returned by
       <functionlink id="GetAllThreads"></functionlink>
-      before its thread start event is generated. 
+      before its thread start event is generated.
       It is possible for other events to be generated
       on a thread before its thread start event.
       <p/>
@@ -12583,7 +12583,7 @@
     <origin>jvmdi</origin>
     <capabilities>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -12602,14 +12602,14 @@
   </event>
 
   <event label="Thread End"
-	 id="ThreadEnd" const="JVMTI_EVENT_THREAD_END" filtered="thread" num="53" phase="start"> 
+	 id="ThreadEnd" const="JVMTI_EVENT_THREAD_END" filtered="thread" num="53" phase="start">
     <description>
       Thread end events are generated by a terminating thread
-      after its initial method has finished execution. 
+      after its initial method has finished execution.
       <p/>
       A thread may be listed in the array returned by
       <functionlink id="GetAllThreads"></functionlink>
-      after its thread end event is generated. 
+      after its thread end event is generated.
       No events are generated on a thread
       after its thread end event.
       <p/>
@@ -12618,7 +12618,7 @@
     <origin>jvmdi</origin>
     <capabilities>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -12641,15 +12641,15 @@
     <description>
       A class load event is generated when a class is first loaded. The order
       of class load events generated by a particular thread are guaranteed
-      to match the order of class loading within that thread. 
+      to match the order of class loading within that thread.
       Array class creation does not generate a class load event.
-      The creation of a primitive class (for example, java.lang.Integer.TYPE) 
+      The creation of a primitive class (for example, java.lang.Integer.TYPE)
       does not generate a class load event.
       <p/>
       This event is sent at an early stage in loading the class. As
       a result the class should be used carefully.  Note, for example,
       that methods and fields are not yet loaded, so queries for methods,
-      fields, subclasses, and so on will not give correct results. 
+      fields, subclasses, and so on will not give correct results.
       See "Loading of Classes and Interfaces" in the <i>Java Language
       Specification</i>.  For most
       purposes the <eventlink id="ClassPrepare"></eventlink> event will
@@ -12658,7 +12658,7 @@
     <origin>jvmdi</origin>
     <capabilities>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -12687,7 +12687,7 @@
 	 id="ClassUnload" const="JVMTI_EVENT_CLASS_UNLOAD" num="57">
     <description>
       A class unload event is generated when the class is about to be unloaded.
-      Class unload events take place during garbage collection and must be 
+      Class unload events take place during garbage collection and must be
       handled extremely carefully. The garbage collector holds many locks
       and has suspended all other threads, so the event handler cannot depend
       on the ability to acquire any locks. The class unload event handler should
@@ -12704,7 +12704,7 @@
     <origin>jvmdi</origin>
     <capabilities>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -12733,16 +12733,16 @@
 	 id="ClassPrepare" const="JVMTI_EVENT_CLASS_PREPARE" filtered="thread" phase="start" num="56">
     <description>
       A class prepare event is generated when class preparation is complete.
-      At this point, class fields, methods, and implemented interfaces are 
-      available, and no code from the class has been executed. Since array 
-      classes never have fields or methods, class prepare events are not 
-      generated for them. Class prepare events are not generated for 
-      primitive classes (for example, <code>java.lang.Integer.TYPE</code>). 
+      At this point, class fields, methods, and implemented interfaces are
+      available, and no code from the class has been executed. Since array
+      classes never have fields or methods, class prepare events are not
+      generated for them. Class prepare events are not generated for
+      primitive classes (for example, <code>java.lang.Integer.TYPE</code>).
     </description>
     <origin>jvmdi</origin>
     <capabilities>
     </capabilities>
-    <parameters> 
+    <parameters>
       <param id="jni_env">
         <outptr>
           <struct>JNIEnv</struct>
@@ -12771,14 +12771,14 @@
     <description>
       This event is sent when the VM obtains class file data,
       but before it constructs
-      the in-memory representation for that class. 
-      This event is also sent when the class is being modified by the 
+      the in-memory representation for that class.
+      This event is also sent when the class is being modified by the
       <functionlink id="RetransformClasses"/> function or
       the <functionlink id="RedefineClasses"/> function,
       called in any <jvmti/> environment.
       The agent can instrument
       the existing class file data sent by the VM to include profiling/debugging hooks.
-      See the description of 
+      See the description of
       <internallink id="bci">bytecode instrumentation</internallink>
       for usage information.
       <p/>
@@ -12788,28 +12788,28 @@
     <internallink id="jvmtiCapabilities.can_generate_all_class_hook_events">
     <code>can_generate_all_class_hook_events</code></internallink>
     are enabled then this event may be sent in the primordial phase.
-    Otherwise, this event may be sent before the VM is initialized (the start 
+    Otherwise, this event may be sent before the VM is initialized (the start
     <functionlink id="GetPhase">phase</functionlink>).
     Some classes might not be compatible
     with the function (eg. ROMized classes or implementation defined classes) and this event will
     not be generated for these classes.
     <p/>
-    The agent must allocate the space for the modified 
+    The agent must allocate the space for the modified
     class file data buffer
-    using the memory allocation function 
+    using the memory allocation function
     <functionlink id="Allocate"></functionlink> because the
     VM is responsible for freeing the new class file data buffer
     using <functionlink id="Deallocate"></functionlink>.
     <p/>
-    If the agent wishes to modify the class file, it must set 
+    If the agent wishes to modify the class file, it must set
     <code>new_class_data</code> to point
     to the newly instrumented class file data buffer and set
-    <code>new_class_data_len</code> to the length of that 
+    <code>new_class_data_len</code> to the length of that
     buffer before returning
     from this call.  If no modification is desired, the agent simply
     does not set <code>new_class_data</code>.  If multiple agents
     have enabled this event the results are chained. That is, if
-    <code>new_class_data</code> has been set, it becomes the 
+    <code>new_class_data</code> has been set, it becomes the
     <code>class_data</code> for the next agent.
     <p/>
     When handling a class load in the live phase, then the
@@ -12827,13 +12827,13 @@
       <li><fieldlink id="can_retransform_classes"
                      struct="jvmtiCapabilities">retransformation
                                                 incapable</fieldlink>
-          environments, in the 
+          environments, in the
           order in which they were created
       </li>
       <li><fieldlink id="can_retransform_classes"
                      struct="jvmtiCapabilities">retransformation
                                                 capable</fieldlink>
-          environments, in the 
+          environments, in the
           order in which they were created
       </li>
     </ul>
@@ -12869,7 +12869,7 @@
       <param id="loader">
 	<jobject/>
 	  <description>
-	    The class loader loading the class.  
+	    The class loader loading the class.
             <code>NULL</code> if the bootstrap class loader.
 	  </description>
       </param>
@@ -12972,7 +12972,7 @@
       with other events, but
       the preceding events should be handled carefully, if at all, because the
       VM has not completed its initialization. The thread start event for the
-      main application thread is guaranteed not to occur until after the 
+      main application thread is guaranteed not to occur until after the
       handler for the VM initialization event returns.
       <p/>
       In the case of VM start-up failure, this event will not be sent.
@@ -13001,7 +13001,7 @@
   <event label="VM Death Event"
 	 id="VMDeath" const="JVMTI_EVENT_VM_DEATH" num="51">
     <description>
-      The VM death event notifies the agent of the termination of the VM. 
+      The VM death event notifies the agent of the termination of the VM.
       No events will occur after the VMDeath event.
       <p/>
       In the case of VM start-up failure, this event will not be sent.
@@ -13032,7 +13032,7 @@
       followed by a new <code>CompiledMethodLoad</code> event.
       Note that a single method may have multiple compiled forms, and that
       this event will be sent for each form.
-      Note also that several methods may be inlined into a single 
+      Note also that several methods may be inlined into a single
       address range, and that this event will be sent for each method.
       <p/>
       These events can be sent after their initial occurrence with
@@ -13049,7 +13049,7 @@
       <field id="location">
 	<jlocation/>
 	<description>
-	  Corresponding location. See 
+	  Corresponding location. See
 	  <functionlink id="GetJLocationFormat"></functionlink>
 	  for the meaning of location.
 	</description>
@@ -13095,7 +13095,7 @@
 	<vmbuf><struct>jvmtiAddrLocationMap</struct></vmbuf>
 	<description>
 	  Map from native addresses to location.
-	  The native address range of each entry is from 
+	  The native address range of each entry is from
 	  <fieldlink id="start_address" struct="jvmtiAddrLocationMap"></fieldlink>
 	  to <code>start_address-1</code> of the next entry.
 	  <code>NULL</code> if mapping information cannot be supplied.
@@ -13104,10 +13104,10 @@
       <param id="compile_info">
 	<vmbuf><void/></vmbuf>
 	<description>
-	  VM-specific compilation information.  
+	  VM-specific compilation information.
 	  The referenced compile information is managed by the VM
 	  and must not depend on the agent for collection.
-	  A VM implementation defines the content and lifetime 
+	  A VM implementation defines the content and lifetime
 	  of the information.
 	</description>
       </param>
@@ -13119,9 +13119,9 @@
     <description>
       Sent when a compiled method is unloaded from memory.
       This event might not be sent on the thread which performed the unload.
-      This event may be sent sometime after the unload occurs, but 
+      This event may be sent sometime after the unload occurs, but
       will be sent before the memory is reused
-      by a newly generated compiled method. This event may be sent after 
+      by a newly generated compiled method. This event may be sent after
       the class is unloaded.
     </description>
     <origin>jvmpi</origin>
@@ -13139,7 +13139,7 @@
 	<jmethodID class="klass"/>
 	  <description>
 	    Compiled method being unloaded.
-	    For identification of the compiled method only -- the class 
+	    For identification of the compiled method only -- the class
 	    may be unloaded and therefore the method should not be used
 	    as an argument to further JNI or <jvmti/> functions.
 	  </description>
@@ -13148,7 +13148,7 @@
 	<vmbuf><void/></vmbuf>
 	<description>
 	  Address where compiled method code was loaded.
-          For identification of the compiled method only -- 
+          For identification of the compiled method only --
           the space may have been reclaimed.
 	</description>
       </param>
@@ -13236,7 +13236,7 @@
       <param id="thread">
 	<jthread/>
 	  <description>
-	    JNI local reference to the thread 
+	    JNI local reference to the thread
 	    attempting to enter the monitor
 	  </description>
       </param>
@@ -13367,28 +13367,28 @@
          since="1.1">
     <description>
       Sent when a VM resource needed by a running application has been exhausted.
-      Except as required by the optional capabilities, the set of resources 
+      Except as required by the optional capabilities, the set of resources
       which report exhaustion is implementation dependent.
       <p/>
       The following bit flags define the properties of the resource exhaustion:
-      <constants id="jvmtiResourceExhaustionFlags" 
-                 label="Resource Exhaustion Flags" 
-                 kind="bits" 
+      <constants id="jvmtiResourceExhaustionFlags"
+                 label="Resource Exhaustion Flags"
+                 kind="bits"
                  since="1.1">
         <constant id="JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR" num="0x0001">
           After this event returns, the VM will throw a
           <code>java.lang.OutOfMemoryError</code>.
-        </constant>	  
+        </constant>
         <constant id="JVMTI_RESOURCE_EXHAUSTED_JAVA_HEAP" num="0x0002">
-	  The VM was unable to allocate memory from the <tm>Java</tm> 
+	  The VM was unable to allocate memory from the <tm>Java</tm>
           platform <i>heap</i>.
           The <i>heap</i> is the runtime
           data area from which memory for all class instances and
           arrays are allocated.
-        </constant>	  
+        </constant>
         <constant id="JVMTI_RESOURCE_EXHAUSTED_THREADS" num="0x0004">
 	  The VM was unable to create a thread.
-        </constant>	  
+        </constant>
       </constants>
     </description>
     <origin>new</origin>
@@ -13398,7 +13398,7 @@
         <internallink id="JVMTI_RESOURCE_EXHAUSTED_JAVA_HEAP">heap</internallink>.
       </capability>
       <capability id="can_generate_resource_exhaustion_threads_events">
-        Can generate events when the VM is unable to 
+        Can generate events when the VM is unable to
         <internallink id="JVMTI_RESOURCE_EXHAUSTED_THREADS">create
         a thread</internallink>.
       </capability>
@@ -13416,8 +13416,8 @@
 	<jint/>
         <description>
 	  Flags defining the properties of the of resource exhaustion
-	  as specified by the 
-          <internallink id="jvmtiResourceExhaustionFlags">Resource 
+	  as specified by the
+          <internallink id="jvmtiResourceExhaustionFlags">Resource
           Exhaustion Flags</internallink>.
 	  </description>
 	</param>
@@ -13440,16 +13440,16 @@
   <event label="VM Object Allocation"
 	 id="VMObjectAlloc" const="JVMTI_EVENT_VM_OBJECT_ALLOC" num="84">
     <description>
-      Sent when a method causes the virtual machine to allocate an 
+      Sent when a method causes the virtual machine to allocate an
       Object visible to Java programming language code and the
       allocation is not detectable by other intrumentation mechanisms.
       Generally object allocation should be detected by instrumenting
       the bytecodes of allocating methods.
       Object allocation generated in native code by JNI function
-      calls should be detected using 
+      calls should be detected using
       <internallink id="jniIntercept">JNI function interception</internallink>.
-      Some methods might not have associated bytecodes and are not 
-      native methods, they instead are executed directly by the 
+      Some methods might not have associated bytecodes and are not
+      native methods, they instead are executed directly by the
       VM. These methods should send this event.
       Virtual machines which are incapable of bytecode instrumentation
       for some or all of their methods can send this event.
@@ -13539,7 +13539,7 @@
   <event label="Garbage Collection Start"
 	 id="GarbageCollectionStart" const="JVMTI_EVENT_GARBAGE_COLLECTION_START" num="81">
     <description>
-      A Garbage Collection Start event is sent when a 
+      A Garbage Collection Start event is sent when a
       garbage collection pause begins.
       Only stop-the-world collections are reported--that is, collections during
       which all threads cease to modify the state of the Java virtual machine.
@@ -13550,8 +13550,8 @@
       specifically allow such use (see the raw monitor, memory management,
       and environment local storage functions).
       <p/>
-      This event is always sent as a matched pair with 
-      <eventlink id="GarbageCollectionFinish"/> 
+      This event is always sent as a matched pair with
+      <eventlink id="GarbageCollectionFinish"/>
       (assuming both events are enabled) and no garbage collection
       events will occur between them.
     </description>
@@ -13580,11 +13580,11 @@
       and the handler for the Garbage Collection Finish event simply
       notifies the raw monitor
       <p/>
-      This event is always sent as a matched pair with 
+      This event is always sent as a matched pair with
       <eventlink id="GarbageCollectionStart"/> (assuming both events are enabled).
       <issue>
 	The most important use of this event is to provide timing information,
-	and thus additional information is not required.  However,  
+	and thus additional information is not required.  However,
 	information about the collection which is "free" should be included -
         what that information is needs to be determined.
       </issue>
@@ -13613,7 +13613,7 @@
 	  </ul>
 	</issue>
 	<issue>
-	  Though this seemed trivial to implement.  
+	  Though this seemed trivial to implement.
           In the RI it appears this will be quite complex.
 	</issue>
     </description>
@@ -13659,54 +13659,54 @@
     </basetype>
     <basetype id="jint">
       <description>
-	Holds a Java programming language <code>int</code>. 
+	Holds a Java programming language <code>int</code>.
 	Signed 32 bits.
       </description>
     </basetype>
     <basetype id="jlong">
       <description>
-	Holds a Java programming language <code>long</code>. 
+	Holds a Java programming language <code>long</code>.
 	Signed 64 bits.
       </description>
     </basetype>
     <basetype id="jfloat">
       <description>
-	Holds a Java programming language <code>float</code>. 
+	Holds a Java programming language <code>float</code>.
 	32 bits.
       </description>
     </basetype>
     <basetype id="jdouble">
       <description>
-	Holds a Java programming language <code>double</code>. 
+	Holds a Java programming language <code>double</code>.
 	64 bits.
       </description>
     </basetype>
     <basetype id="jobject">
       <description>
-	Holds a Java programming language object. 
+	Holds a Java programming language object.
       </description>
     </basetype>
     <basetype id="jclass">
       <description>
-	Holds a Java programming language class. 
+	Holds a Java programming language class.
       </description>
     </basetype>
     <basetype id="jvalue">
       <description>
-	Is a union of all primitive types and <code>jobject</code>.  Thus, holds any Java 
-	programming language value. 
+	Is a union of all primitive types and <code>jobject</code>.  Thus, holds any Java
+	programming language value.
       </description>
     </basetype>
     <basetype id="jfieldID">
       <description>
-	Identifies a Java programming language field. 
+	Identifies a Java programming language field.
         <code>jfieldID</code>s returned by <jvmti/> functions and events may be
         safely stored.
       </description>
     </basetype>
     <basetype id="jmethodID">
       <description>
-	Identifies a Java programming language method, initializer, or constructor. 
+	Identifies a Java programming language method, initializer, or constructor.
         <code>jmethodID</code>s returned by <jvmti/> functions and events may be
         safely stored.  However, if the class is unloaded, they become invalid
         and must not be used.
@@ -13715,7 +13715,7 @@
     <basetype id="JNIEnv">
       <description>
 	Pointer to the JNI function table.  Pointer to this (<code>JNIEnv *</code>)
-	is a JNI environment. 
+	is a JNI environment.
       </description>
     </basetype>
   </basetypes>
@@ -13723,9 +13723,9 @@
   <basetypes id="jvmtiTypes" label="JVM Tool Interface Base Types">
     <basetype id="jvmtiEnv">
       <description>
-	The <jvmti/> <internallink id="environments">environment</internallink> pointer. 
+	The <jvmti/> <internallink id="environments">environment</internallink> pointer.
         See the <internallink id="FunctionSection">Function Section</internallink>.
-        <code>jvmtiEnv</code> points to the 
+        <code>jvmtiEnv</code> points to the
         <internallink id="FunctionTable">function table</internallink> pointer.
       </description>
     </basetype>
@@ -13744,8 +13744,8 @@
     <basetype id="jlocation">
       <definition>typedef jlong jlocation;</definition>
       <description>
-	A 64 bit value, representing a monotonically increasing 
-	executable position within a method. 
+	A 64 bit value, representing a monotonically increasing
+	executable position within a method.
         <code>-1</code> indicates a native method.
 	See <functionlink id="GetJLocationFormat"></functionlink> for the format on a
 	given VM.
@@ -13763,10 +13763,10 @@
 	Holds an error return code.
 	See the <internallink id="ErrorSection">Error section</internallink> for possible values.
 	<example>
-typedef enum { 
-    JVMTI_ERROR_NONE = 0,  
+typedef enum {
+    JVMTI_ERROR_NONE = 0,
     JVMTI_ERROR_INVALID_THREAD = 10,
-      ... 
+      ...
 } jvmtiError;
 </example>
       </description>
@@ -13775,13 +13775,13 @@
       <description>
         An identifier for an event type.
 	See the <internallink id="EventSection">Event section</internallink> for possible values.
-        It is guaranteed that future versions of this specification will 
+        It is guaranteed that future versions of this specification will
         never assign zero as an event type identifier.
 <example>
-typedef enum { 
-    JVMTI_EVENT_SINGLE_STEP = 1, 
-    JVMTI_EVENT_BREAKPOINT = 2, 
-      ... 
+typedef enum {
+    JVMTI_EVENT_SINGLE_STEP = 1,
+    JVMTI_EVENT_BREAKPOINT = 2,
+      ...
 } jvmtiEvent;
 </example>
       </description>
@@ -13793,16 +13793,16 @@
 typedef struct {
     jvmtiEventVMInit VMInit;
     jvmtiEventVMDeath VMDeath;
-      ... 
+      ...
 } jvmtiEventCallbacks;
 </example>
-        See <internallink id="jvmtiEventCallbacks">event callbacks</internallink> 
+        See <internallink id="jvmtiEventCallbacks">event callbacks</internallink>
         for the complete structure.
         <p/>
         Where, for example, the VM initialization callback is defined:
 <example>
 typedef void (JNICALL *jvmtiEventVMInit)
-    (jvmtiEnv *jvmti_env, 
+    (jvmtiEnv *jvmti_env,
      JNIEnv* jni_env,
      jthread thread);
 </example>
@@ -13813,8 +13813,8 @@
       <definition>typedef struct JNINativeInterface_ jniNativeInterface;</definition>
       <description>
 	Typedef for the JNI function table <code>JNINativeInterface</code>
-	defined in the 
-	<externallink id="docs/technotes/guides/jni/spec/functions.html#interface_function_table">
+	defined in the
+	<externallink id="jni/functions.html#interface-function-table">
           JNI Specification</externallink>.
 	The JNI reference implementation defines this with an underscore.
       </description>
@@ -13826,13 +13826,13 @@
 <issuessection label="Issues">
   <intro id="suspendRequired" label="Resolved Issue: Suspend - Required or Automatic">
     JVMDI requires that the agent suspend threads before calling
-    certain sensitive functions.  JVMPI requires garbage collection to be 
-    disabled before calling certain sensitive functions. 
+    certain sensitive functions.  JVMPI requires garbage collection to be
+    disabled before calling certain sensitive functions.
     It was suggested that rather than have this requirement, that
     VM place itself in a suitable state before performing an
     operation.  This makes considerable sense since each VM
     knows its requirements and can most easily arrange a
-    safe state.  
+    safe state.
     <p/>
     The ability to externally suspend/resume threads will, of
     course, remain.  The ability to enable/disable garbage collection will not.
@@ -13840,19 +13840,19 @@
     This issue is resolved--suspend will not
     be required.  The spec has been updated to reflect this.
   </intro>
-  
+
   <intro id="stackSampling" label="Resolved Issue: Call Stack Sampling">
     There are a variety of approaches to sampling call stacks.
     The biggest bifurcation is between VM controlled and agent
-    controlled.  
+    controlled.
     <p/>
     This issue is resolved--agent controlled
     sampling will be the approach.
   </intro>
-  
+
   <intro id="threadRepresentation" label="Resolved Issue: Thread Representation">
     JVMDI represents threads as jthread.  JVMPI primarily
-    uses JNIEnv* to represent threads.  
+    uses JNIEnv* to represent threads.
     <p/>
     The Expert Group has chosen jthread as the representation
     for threads in <jvmti/>.
@@ -13863,26 +13863,26 @@
 
   <intro id="design" label="Resolved Issue: Method Representation">
     The JNI spec allows an implementation to depend on jclass/jmethodID
-    pairs, rather than simply a jmethodID, to reference a method.  
-    JVMDI, for consistency, choose the same representation.  
+    pairs, rather than simply a jmethodID, to reference a method.
+    JVMDI, for consistency, choose the same representation.
     JVMPI, however, specifies that a jmethodID alone maps to a
     method.  Both of the Sun <tm>J2SE</tm> virtual machines (Classic and <tm>HotSpot</tm>) store
     pointers in jmethodIDs, and as a result, a jmethodID is sufficient.
     In fact, any JVM implementation that supports JVMPI must have
-    such a representation.  
+    such a representation.
     <jvmti/> will use jmethodID as a unique representation of a method
     (no jclass is used).
-    There should be efficiency gains, particularly in 
+    There should be efficiency gains, particularly in
     functionality like stack dumping, to this representation.
     <p/>
     Note that fields were not used in JVMPI and that the access profile
-    of fields differs from methods--for implementation efficiency 
-    reasons, a jclass/jfieldID pair will still be needed for field 
+    of fields differs from methods--for implementation efficiency
+    reasons, a jclass/jfieldID pair will still be needed for field
     reference.
   </intro>
 
   <intro id="localReferenceIssue" label="Resolved Issue: Local References">
-    Functions return local references. 
+    Functions return local references.
   </intro>
 
   <intro id="frameRep" label="Resolved Issue: Representation of frames">
@@ -13900,37 +13900,37 @@
   </intro>
 
   <intro id="taghint" label="Proposal: add tag hint function">
-    A hint of the percentage of objects that will be tagged would 
+    A hint of the percentage of objects that will be tagged would
     help the VM pick a good implementation.
   </intro>
 
   <intro id="moreMonitorQueries" label="Request: More Monitor Quires">
-  How difficult or easy would be to extend the monitor_info category to include 
+  How difficult or easy would be to extend the monitor_info category to include
     <pre>
-  - current number of monitors 
-  - enumeration of monitors 
-  - enumeration of threads waiting on a given monitor 
+  - current number of monitors
+  - enumeration of monitors
+  - enumeration of threads waiting on a given monitor
     </pre>
-  The reason for my question is the fact that current get_monitor_info support 
-  requires the agent to specify a given thread to get the info which is probably 
-  OK in the profiling/debugging space, while in the monitoring space the agent 
-  could be watching the monitor list and then decide which thread to ask for 
-  the info. You might ask why is this important for monitoring .... I think it 
+  The reason for my question is the fact that current get_monitor_info support
+  requires the agent to specify a given thread to get the info which is probably
+  OK in the profiling/debugging space, while in the monitoring space the agent
+  could be watching the monitor list and then decide which thread to ask for
+  the info. You might ask why is this important for monitoring .... I think it
   can aid in the detection/prediction of application contention caused by hot-locks.
   </intro>
 </issuessection>
 
 <changehistory id="ChangeHistory" update="09/05/07">
   <intro>
-    The <jvmti/> specification is an evolving document with major, minor, 
+    The <jvmti/> specification is an evolving document with major, minor,
     and micro version numbers.
     A released version of the specification is uniquely identified
     by its major and minor version.
-    The functions, events, and capabilities in this specification 
+    The functions, events, and capabilities in this specification
     indicate a "Since" value which is the major and minor version in
     which it was introduced.
-    The version of the specification implemented by the VM can 
-    be retrieved at runtime with the <functionlink id="GetVersionNumber"/> 
+    The version of the specification implemented by the VM can
+    be retrieved at runtime with the <functionlink id="GetVersionNumber"/>
     function.
   </intro>
   <change date="14 Nov 2002">
@@ -14024,9 +14024,9 @@
     get/set annotation, iterate live objects/heap.
     Add heap profiling functions place holder added:
     heap roots.
-    Heap profiling event added: object free. 
-    Heap profiling event redesigned: vm object allocation. 
-    Heap profiling event placeholders added: garbage collection start/finish. 
+    Heap profiling event added: object free.
+    Heap profiling event redesigned: vm object allocation.
+    Heap profiling event placeholders added: garbage collection start/finish.
     Native method bind event added.
   </change>
   <change date="19 Dec 2002">
@@ -14158,7 +14158,7 @@
       One character XML fix.
   </change>
   <change date="13 Mar 2003" version="v49">
-      Change function parameter names to be consistent with 
+      Change function parameter names to be consistent with
       event parameters (fooBarBaz becomes foo_bar_baz).
   </change>
   <change date="14 Mar 2003" version="v50">
@@ -14215,8 +14215,8 @@
   </change>
   <change date="14 May 2003" version="v63">
       Define the data type <code>jvmtiEventCallbacks</code>.
-      Zero length allocations return NULL.  
-      Keep SetAllocationHooks in JVMDI, but remove from <jvmti/>.  
+      Zero length allocations return NULL.
+      Keep SetAllocationHooks in JVMDI, but remove from <jvmti/>.
       Add JVMTI_THREAD_STATUS_FLAG_INTERRUPTED.
   </change>
   <change date="15 May 2003" version="v64">
@@ -14234,7 +14234,7 @@
   </change>
   <change date="17 June 2003" version="v68">
       Changes per June 11th Expert Group meeting --
-      Overhaul Heap functionality: single callback, 
+      Overhaul Heap functionality: single callback,
       remove GetHeapRoots, add reachable iterators,
       and rename "annotation" to "tag".
       NULL thread parameter on most functions is current
@@ -14250,8 +14250,8 @@
       Clean up issues sections.
       Rename GetClassName back to GetClassSignature and
       fix description.
-      Add generic signature to GetClassSignature, 
-      GetFieldSignature, GetMethodSignature, and 
+      Add generic signature to GetClassSignature,
+      GetFieldSignature, GetMethodSignature, and
       GetLocalVariableTable.
       Elide EstimateCostOfCapabilities.
       Clarify that the system property functions operate
@@ -14338,7 +14338,7 @@
       Split can_get_source_info into can_get_source_file_name, can_get_line_numbers,
       and can_get_source_debug_extension.
       PopFrame cannot have a native calling method.
-      Removed incorrect statement in GetClassloaderClasses 
+      Removed incorrect statement in GetClassloaderClasses
       (see <vmspec chapter="4.4"/>).
   </change>
   <change date="24 July 2003" version="v79">
@@ -14370,7 +14370,7 @@
       Rename JVMTI_REFERENCE_ARRAY to JVMTI_REFERENCE_ARRAY_ELEMENT.
   </change>
   <change date="28 July 2003" version="v85">
-      Steal java.lang.Runtime.availableProcessors() wording for 
+      Steal java.lang.Runtime.availableProcessors() wording for
       AvailableProcessors().
       Guarantee that zero will never be an event ID.
       Remove some issues which are no longer issues.
@@ -14395,7 +14395,7 @@
       Remove the ClassUnload event.
   </change>
   <change date="8 August 2003" version="0.2.89">
-      Heap reference iterator callbacks return an enum that 
+      Heap reference iterator callbacks return an enum that
       allows outgoing object references to be ignored.
       Allow JNIEnv as a param type to extension events/functions.
   </change>
@@ -14403,23 +14403,23 @@
       Fix a typo.
   </change>
   <change date="2 September 2003" version="0.2.91">
-      Remove all metadata functions: GetClassMetadata, 
+      Remove all metadata functions: GetClassMetadata,
       GetFieldMetadata, and GetMethodMetadata.
   </change>
   <change date="1 October 2003" version="0.2.92">
-      Mark the functions Allocate. Deallocate, RawMonitor*, 
-      SetEnvironmentLocalStorage, and GetEnvironmentLocalStorage 
+      Mark the functions Allocate. Deallocate, RawMonitor*,
+      SetEnvironmentLocalStorage, and GetEnvironmentLocalStorage
       as safe for use in heap callbacks and GC events.
   </change>
   <change date="24 November 2003" version="0.2.93">
-      Add pass through opaque user data pointer to heap iterate 
+      Add pass through opaque user data pointer to heap iterate
       functions and callbacks.
       In the CompiledMethodUnload event, send the code address.
       Add GarbageCollectionOccurred event.
       Add constant pool reference kind.
       Mark the functions CreateRawMonitor and DestroyRawMonitor
       as safe for use in heap callbacks and GC events.
-      Clarify: VMDeath, GetCurrentThreadCpuTimerInfo, 
+      Clarify: VMDeath, GetCurrentThreadCpuTimerInfo,
       GetThreadCpuTimerInfo, IterateOverReachableObjects,
       IterateOverObjectsReachableFromObject, GetTime and
       JVMTI_ERROR_NULL_POINTER.
@@ -14434,8 +14434,8 @@
       SetEventNotificationMode, add: error attempted inappropriate
       thread level control.
       Remove jvmtiExceptionHandlerEntry.
-      Fix handling of native methods on the stack -- 
-      location_ptr param of GetFrameLocation, remove 
+      Fix handling of native methods on the stack --
+      location_ptr param of GetFrameLocation, remove
       JVMTI_ERROR_OPAQUE_FRAME from GetFrameLocation,
       jvmtiFrameInfo.location, and jlocation.
       Remove typo (from JVMPI) implying that the MonitorWaited
@@ -14456,7 +14456,7 @@
   <change date="12 February 2004" version="0.2.102">
       Remove MonitorContendedExit.
       Added JNIEnv parameter to VMObjectAlloc.
-      Clarified definition of class_tag and referrer_index 
+      Clarified definition of class_tag and referrer_index
       parameters to heap callbacks.
   </change>
   <change date="16 Febuary 2004" version="0.2.103">
@@ -14483,13 +14483,13 @@
       Require NotifyFramePop to act on suspended threads.
   </change>
   <change date="24 Febuary 2004" version="0.3.10">
-      Add capabilities 
+      Add capabilities
         (<internallink id="jvmtiCapabilities.can_redefine_any_class"
          ><code>can_redefine_any_class</code></internallink>
-      and 
+      and
          <internallink id="jvmtiCapabilities.can_generate_all_class_hook_events"
-         ><code>can_generate_all_class_hook_events</code></internallink>) 
-      and an error (<errorlink id="JVMTI_ERROR_UNMODIFIABLE_CLASS"></errorlink>) 
+         ><code>can_generate_all_class_hook_events</code></internallink>)
+      and an error (<errorlink id="JVMTI_ERROR_UNMODIFIABLE_CLASS"></errorlink>)
       which allow some classes to be unmodifiable.
   </change>
   <change date="28 Febuary 2004" version="0.3.11">
@@ -14573,11 +14573,11 @@
       Bump major.minor version numbers to "1.0".
   </change>
   <change date="2 June 2004" version="1.0.33">
-      Clarify interaction between ForceGarbageCollection 
+      Clarify interaction between ForceGarbageCollection
       and ObjectFree.
   </change>
   <change date="6 June 2004" version="1.0.34">
-      Restrict AddToBootstrapClassLoaderSearch and 
+      Restrict AddToBootstrapClassLoaderSearch and
       SetSystemProperty to the OnLoad phase only.
   </change>
   <change date="11 June 2004" version="1.0.35">
@@ -14604,8 +14604,8 @@
       Add "since" version marker.
       Add AddToSystemClassLoaderSearch.
       Allow AddToBootstrapClassLoaderSearch be used in live phase.
-      Fix historic rubbish in the descriptions of the heap_object_callback 
-      parameter of IterateOverHeap and IterateOverInstancesOfClass functions; 
+      Fix historic rubbish in the descriptions of the heap_object_callback
+      parameter of IterateOverHeap and IterateOverInstancesOfClass functions;
       disallow NULL for this parameter.
       Clarify, correct and make consistent: wording about current thread,
       opaque frames and insufficient number of frames in PopFrame.
@@ -14629,19 +14629,19 @@
   </change>
   <change date="29 April 2005" version="1.1.51">
       Allow agents be started in the live phase.
-      Added paragraph about deploying agents.  
+      Added paragraph about deploying agents.
   </change>
   <change date="30 April 2005" version="1.1.52">
       Add specification description to SetNativeMethodPrefix(es).
-      Better define the conditions on GetConstantPool.  
+      Better define the conditions on GetConstantPool.
   </change>
   <change date="30 April 2005" version="1.1.53">
       Break out the GetClassVersionNumber function from GetConstantPool.
-      Clean-up the references to the VM Spec.  
+      Clean-up the references to the VM Spec.
   </change>
   <change date="1 May 2005" version="1.1.54">
       Allow SetNativeMethodPrefix(es) in any phase.
-      Add clarifications about the impact of redefinition on GetConstantPool.  
+      Add clarifications about the impact of redefinition on GetConstantPool.
   </change>
   <change date="2 May 2005" version="1.1.56">
       Various clarifications to SetNativeMethodPrefix(es).
@@ -14655,7 +14655,7 @@
   <change date="8 May 2005" version="1.1.59">
       Add <functionlink id="RetransformClasses"/>.
       Revamp the bytecode instrumentation documentation.
-      Change <functionlink id="IsMethodObsolete"/> to no longer 
+      Change <functionlink id="IsMethodObsolete"/> to no longer
       require the can_redefine_classes capability.
   </change>
   <change date="11 May 2005" version="1.1.63">
@@ -14668,7 +14668,7 @@
   <change date="4 June 2005" version="1.1.67">
       Add new heap functionity which supports reporting primitive values,
       allows setting the referrer tag, and has more powerful filtering:
-      FollowReferences, IterateThroughHeap, and their associated 
+      FollowReferences, IterateThroughHeap, and their associated
       callbacks, structs, enums, and constants.
   </change>
   <change date="4 June 2005" version="1.1.68">
@@ -14737,10 +14737,10 @@
       Better phrasing.
   </change>
   <change date="16 March 2006" version="1.1.88">
-      Match the referrer_index for static fields in Object Reference Callback 
+      Match the referrer_index for static fields in Object Reference Callback
       with the Reference Implementation (and all other known implementations);
       that is, make it match the definition for instance fields.
-      In GetThreadListStackTraces, add JVMTI_ERROR_INVALID_THREAD to cover 
+      In GetThreadListStackTraces, add JVMTI_ERROR_INVALID_THREAD to cover
       an invalid thread in the list; and specify that not started threads
       return empty stacks.
   </change>
@@ -14756,10 +14756,10 @@
   </change>
   <change date="1 May 2006" version="1.1.93">
       Changed spec to return -1 for monitor stack depth for the
-      implementation which can not determine stack depth. 
+      implementation which can not determine stack depth.
   </change>
   <change date="3 May 2006" version="1.1.94">
-      Corrections for readability and accuracy courtesy of Alan Pratt of IBM. 
+      Corrections for readability and accuracy courtesy of Alan Pratt of IBM.
       List the object relationships reported in FollowReferences.
   </change>
   <change date="5 May 2006" version="1.1.95">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/arraycopy/TestACSameSrcDst.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2017, Red Hat, Inc. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8179678
+ * @summary ArrayCopy with same src and dst can cause incorrect execution or compiler crash
+ *
+ * @run main/othervm -XX:CompileCommand=compileonly,TestACSameSrcDst::test* TestACSameSrcDst
+ *
+ */
+
+public class TestACSameSrcDst {
+
+    static int test1(int[] src, int[] dst) {
+        System.arraycopy(src, 5, dst, 0, 10);
+         // this shouldn't be transformed to src[5] because the copy
+         // can modify src[5] if src and dst are the same.
+        return dst[0];
+    }
+
+    static int test2(int[] src) {
+        System.arraycopy(src, 0, src, 0, 10);
+        // same source and destination. If load from destination is
+        // transformed to load of source, the compiler performs that
+        // optimization in an infinite loop.
+        return src[0];
+    }
+
+    static int test3() {
+        int[] src = new int[15];
+        src[5] = 0x42;
+        System.arraycopy(src, 5, src, 0, 10);
+        // That load can't bypass the arraycopy
+        return src[0];
+    }
+
+    static int test4() {
+        int[] src = new int[15];
+        System.arraycopy(src, 0, src, 5, 10);
+        return src[0];
+    }
+
+    // The dst[0] load can't bypass the arraycopy. After ArrayCopyNode
+    // is expanded, C2 looks for a stub call on the control paths of
+    // the array copy subgraph to decide whether the load's memory
+    // input can bypass the arraycopy. This test verifies the case of
+    // a source array that's not declared as an array.
+    static int test5(Object src, int l, boolean flag) {
+        int[] dst = new int[10];
+        if (flag) {
+            dst[0] = 0x42;
+            System.arraycopy(src, 0, dst, 0, l);
+            return dst[0];
+        }
+        return 0;
+    }
+
+    public static void main(String[] args) {
+        int[] array = new int[15];
+        for (int i = 0; i < 20000; i++) {
+            int res;
+            for (int j = 0; j < array.length; j++) {
+                array[j] = j;
+            }
+            int expected = array[5];
+            res = test1(array, array);
+            if (res != expected) {
+                throw new RuntimeException("bad result: " + res + " != " + expected);
+            }
+            test2(array);
+            res = test3();
+            if (res != 0x42) {
+                throw new RuntimeException("bad result: " + res + " != " + 0x42);
+            }
+            test4();
+            for (int j = 0; j < array.length; j++) {
+                array[j] = j;
+            }
+            res = test5(array, 10, (i%2) == 0);
+            if (res != 0) {
+                throw new RuntimeException("bad result: " + res + " != " + 0);
+            }
+        }
+    }
+}
--- a/jaxp/.hgtags	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/.hgtags	Wed Jul 05 23:40:06 2017 +0200
@@ -426,3 +426,5 @@
 c27321c889cf4c8e465a61b84572c00ef7ee6004 jdk-9+171
 bd4b2c8835f35760a51c1475b03a16cc20c62973 jdk-10+10
 eedb6e54c8bd6197ecba5fc0d8568bac8ae852dd jdk-9+172
+95bab8bf9201ae8bfdf28e164bf33b78e49477e7 jdk-10+11
+9788347e0629d0cb3a0e55a903494ff741d4fa15 jdk-9+173
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ReferenceType.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ReferenceType.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -262,6 +261,7 @@
    * @deprecated use getFirstCommonSuperclass(ReferenceType t) which has
    *             slightly changed semantics.
    */
+  @Deprecated
   public ReferenceType firstCommonSuperclass(ReferenceType t) {
     if (this.equals(Type.NULL)) return t;
     if (t.equals(Type.NULL)) return this;
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltSets.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltSets.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -22,7 +22,7 @@
  */
 package com.sun.org.apache.xalan.internal.lib;
 
-import com.sun.org.apache.xml.internal.utils.DOMHelper;
+import com.sun.org.apache.xml.internal.utils.DOM2Helper;
 import com.sun.org.apache.xpath.internal.NodeSet;
 import java.util.HashMap;
 import java.util.Map;
@@ -72,8 +72,8 @@
     for (int i = 0; i < nl1.getLength(); i++)
     {
       Node testNode = nl1.item(i);
-      if (DOMHelper.isNodeAfter(testNode, endNode)
-          && !DOMHelper.isNodeTheSame(testNode, endNode))
+      if (DOM2Helper.isNodeAfter(testNode, endNode)
+          && !DOM2Helper.isNodeTheSame(testNode, endNode))
         leadNodes.addElement(testNode);
     }
     return leadNodes;
@@ -107,8 +107,8 @@
     for (int i = 0; i < nl1.getLength(); i++)
     {
       Node testNode = nl1.item(i);
-      if (DOMHelper.isNodeAfter(startNode, testNode)
-          && !DOMHelper.isNodeTheSame(startNode, testNode))
+      if (DOM2Helper.isNodeAfter(startNode, testNode)
+          && !DOM2Helper.isNodeTheSame(startNode, testNode))
         trailNodes.addElement(testNode);
     }
     return trailNodes;
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -22,9 +21,6 @@
 package com.sun.org.apache.xalan.internal.res;
 
 import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 /**
  * Set up error messages.
@@ -1426,24 +1422,4 @@
   /** String for use when formatting of the error string failed.   */
   public static final String FORMAT_FAILED = "FORMAT_FAILED";
 
-  /** General error string.   */
-  public static final String ERROR_STRING = "#error";
-
-  /** String to prepend to error messages.  */
-  public static final String ERROR_HEADER = "Error: ";
-
-  /** String to prepend to warning messages.    */
-  public static final String WARNING_HEADER = "Warning: ";
-
-  /** String to specify the XSLT module.  */
-  public static final String XSL_HEADER = "XSLT ";
-
-  /** String to specify the XML parser module.  */
-  public static final String XML_HEADER = "XML ";
-
-  /** I don't think this is used any more.
-   * @deprecated  */
-  public static final String QUERY_HEADER = "PATTERN ";
-
-
     }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -22,9 +21,6 @@
 package com.sun.org.apache.xalan.internal.res;
 
 import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 /**
  * Set up error messages.
@@ -1426,24 +1422,4 @@
   /** String for use when formatting of the error string failed.   */
   public static final String FORMAT_FAILED = "FORMAT_FAILED";
 
-  /** General error string.   */
-  public static final String ERROR_STRING = "#error";
-
-  /** String to prepend to error messages.  */
-  public static final String ERROR_HEADER = "Error: ";
-
-  /** String to prepend to warning messages.    */
-  public static final String WARNING_HEADER = "Warning: ";
-
-  /** String to specify the XSLT module.  */
-  public static final String XSL_HEADER = "XSLT ";
-
-  /** String to specify the XML parser module.  */
-  public static final String XML_HEADER = "XML ";
-
-  /** I don't think this is used any more.
-   * @deprecated  */
-  public static final String QUERY_HEADER = "PATTERN ";
-
-
-    }
+}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -22,9 +21,6 @@
 package com.sun.org.apache.xalan.internal.res;
 
 import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 /**
  * Set up error messages.
@@ -1425,25 +1421,4 @@
 
   /** String for use when formatting of the error string failed.   */
   public static final String FORMAT_FAILED = "FORMAT_FAILED";
-
-  /** General error string.   */
-  public static final String ERROR_STRING = "#error";
-
-  /** String to prepend to error messages.  */
-  public static final String ERROR_HEADER = "Error: ";
-
-  /** String to prepend to warning messages.    */
-  public static final String WARNING_HEADER = "Warning: ";
-
-  /** String to specify the XSLT module.  */
-  public static final String XSL_HEADER = "XSLT ";
-
-  /** String to specify the XML parser module.  */
-  public static final String XML_HEADER = "XML ";
-
-  /** I don't think this is used any more.
-   * @deprecated  */
-  public static final String QUERY_HEADER = "PATTERN ";
-
-
     }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -22,9 +21,6 @@
 package com.sun.org.apache.xalan.internal.res;
 
 import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 /**
  * Set up error messages.
@@ -1425,25 +1421,4 @@
 
   /** String for use when formatting of the error string failed.   */
   public static final String FORMAT_FAILED = "FORMAT_FAILED";
-
-  /** General error string.   */
-  public static final String ERROR_STRING = "#error";
-
-  /** String to prepend to error messages.  */
-  public static final String ERROR_HEADER = "Error: ";
-
-  /** String to prepend to warning messages.    */
-  public static final String WARNING_HEADER = "Warning: ";
-
-  /** String to specify the XSLT module.  */
-  public static final String XSL_HEADER = "XSLT ";
-
-  /** String to specify the XML parser module.  */
-  public static final String XML_HEADER = "XML ";
-
-  /** I don't think this is used any more.
-   * @deprecated  */
-  public static final String QUERY_HEADER = "PATTERN ";
-
-
-    }
+}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -22,9 +21,6 @@
 package com.sun.org.apache.xalan.internal.res;
 
 import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 /**
  * Set up error messages.
@@ -1425,25 +1421,4 @@
 
   /** String for use when formatting of the error string failed.   */
   public static final String FORMAT_FAILED = "FORMAT_FAILED";
-
-  /** General error string.   */
-  public static final String ERROR_STRING = "#error";
-
-  /** String to prepend to error messages.  */
-  public static final String ERROR_HEADER = "Error: ";
-
-  /** String to prepend to warning messages.    */
-  public static final String WARNING_HEADER = "Warning: ";
-
-  /** String to specify the XSLT module.  */
-  public static final String XSL_HEADER = "XSLT ";
-
-  /** String to specify the XML parser module.  */
-  public static final String XML_HEADER = "XML ";
-
-  /** I don't think this is used any more.
-   * @deprecated  */
-  public static final String QUERY_HEADER = "PATTERN ";
-
-
-    }
+}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -22,9 +21,6 @@
 package com.sun.org.apache.xalan.internal.res;
 
 import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 /**
  * Set up error messages.
@@ -1425,25 +1421,4 @@
 
   /** String for use when formatting of the error string failed.   */
   public static final String FORMAT_FAILED = "FORMAT_FAILED";
-
-  /** General error string.   */
-  public static final String ERROR_STRING = "#error";
-
-  /** String to prepend to error messages.  */
-  public static final String ERROR_HEADER = "Error: ";
-
-  /** String to prepend to warning messages.    */
-  public static final String WARNING_HEADER = "Warning: ";
-
-  /** String to specify the XSLT module.  */
-  public static final String XSL_HEADER = "XSLT ";
-
-  /** String to specify the XML parser module.  */
-  public static final String XML_HEADER = "XML ";
-
-  /** I don't think this is used any more.
-   * @deprecated  */
-  public static final String QUERY_HEADER = "PATTERN ";
-
-
-    }
+}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -22,9 +21,6 @@
 package com.sun.org.apache.xalan.internal.res;
 
 import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 /**
  * Set up error messages.
@@ -1015,7 +1011,7 @@
      "\uC2DC\uC2A4\uD15C \uC18D\uC131 org.xml.sax.parser\uAC00 \uC9C0\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."},
 
     { ER_PARSER_ARG_CANNOT_BE_NULL,
-     "\uAD6C\uBB38\uBD84\uC11D\uAE30 \uC778\uC218\uB294 \uB110\uC774 \uC544\uB2C8\uC5B4\uC57C \uD569\uB2C8\uB2E4."},
+     "\uAD6C\uBB38 \uBD84\uC11D\uAE30 \uC778\uC218\uB294 \uB110\uC774 \uC544\uB2C8\uC5B4\uC57C \uD569\uB2C8\uB2E4."},
 
     { ER_FEATURE,
      "\uAE30\uB2A5: {0}"},
@@ -1252,7 +1248,7 @@
       "\uD2B9\uC218 \uCDA9\uB3CC\uC774 \uBC1C\uACAC\uB428: {0}. \uC2A4\uD0C0\uC77C\uC2DC\uD2B8\uC5D0\uC11C \uBC1C\uACAC\uB41C \uB9C8\uC9C0\uB9C9 \uD56D\uBAA9\uC774 \uC0AC\uC6A9\uB429\uB2C8\uB2E4."},
 
     { WG_PARSING_AND_PREPARING,
-      "========= \uAD6C\uBB38\uBD84\uC11D \uD6C4 {0} \uC900\uBE44 \uC911 =========="},
+      "========= \uAD6C\uBB38 \uBD84\uC11D \uD6C4 {0} \uC900\uBE44 \uC911 =========="},
 
     { WG_ATTR_TEMPLATE,
      "\uC18D\uC131 \uD15C\uD50C\uB9AC\uD2B8, {0}"},
@@ -1357,7 +1353,7 @@
   { "optionOUT",  "   [-OUT outputFileName]"},
   { "optionLXCIN", "   [-LXCIN compiledStylesheetFileNameIn]"},
   { "optionLXCOUT", "   [-LXCOUT compiledStylesheetFileNameOutOut]"},
-  { "optionPARSER", "   [-PARSER \uAD6C\uBB38\uBD84\uC11D\uAE30 \uC5F0\uACB0\uC758 \uC804\uCCB4 \uD074\uB798\uC2A4 \uC774\uB984]"},
+  { "optionPARSER", "   [-PARSER \uAD6C\uBB38 \uBD84\uC11D\uAE30 \uC5F0\uACB0\uC758 \uC804\uCCB4 \uD074\uB798\uC2A4 \uC774\uB984]"},
   {  "optionE", "   [-E(\uC5D4\uD2F0\uD2F0 \uCC38\uC870 \uD655\uC7A5 \uC548\uD568)]"},
   {  "optionV",  "   [-E(\uC5D4\uD2F0\uD2F0 \uCC38\uC870 \uD655\uC7A5 \uC548\uD568)]"},
   {  "optionQC", "   [-QC(\uC790\uB3D9 \uD328\uD134 \uCDA9\uB3CC \uACBD\uACE0)]"},
@@ -1378,9 +1374,9 @@
   {  "optionHTML", "   [-HTML(HTML \uD3EC\uB9F7\uD130 \uC0AC\uC6A9)]"},
   {  "optionPARAM", "   [-PARAM \uC774\uB984 \uD45C\uD604\uC2DD(\uC2A4\uD0C0\uC77C\uC2DC\uD2B8 \uB9E4\uAC1C\uBCC0\uC218 \uC124\uC815)]"},
   {  "noParsermsg1", "XSL \uD504\uB85C\uC138\uC2A4\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4."},
-  {  "noParsermsg2", "** \uAD6C\uBB38\uBD84\uC11D\uAE30\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC74C **"},
+  {  "noParsermsg2", "** \uAD6C\uBB38 \uBD84\uC11D\uAE30\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC74C **"},
   { "noParsermsg3",  "\uD074\uB798\uC2A4 \uACBD\uB85C\uB97C \uD655\uC778\uD558\uC2ED\uC2DC\uC624."},
-  { "noParsermsg4", "IBM\uC758 Java\uC6A9 XML \uAD6C\uBB38\uBD84\uC11D\uAE30\uAC00 \uC5C6\uC744 \uACBD\uC6B0 \uB2E4\uC74C \uC704\uCE58\uC5D0\uC11C \uB2E4\uC6B4\uB85C\uB4DC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."},
+  { "noParsermsg4", "IBM\uC758 Java\uC6A9 XML \uAD6C\uBB38 \uBD84\uC11D\uAE30\uAC00 \uC5C6\uC744 \uACBD\uC6B0 \uB2E4\uC74C \uC704\uCE58\uC5D0\uC11C \uB2E4\uC6B4\uB85C\uB4DC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."},
   { "noParsermsg5", "IBM AlphaWorks: http://www.alphaworks.ibm.com/formula/xml"},
   { "optionURIRESOLVER", "   [-URIRESOLVER \uC804\uCCB4 \uD074\uB798\uC2A4 \uC774\uB984(URI \uBD84\uC11D\uC5D0 \uC0AC\uC6A9\uD560 URIResolver)]"},
   { "optionENTITYRESOLVER",  "   [-ENTITYRESOLVER \uC804\uCCB4 \uD074\uB798\uC2A4 \uC774\uB984(\uC5D4\uD2F0\uD2F0 \uBD84\uC11D\uC5D0 \uC0AC\uC6A9\uD560 EntityResolver)]"},
@@ -1425,25 +1421,4 @@
 
   /** String for use when formatting of the error string failed.   */
   public static final String FORMAT_FAILED = "FORMAT_FAILED";
-
-  /** General error string.   */
-  public static final String ERROR_STRING = "#error";
-
-  /** String to prepend to error messages.  */
-  public static final String ERROR_HEADER = "Error: ";
-
-  /** String to prepend to warning messages.    */
-  public static final String WARNING_HEADER = "Warning: ";
-
-  /** String to specify the XSLT module.  */
-  public static final String XSL_HEADER = "XSLT ";
-
-  /** String to specify the XML parser module.  */
-  public static final String XML_HEADER = "XML ";
-
-  /** I don't think this is used any more.
-   * @deprecated  */
-  public static final String QUERY_HEADER = "PATTERN ";
-
-
-    }
+}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_pt_BR.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_pt_BR.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -22,9 +21,6 @@
 package com.sun.org.apache.xalan.internal.res;
 
 import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 /**
  * Set up error messages.
@@ -1425,25 +1421,4 @@
 
   /** String for use when formatting of the error string failed.   */
   public static final String FORMAT_FAILED = "FORMAT_FAILED";
-
-  /** General error string.   */
-  public static final String ERROR_STRING = "#error";
-
-  /** String to prepend to error messages.  */
-  public static final String ERROR_HEADER = "Error: ";
-
-  /** String to prepend to warning messages.    */
-  public static final String WARNING_HEADER = "Warning: ";
-
-  /** String to specify the XSLT module.  */
-  public static final String XSL_HEADER = "XSLT ";
-
-  /** String to specify the XML parser module.  */
-  public static final String XML_HEADER = "XML ";
-
-  /** I don't think this is used any more.
-   * @deprecated  */
-  public static final String QUERY_HEADER = "PATTERN ";
-
-
-    }
+}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_sv.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_sv.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -22,9 +21,6 @@
 package com.sun.org.apache.xalan.internal.res;
 
 import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 /**
  * Set up error messages.
@@ -482,7 +478,7 @@
   {"ER0000" , "{0}" },
 
     { ER_NO_CURLYBRACE,
-      "Fel: Uttryck f\u00E5r inte inneh\u00E5lla '{'"},
+      "Fel: Uttryck kan inte inneh\u00E5lla '{'"},
 
     { ER_ILLEGAL_ATTRIBUTE ,
      "{0} har ett otill\u00E5tet attribut: {1}"},
@@ -1426,24 +1422,4 @@
   /** String for use when formatting of the error string failed.   */
   public static final String FORMAT_FAILED = "FORMAT_FAILED";
 
-  /** General error string.   */
-  public static final String ERROR_STRING = "#error";
-
-  /** String to prepend to error messages.  */
-  public static final String ERROR_HEADER = "Error: ";
-
-  /** String to prepend to warning messages.    */
-  public static final String WARNING_HEADER = "Warning: ";
-
-  /** String to specify the XSLT module.  */
-  public static final String XSL_HEADER = "XSLT ";
-
-  /** String to specify the XML parser module.  */
-  public static final String XML_HEADER = "XML ";
-
-  /** I don't think this is used any more.
-   * @deprecated  */
-  public static final String QUERY_HEADER = "PATTERN ";
-
-
-    }
+}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -22,9 +21,6 @@
 package com.sun.org.apache.xalan.internal.res;
 
 import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 /**
  * Set up error messages.
@@ -1425,25 +1421,4 @@
 
   /** String for use when formatting of the error string failed.   */
   public static final String FORMAT_FAILED = "FORMAT_FAILED";
-
-  /** General error string.   */
-  public static final String ERROR_STRING = "#error";
-
-  /** String to prepend to error messages.  */
-  public static final String ERROR_HEADER = "Error: ";
-
-  /** String to prepend to warning messages.    */
-  public static final String WARNING_HEADER = "Warning: ";
-
-  /** String to specify the XSLT module.  */
-  public static final String XSL_HEADER = "XSLT ";
-
-  /** String to specify the XML parser module.  */
-  public static final String XML_HEADER = "XML ";
-
-  /** I don't think this is used any more.
-   * @deprecated  */
-  public static final String QUERY_HEADER = "PATTERN ";
-
-
-    }
+}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -22,9 +21,6 @@
 package com.sun.org.apache.xalan.internal.res;
 
 import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 /**
  * Set up error messages.
@@ -1425,25 +1421,4 @@
 
   /** String for use when formatting of the error string failed.   */
   public static final String FORMAT_FAILED = "FORMAT_FAILED";
-
-  /** General error string.   */
-  public static final String ERROR_STRING = "#error";
-
-  /** String to prepend to error messages.  */
-  public static final String ERROR_HEADER = "Error: ";
-
-  /** String to prepend to warning messages.    */
-  public static final String WARNING_HEADER = "Warning: ";
-
-  /** String to specify the XSLT module.  */
-  public static final String XSL_HEADER = "XSLT ";
-
-  /** String to specify the XML parser module.  */
-  public static final String XML_HEADER = "XML ";
-
-  /** I don't think this is used any more.
-   * @deprecated  */
-  public static final String QUERY_HEADER = "PATTERN ";
-
-
-    }
+}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/ForwardPositionIterator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/ForwardPositionIterator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -60,6 +59,7 @@
  * @deprecated This class exists only for backwards compatibility with old
  *             translets.  New code should not reference it.
  */
+@Deprecated
 public final class ForwardPositionIterator extends DTMAxisIteratorBase {
 
     private DTMAxisIterator _source;
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/KeyIndex.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/KeyIndex.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -115,6 +115,7 @@
      * Merge the current value's nodeset set by lookupKey() with _nodes.
      * @deprecated
      */
+    @Deprecated
     public void merge(KeyIndex other) {
         if (other == null) return;
 
@@ -136,6 +137,7 @@
      * key() function.
      * @deprecated
      */
+    @Deprecated
     public void lookupId(Object value) {
         // Clear _nodes array
         _nodes = null;
@@ -205,6 +207,7 @@
      * <b>deprecated.</b></em></p>
      * @deprecated
      */
+    @Deprecated
     public void lookupKey(Object value) {
         IntegerArray nodes = _index.get(value);
         _nodes = (nodes != null) ? (IntegerArray) nodes.clone() : null;
@@ -217,6 +220,7 @@
      * <b>deprecated.</b></em></p>
      * @deprecated
      */
+    @Deprecated
     public int next() {
         if (_nodes == null) return DTMAxisIterator.END;
 
@@ -313,6 +317,7 @@
      * <b>deprecated.</b></em></p>
      * @deprecated
      */
+    @Deprecated
     public DTMAxisIterator reset() {
         _position = 0;
         return this;
@@ -324,6 +329,7 @@
      * <b>deprecated.</b></em></p>
      * @deprecated
      */
+    @Deprecated
     public int getLast() {
         return (_nodes == null) ? 0 : _nodes.cardinality();
     }
@@ -334,6 +340,7 @@
      * <b>deprecated.</b></em></p>
      * @deprecated
      */
+    @Deprecated
     public int getPosition() {
         return _position;
     }
@@ -344,6 +351,7 @@
      * <b>deprecated.</b></em></p>
      * @deprecated
      */
+    @Deprecated
     public void setMark() {
         _markedPosition = _position;
     }
@@ -354,6 +362,7 @@
      * <b>deprecated.</b></em></p>
      * @deprecated
      */
+    @Deprecated
     public void gotoMark() {
         _position = _markedPosition;
     }
@@ -365,6 +374,7 @@
      * <b>deprecated.</b></em></p>
      * @deprecated
      */
+    @Deprecated
     public DTMAxisIterator setStartNode(int start) {
         if (start == DTMAxisIterator.END) {
             _nodes = null;
@@ -382,6 +392,7 @@
      * <b>deprecated.</b></em></p>
      * @deprecated
      */
+    @Deprecated
     public int getStartNode() {
         return 0;
     }
@@ -392,6 +403,7 @@
      * <b>deprecated.</b></em></p>
      * @deprecated
      */
+    @Deprecated
     public boolean isReverse() {
         return(false);
     }
@@ -402,6 +414,7 @@
      * <b>deprecated.</b></em></p>
      * @deprecated
      */
+    @Deprecated
     public DTMAxisIterator cloneIterator() {
         KeyIndex other = new KeyIndex(0);
         other._index = _index;
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecord.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecord.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -49,6 +48,7 @@
      * @deprecated This field continues to exist for binary compatibility.
      *             New code should not refer to it.
      */
+    @Deprecated
     private static final Collator DEFAULT_COLLATOR = Collator.getInstance();
 
     /**
@@ -56,6 +56,7 @@
      * @deprecated This field continues to exist for binary compatibility.
      *             New code should not refer to it.
      */
+    @Deprecated
     protected Collator _collator = DEFAULT_COLLATOR;
     protected Collator[] _collators;
 
@@ -64,6 +65,7 @@
      * @deprecated This field continues to exist for binary compatibility.
      *             New code should not refer to it.
      */
+    @Deprecated
     protected Locale _locale;
 
     protected CollatorFactory _collatorFactory;
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecordFactory.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecordFactory.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -55,6 +54,7 @@
      * @deprecated This constructor is no longer used in generated code.  It
      *             exists only for backwards compatibility.
      */
+     @Deprecated
      public NodeSortRecordFactory(DOM dom, String className, Translet translet,
                  String order[], String type[])
          throws TransletException
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -100,6 +100,7 @@
      * @deprecated This method exists only for backwards compatibility with old
      *             translets.  New code should not reference it.
      */
+    @Deprecated
     public static int positionF(DTMAxisIterator iterator) {
         return iterator.isReverse()
                      ? iterator.getLast() - iterator.getPosition() + 1
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/AttrImpl.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/AttrImpl.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -516,6 +515,7 @@
      * @deprecated Previous working draft of DOM Level 2. New method
      *             is <tt>getOwnerElement()</tt>.
      */
+    @Deprecated
     public Element getElement() {
         // if we have an owner, ownerNode is our ownerElement, otherwise it's
         // our ownerDocument and we don't have an ownerElement
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -832,6 +832,7 @@
      * compatibility with older applications. New applications
      * should never call this method.
      */
+    @Deprecated
     public void setEncoding(String value) {
         setXmlEncoding(value);
     }
@@ -849,6 +850,7 @@
      * compatibility with older applications. New applications
      * should never call this method.
      */
+    @Deprecated
     public String getEncoding() {
         return getXmlEncoding();
     }
@@ -890,6 +892,7 @@
      * compatibility with older applications. New applications
      * should never call this method.
      */
+    @Deprecated
     public void setVersion(String value) {
         setXmlVersion(value);
     }
@@ -908,6 +911,7 @@
      * compatibility with older applications. New applications
      * should never call this method.
      */
+    @Deprecated
     public String getVersion() {
         return getXmlVersion();
     }
@@ -932,6 +936,7 @@
      * compatibility with older applications. New applications
      * should never call this method.
      */
+    @Deprecated
     public void setStandalone(boolean value) {
         setXmlStandalone(value);
     }
@@ -950,6 +955,7 @@
      * compatibility with older applications. New applications
      * should never call this method.
      */
+    @Deprecated
     public boolean getStandalone() {
         return getXmlStandalone();
     }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredDocumentImpl.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredDocumentImpl.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -369,6 +369,7 @@
      * Creates an element node with a URI in the table and type information.
      * @deprecated
      */
+    @Deprecated
     public int createDeferredElement(String elementURI, String elementName,
                                       Object type) {
 
@@ -389,6 +390,7 @@
      * Creates an element node in the table.
      * @deprecated
      */
+    @Deprecated
     public int createDeferredElement(String elementName) {
         return createDeferredElement(null, elementName);
     }
@@ -474,6 +476,7 @@
      * Sets an attribute on an element node.
      * @deprecated
      */
+    @Deprecated
     public int setDeferredAttribute(int elementNodeIndex,
                                     String attrName, String attrURI,
                                     String attrValue, boolean specified) {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/NodeImpl.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/NodeImpl.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved.
  */
  /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -763,6 +763,7 @@
      * @since DOM Level 3
      * @deprecated
      */
+    @Deprecated
     public short compareTreePosition(Node other) {
         // Questions of clarification for this method - to be answered by the
         // DOM WG.   Current assumptions listed - LM
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xs/ItemPSVI.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xs/ItemPSVI.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -116,6 +115,7 @@
      *
      * @deprecated Use getSchemaValue().getNormalizedValue() instead
      */
+    @Deprecated
     public String getSchemaNormalizedValue();
 
     /**
@@ -127,6 +127,7 @@
      *
      * @deprecated Use getSchemaValue().getActualValue() instead
      */
+    @Deprecated
     public Object getActualNormalizedValue()
                                    throws XSException;
 
@@ -146,6 +147,7 @@
      *
      *  @deprecated Use getSchemaValue().getActualValueType() instead
      */
+    @Deprecated
     public short getActualNormalizedValueType()
                                    throws XSException;
 
@@ -182,6 +184,7 @@
      *
      *  @deprecated Use getSchemaValue().getListValueTypes() instead
      */
+    @Deprecated
     public ShortList getItemValueTypes()
                                    throws XSException;
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xs/XSAttributeDeclaration.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xs/XSAttributeDeclaration.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -55,6 +54,7 @@
      *
      * @deprecated Use getValueConstraintValue().getNormalizedValue() instead
      */
+    @Deprecated
     public String getConstraintValue();
 
     /**
@@ -67,6 +67,7 @@
      *
      *  @deprecated Use getValueConstraintValue().getActualValue() instead
      */
+    @Deprecated
     public Object getActualVC()
                                                         throws XSException;
 
@@ -86,6 +87,7 @@
      *
      *  @deprecated Use getValueConstraintValue().getActualValueType() instead
      */
+    @Deprecated
     public short getActualVCType()
                                                         throws XSException;
 
@@ -104,6 +106,7 @@
      *
      *  @deprecated Use getValueConstraintValue().getListValueTypes() instead
      */
+    @Deprecated
     public ShortList getItemValueTypes()
                                                         throws XSException;
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xs/XSAttributeUse.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xs/XSAttributeUse.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -48,6 +47,7 @@
      *
      * @deprecated Use getValueConstraintValue().getNormalizedValue() instead
      */
+    @Deprecated
     public String getConstraintValue();
 
     /**
@@ -60,6 +60,7 @@
      *
      * @deprecated Use getValueConstraintValue().getActualValue() instead
      */
+    @Deprecated
     public Object getActualVC()
                                        throws XSException;
 
@@ -79,6 +80,7 @@
      *
      * @deprecated Use getValueConstraintValue().getActualValueType() instead
      */
+    @Deprecated
     public short getActualVCType()
                                        throws XSException;
 
@@ -97,6 +99,7 @@
      *
      * @deprecated Use getValueConstraintValue().getListValueTypes() instead
      */
+    @Deprecated
     public ShortList getItemValueTypes()
                                        throws XSException;
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xs/XSElementDeclaration.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xs/XSElementDeclaration.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -56,6 +55,7 @@
      *
      * @deprecated Use getValueConstraintValue().getNormalizedValue() instead
      */
+    @Deprecated
     public String getConstraintValue();
 
     /**
@@ -68,6 +68,7 @@
      *
      * @deprecated Use getValueConstraintValue().getActualValue() instead
      */
+    @Deprecated
     public Object getActualVC()
                                             throws XSException;
 
@@ -87,6 +88,7 @@
      *
      * @deprecated Use getValueConstraintValue().getActualValueType() instead
      */
+    @Deprecated
     public short getActualVCType()
                                             throws XSException;
 
@@ -105,6 +107,7 @@
      *
      * @deprecated Use getValueConstraintValue().getListValueTypes() instead
      */
+    @Deprecated
     public ShortList getItemValueTypes()
                                             throws XSException;
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/ref/CoroutineParser.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/ref/CoroutineParser.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -45,6 +44,7 @@
  * coroutine protocol was not being used and was complicating design.
  * See {@link IncrementalSAXSource}.
  * */
+@Deprecated
 public interface CoroutineParser {
 
     /** @return the coroutine ID number for this CoroutineParser object.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -128,6 +128,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public abstract class BaseMarkupSerializer
     implements ContentHandler, DocumentHandler, LexicalHandler,
                DTDHandler, DeclHandler, DOMSerializer, Serializer
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializer.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializer.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -42,6 +41,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public interface DOMSerializer
 {
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -76,6 +75,7 @@
  * @deprecated As of JDK 9, Xerces 2.9.0, replaced by
  * {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}
  */
+@Deprecated
 public class DOMSerializerImpl implements LSSerializer, DOMConfiguration {
 
     // TODO: When DOM Level 3 goes to REC replace method calls using
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/ElementState.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/ElementState.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -36,6 +36,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public class ElementState
 {
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -37,6 +36,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public class EncodingInfo {
 
     // name of encoding as registered with IANA;
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Encodings.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Encodings.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -42,6 +42,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 class Encodings
 {
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLSerializer.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLSerializer.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -92,6 +92,7 @@
  * @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
  * @see Serializer
  */
+@Deprecated
 public class HTMLSerializer
     extends BaseMarkupSerializer
 {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLdtd.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLdtd.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -51,6 +51,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public final class HTMLdtd
 {
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/IndentPrinter.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/IndentPrinter.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -39,6 +38,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public class IndentPrinter
     extends Printer
 {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/LineSeparator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/LineSeparator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -32,6 +31,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public final class LineSeparator
 {
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Method.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Method.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -32,6 +31,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public final class Method
 {
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/OutputFormat.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/OutputFormat.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -65,6 +64,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public class OutputFormat
 {
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Printer.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Printer.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -47,6 +46,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public class Printer
 {
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Serializer.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Serializer.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -67,6 +66,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public interface Serializer
 {
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -42,6 +42,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public abstract class SerializerFactory
 {
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -41,6 +40,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 final class SerializerFactoryImpl
     extends SerializerFactory
 {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/TextSerializer.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/TextSerializer.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -65,6 +64,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public class TextSerializer
     extends BaseMarkupSerializer
 {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XHTMLSerializer.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XHTMLSerializer.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -39,6 +38,7 @@
  * @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
  * @see Serializer
  */
+@Deprecated
 public class XHTMLSerializer
     extends HTMLSerializer
 {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XML11Serializer.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XML11Serializer.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -84,6 +83,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public class XML11Serializer
 extends XMLSerializer {
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XMLSerializer.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XMLSerializer.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -95,6 +94,7 @@
  * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
  * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
  */
+@Deprecated
 public class XMLSerializer
 extends BaseMarkupSerializer {
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/TreeWalker.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/TreeWalker.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -17,13 +17,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package com.sun.org.apache.xml.internal.serializer;
 
-import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
-import java.io.File;
-
-import com.sun.org.apache.xml.internal.serializer.utils.AttList;
-import com.sun.org.apache.xml.internal.serializer.utils.DOM2Helper;
+import com.sun.org.apache.xml.internal.utils.AttList;
+import com.sun.org.apache.xml.internal.utils.DOM2Helper;
+import javax.xml.transform.Result;
 import org.w3c.dom.Comment;
 import org.w3c.dom.Element;
 import org.w3c.dom.EntityReference;
@@ -31,7 +30,6 @@
 import org.w3c.dom.Node;
 import org.w3c.dom.ProcessingInstruction;
 import org.w3c.dom.Text;
-
 import org.xml.sax.ContentHandler;
 import org.xml.sax.Locator;
 import org.xml.sax.ext.LexicalHandler;
@@ -58,12 +56,6 @@
    */
   final private SerializationHandler m_Serializer;
 
-  // ARGHH!!  JAXP Uses Xerces without setting the namespace processing to ON!
-  // DOM2Helper m_dh = new DOM2Helper();
-
-  /** DomHelper for this TreeWalker          */
-  final protected DOM2Helper m_dh;
-
   /** Locator object for this TreeWalker          */
   final private LocatorImpl m_locator = new LocatorImpl();
 
@@ -78,7 +70,7 @@
   }
 
   public TreeWalker(ContentHandler ch) {
-      this(ch,null);
+      this(ch, null);
   }
   /**
    * Constructor.
@@ -99,8 +91,6 @@
       if (systemId != null) {
           m_locator.setSystemId(systemId);
       }
-
-      m_dh = new DOM2Helper();
   }
 
   /**
@@ -209,7 +199,7 @@
     this.m_contentHandler.endDocument();
   }
 
-  /** Flag indicating whether following text to be processed is raw text          */
+  // Flag indicating whether following text to be processed is raw text
   boolean nextIsRaw = false;
 
   /**
@@ -313,7 +303,6 @@
         final int colon = attrName.indexOf(':');
         final String prefix;
 
-        // System.out.println("TreeWalker#startNode: attr["+i+"] = "+attrName+", "+attr.getNodeValue());
         if (attrName.equals("xmlns") || attrName.startsWith("xmlns:"))
         {
           // Use "" instead of null, as Xerces likes "" for the
@@ -335,13 +324,13 @@
         }
       }
 
-      String ns = m_dh.getNamespaceOfNode(node);
+      String ns = DOM2Helper.getNamespaceOfNode(node);
       if(null == ns)
         ns = "";
       this.m_contentHandler.startElement(ns,
-                                         m_dh.getLocalNameOfNode(node),
+                                         DOM2Helper.getLocalNameOfNode(node),
                                          node.getNodeName(),
-                                         new AttList(atts, m_dh));
+                                         new AttList(atts));
       break;
     case Node.PROCESSING_INSTRUCTION_NODE :
     {
@@ -389,9 +378,9 @@
       {
         nextIsRaw = false;
 
-        m_contentHandler.processingInstruction(javax.xml.transform.Result.PI_DISABLE_OUTPUT_ESCAPING, "");
+        m_contentHandler.processingInstruction(Result.PI_DISABLE_OUTPUT_ESCAPING, "");
         dispatachChars(node);
-        m_contentHandler.processingInstruction(javax.xml.transform.Result.PI_ENABLE_OUTPUT_ESCAPING, "");
+        m_contentHandler.processingInstruction(Result.PI_ENABLE_OUTPUT_ESCAPING, "");
       }
       else
       {
@@ -436,12 +425,12 @@
       break;
 
     case Node.ELEMENT_NODE :
-      String ns = m_dh.getNamespaceOfNode(node);
+      String ns = DOM2Helper.getNamespaceOfNode(node);
       if(null == ns)
         ns = "";
       this.m_contentHandler.endElement(ns,
-                                         m_dh.getLocalNameOfNode(node),
-                                         node.getNodeName());
+              DOM2Helper.getLocalNameOfNode(node),
+              node.getNodeName());
 
       if (m_Serializer == null) {
       // Don't bother with endPrefixMapping calls if the ContentHandler is a
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/utils/AttList.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,264 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.org.apache.xml.internal.serializer.utils;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-import org.xml.sax.Attributes;
-
-/**
- * Wraps a DOM attribute list in a SAX Attributes.
- *
- * This class is a copy of the one in com.sun.org.apache.xml.internal.utils.
- * It exists to cut the serializers dependancy on that package.
- * A minor changes from that package are:
- * DOMHelper reference changed to DOM2Helper, class is not "public"
- *
- * This class is not a public API, it is only public because it is
- * used in com.sun.org.apache.xml.internal.serializer.
- *
- * @xsl.usage internal
- */
-public final class AttList implements Attributes
-{
-
-  /** List of attribute nodes          */
-  NamedNodeMap m_attrs;
-
-  /** Index of last attribute node          */
-  int m_lastIndex;
-
-  // ARGHH!!  JAXP Uses Xerces without setting the namespace processing to ON!
-  // DOM2Helper m_dh = new DOM2Helper();
-
-  /** Local reference to DOMHelper          */
-  DOM2Helper m_dh;
-
-//  /**
-//   * Constructor AttList
-//   *
-//   *
-//   * @param attrs List of attributes this will contain
-//   */
-//  public AttList(NamedNodeMap attrs)
-//  {
-//
-//    m_attrs = attrs;
-//    m_lastIndex = m_attrs.getLength() - 1;
-//    m_dh = new DOM2Helper();
-//  }
-
-  /**
-   * Constructor AttList
-   *
-   *
-   * @param attrs List of attributes this will contain
-   * @param dh DOMHelper
-   */
-  public AttList(NamedNodeMap attrs, DOM2Helper dh)
-  {
-
-    m_attrs = attrs;
-    m_lastIndex = m_attrs.getLength() - 1;
-    m_dh = dh;
-  }
-
-  /**
-   * Get the number of attribute nodes in the list
-   *
-   *
-   * @return number of attribute nodes
-   */
-  public int getLength()
-  {
-    return m_attrs.getLength();
-  }
-
-  /**
-   * Look up an attribute's Namespace URI by index.
-   *
-   * @param index The attribute index (zero-based).
-   * @return The Namespace URI, or the empty string if none
-   *         is available, or null if the index is out of
-   *         range.
-   */
-  public String getURI(int index)
-  {
-    String ns = m_dh.getNamespaceOfNode(((Attr) m_attrs.item(index)));
-    if(null == ns)
-      ns = "";
-    return ns;
-  }
-
-  /**
-   * Look up an attribute's local name by index.
-   *
-   * @param index The attribute index (zero-based).
-   * @return The local name, or the empty string if Namespace
-   *         processing is not being performed, or null
-   *         if the index is out of range.
-   */
-  public String getLocalName(int index)
-  {
-    return m_dh.getLocalNameOfNode(((Attr) m_attrs.item(index)));
-  }
-
-  /**
-   * Look up an attribute's qualified name by index.
-   *
-   *
-   * @param i The attribute index (zero-based).
-   *
-   * @return The attribute's qualified name
-   */
-  public String getQName(int i)
-  {
-    return ((Attr) m_attrs.item(i)).getName();
-  }
-
-  /**
-   * Get the attribute's node type by index
-   *
-   *
-   * @param i The attribute index (zero-based)
-   *
-   * @return the attribute's node type
-   */
-  public String getType(int i)
-  {
-    return "CDATA";  // for the moment
-  }
-
-  /**
-   * Get the attribute's node value by index
-   *
-   *
-   * @param i The attribute index (zero-based)
-   *
-   * @return the attribute's node value
-   */
-  public String getValue(int i)
-  {
-    return ((Attr) m_attrs.item(i)).getValue();
-  }
-
-  /**
-   * Get the attribute's node type by name
-   *
-   *
-   * @param name Attribute name
-   *
-   * @return the attribute's node type
-   */
-  public String getType(String name)
-  {
-    return "CDATA";  // for the moment
-  }
-
-  /**
-   * Look up an attribute's type by Namespace name.
-   *
-   * @param uri The Namespace URI, or the empty String if the
-   *        name has no Namespace URI.
-   * @param localName The local name of the attribute.
-   * @return The attribute type as a string, or null if the
-   *         attribute is not in the list or if Namespace
-   *         processing is not being performed.
-   */
-  public String getType(String uri, String localName)
-  {
-    return "CDATA";  // for the moment
-  }
-
-  /**
-   * Look up an attribute's value by name.
-   *
-   *
-   * @param name The attribute node's name
-   *
-   * @return The attribute node's value
-   */
-  public String getValue(String name)
-  {
-    Attr attr = ((Attr) m_attrs.getNamedItem(name));
-    return (null != attr)
-          ? attr.getValue() : null;
-  }
-
-  /**
-   * Look up an attribute's value by Namespace name.
-   *
-   * @param uri The Namespace URI, or the empty String if the
-   *        name has no Namespace URI.
-   * @param localName The local name of the attribute.
-   * @return The attribute value as a string, or null if the
-   *         attribute is not in the list.
-   */
-  public String getValue(String uri, String localName)
-  {
-        Node a=m_attrs.getNamedItemNS(uri,localName);
-        return (a==null) ? null : a.getNodeValue();
-  }
-
-  /**
-   * Look up the index of an attribute by Namespace name.
-   *
-   * @param uri The Namespace URI, or the empty string if
-   *        the name has no Namespace URI.
-   * @param localPart The attribute's local name.
-   * @return The index of the attribute, or -1 if it does not
-   *         appear in the list.
-   */
-  public int getIndex(String uri, String localPart)
-  {
-    for(int i=m_attrs.getLength()-1;i>=0;--i)
-    {
-      Node a=m_attrs.item(i);
-      String u=a.getNamespaceURI();
-      if( (u==null ? uri==null : u.equals(uri))
-      &&
-      a.getLocalName().equals(localPart) )
-    return i;
-    }
-    return -1;
-  }
-
-  /**
-   * Look up the index of an attribute by raw XML 1.0 name.
-   *
-   * @param qName The qualified (prefixed) name.
-   * @return The index of the attribute, or -1 if it does not
-   *         appear in the list.
-   */
-  public int getIndex(String qName)
-  {
-    for(int i=m_attrs.getLength()-1;i>=0;--i)
-    {
-      Node a=m_attrs.item(i);
-      if(a.getNodeName().equals(qName) )
-    return i;
-    }
-    return -1;
-  }
-}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/utils/DOM2Helper.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.org.apache.xml.internal.serializer.utils;
-
-import java.io.IOException;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerException;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-import org.xml.sax.InputSource;
-
-/**
- * This class provides a DOM level 2 "helper", which provides services currently
- * not provided be the DOM standard.
- *
- * This class is a copy of the one in com.sun.org.apache.xml.internal.utils.
- * It exists to cut the serializers dependancy on that package.
- *
- * The differences from the original class are:
- * it doesn't extend DOMHelper, not depricated,
- * dropped method isNodeAfter(Node node1, Node node2)
- * dropped method parse(InputSource)
- * dropped method supportSAX()
- * dropped method setDocument(doc)
- * dropped method checkNode(Node)
- * dropped method getDocument()
- * dropped method getElementByID(String id, Document doc)
- * dropped method getParentOfNode(Node node)
- * dropped field Document m_doc;
- * made class non-public
- *
- * This class is not a public API, it is only public because it is
- * used in com.sun.org.apache.xml.internal.serializer.
- *
- * @xsl.usage internal
- */
-public final class DOM2Helper
-{
-
-  /**
-   * Construct an instance.
-   */
-  public DOM2Helper(){}
-
-  /**
-   * Returns the local name of the given node, as defined by the
-   * XML Namespaces specification. This is prepared to handle documents
-   * built using DOM Level 1 methods by falling back upon explicitly
-   * parsing the node name.
-   *
-   * @param n Node to be examined
-   *
-   * @return String containing the local name, or null if the node
-   * was not assigned a Namespace.
-   */
-  public String getLocalNameOfNode(Node n)
-  {
-
-    String name = n.getLocalName();
-
-    return (null == name) ? getLocalNameOfNodeFallback(n) : name;
-  }
-
-  /**
-   * Returns the local name of the given node. If the node's name begins
-   * with a namespace prefix, this is the part after the colon; otherwise
-   * it's the full node name.
-   *
-   * This method is copied from com.sun.org.apache.xml.internal.utils.DOMHelper
-   *
-   * @param n the node to be examined.
-   *
-   * @return String containing the Local Name
-   */
-  private String getLocalNameOfNodeFallback(Node n)
-  {
-
-    String qname = n.getNodeName();
-    int index = qname.indexOf(':');
-
-    return (index < 0) ? qname : qname.substring(index + 1);
-  }
-
-  /**
-   * Returns the Namespace Name (Namespace URI) for the given node.
-   * In a Level 2 DOM, you can ask the node itself. Note, however, that
-   * doing so conflicts with our decision in getLocalNameOfNode not
-   * to trust the that the DOM was indeed created using the Level 2
-   * methods. If Level 1 methods were used, these two functions will
-   * disagree with each other.
-   * <p>
-   * TODO: Reconcile with getLocalNameOfNode.
-   *
-   * @param n Node to be examined
-   *
-   * @return String containing the Namespace URI bound to this DOM node
-   * at the time the Node was created.
-   */
-  public String getNamespaceOfNode(Node n)
-  {
-    return n.getNamespaceURI();
-  }
-
-  /** Field m_useDOM2getNamespaceURI is a compile-time flag which
-   *  gates some of the parser options used to build a DOM -- but
-   * that code is commented out at this time and nobody else
-   * references it, so I've commented this out as well. */
-  //private boolean m_useDOM2getNamespaceURI = false;
-}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/AttList.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/AttList.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -40,26 +39,9 @@
   /** Index of last attribute node          */
   int m_lastIndex;
 
-  // ARGHH!!  JAXP Uses Xerces without setting the namespace processing to ON!
+  // JAXP Uses Xerces without setting the namespace processing to ON!
   // DOM2Helper m_dh = new DOM2Helper();
 
-  /** Local reference to DOMHelper          */
-  DOMHelper m_dh;
-
-//  /**
-//   * Constructor AttList
-//   *
-//   *
-//   * @param attrs List of attributes this will contain
-//   */
-//  public AttList(NamedNodeMap attrs)
-//  {
-//
-//    m_attrs = attrs;
-//    m_lastIndex = m_attrs.getLength() - 1;
-//    m_dh = new DOM2Helper();
-//  }
-
   /**
    * Constructor AttList
    *
@@ -67,12 +49,10 @@
    * @param attrs List of attributes this will contain
    * @param dh DOMHelper
    */
-  public AttList(NamedNodeMap attrs, DOMHelper dh)
+  public AttList(NamedNodeMap attrs)
   {
-
     m_attrs = attrs;
     m_lastIndex = m_attrs.getLength() - 1;
-    m_dh = dh;
   }
 
   /**
@@ -96,7 +76,7 @@
    */
   public String getURI(int index)
   {
-    String ns = m_dh.getNamespaceOfNode(((Attr) m_attrs.item(index)));
+    String ns = DOM2Helper.getNamespaceOfNode(((Attr) m_attrs.item(index)));
     if(null == ns)
       ns = "";
     return ns;
@@ -112,7 +92,7 @@
    */
   public String getLocalName(int index)
   {
-    return m_dh.getLocalNameOfNode(((Attr) m_attrs.item(index)));
+    return DOM2Helper.getLocalNameOfNode(((Attr) m_attrs.item(index)));
   }
 
   /**
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/DOM2Helper.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/DOM2Helper.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -18,298 +17,327 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package com.sun.org.apache.xml.internal.utils;
 
-import java.io.IOException;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerException;
-
+import com.sun.org.apache.xml.internal.dtm.ref.DTMNodeProxy;
 import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
-import org.xml.sax.InputSource;
 
 /**
- * @deprecated Since the introduction of the DTM, this class will be removed.
- * This class provides a DOM level 2 "helper", which provides services currently
- * not provided be the DOM standard.
+ * This class provides a DOM level 2 "helper", which provides several services.
+ *
+ * The original class extended DOMHelper that was deprecated and then removed.
  */
-public class DOM2Helper extends DOMHelper
-{
-
-  /**
-   * Construct an instance.
-   */
-  public DOM2Helper(){}
+public final class DOM2Helper {
 
-  /**
-   * Check node to see if it was created by a DOM implementation
-   * that this helper is intended to support. This is currently
-   * disabled, and assumes all nodes are acceptable rather than checking
-   * that they implement com.sun.org.apache.xerces.internal.dom.NodeImpl.
-   *
-   * @param node The node to be tested.
-   *
-   * @throws TransformerException if the node is not one which this
-   * DOM2Helper can support. If we return without throwing the exception,
-   * the node is compatable.
-   * @xsl.usage internal
-   */
-  public void checkNode(Node node) throws TransformerException
-  {
-
-    // if(!(node instanceof com.sun.org.apache.xerces.internal.dom.NodeImpl))
-    //  throw new TransformerException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_XERCES_CANNOT_HANDLE_NODES, new Object[]{((Object)node).getClass()})); //"DOM2Helper can not handle nodes of type"
-    //+((Object)node).getClass());
-  }
+    /**
+     * Construct an instance.
+     */
+    private DOM2Helper() {
+    }
 
-  /**
-   * Returns true if the DOM implementation handled by this helper
-   * supports the SAX ContentHandler interface.
-   *
-   * @return true (since Xerces does).
-   */
-  public boolean supportsSAX()
-  {
-    return true;
-  }
-
-  /** Field m_doc: Document Node for the document this helper is currently
-   * accessing or building
-   * @see #setDocument
-   * @see #getDocument
-   *  */
-  private Document m_doc;
+    /**
+     * Returns the local name of the given node, as defined by the XML
+     * Namespaces specification. This is prepared to handle documents built
+     * using DOM Level 1 methods by falling back upon explicitly parsing the
+     * node name.
+     *
+     * @param n Node to be examined
+     *
+     * @return String containing the local name, or null if the node was not
+     * assigned a Namespace.
+     */
+    public static String getLocalNameOfNode(Node n) {
 
-  /**
-   * Specify which document this helper is currently operating on.
-   *
-   * @param doc The DOM Document node for this document.
-   * @see #getDocument
-   */
-  public void setDocument(Document doc)
-  {
-    m_doc = doc;
-  }
+        String name = n.getLocalName();
 
-  /**
-   * Query which document this helper is currently operating on.
-   *
-   * @return The DOM Document node for this document.
-   * @see #setDocument
-   */
-  public Document getDocument()
-  {
-    return m_doc;
-  }
+        return (null == name) ? getLocalNameOfNodeFallback(n) : name;
+    }
 
-  /**
-   * Parse an XML document.
-   *
-   * <p>Right now the Xerces DOMParser class is used.  This needs
-   * fixing, either via jaxp, or via some other, standard method.</p>
-   *
-   * <p>The application can use this method to instruct the SAX parser
-   * to begin parsing an XML document from any valid input
-   * source (a character stream, a byte stream, or a URI).</p>
-   *
-   * <p>Applications may not invoke this method while a parse is in
-   * progress (they should create a new Parser instead for each
-   * additional XML document).  Once a parse is complete, an
-   * application may reuse the same Parser object, possibly with a
-   * different input source.</p>
-   *
-   * @param source The input source for the top-level of the
-   *        XML document.
-   *
-   * @throws TransformerException if any checked exception is thrown.
-   * @xsl.usage internal
-   */
-  public void parse(InputSource source) throws TransformerException
-  {
+    /**
+     * Returns the local name of the given node. If the node's name begins with
+     * a namespace prefix, this is the part after the colon; otherwise it's the
+     * full node name.
+     *
+     * This method is copied from
+     * com.sun.org.apache.xml.internal.utils.DOMHelper
+     *
+     * @param n the node to be examined.
+     *
+     * @return String containing the Local Name
+     */
+    private static String getLocalNameOfNodeFallback(Node n) {
 
-    try
-    {
-
-      // I guess I should use JAXP factory here... when it's legal.
-      // com.sun.org.apache.xerces.internal.parsers.DOMParser parser
-      //  = new com.sun.org.apache.xerces.internal.parsers.DOMParser();
-      DocumentBuilderFactory builderFactory =
-        DocumentBuilderFactory.newInstance();
-
-      builderFactory.setNamespaceAware(true);
-      builderFactory.setValidating(true);
+        String qname = n.getNodeName();
+        int index = qname.indexOf(':');
 
-      DocumentBuilder parser = builderFactory.newDocumentBuilder();
-
-      /*
-      // domParser.setFeature("http://apache.org/xml/features/dom/create-entity-ref-nodes", getShouldExpandEntityRefs()? false : true);
-      if(m_useDOM2getNamespaceURI)
-      {
-      parser.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", true);
-      parser.setFeature("http://xml.org/sax/features/namespaces", true);
-      }
-      else
-      {
-      parser.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", false);
-      }
-
-      parser.setFeature("http://apache.org/xml/features/allow-java-encodings", true);
-      */
+        return (index < 0) ? qname : qname.substring(index + 1);
+    }
 
-      parser.setErrorHandler(
-        new com.sun.org.apache.xml.internal.utils.DefaultErrorHandler());
-
-      // if(null != m_entityResolver)
-      // {
-      // System.out.println("Setting the entity resolver.");
-      //  parser.setEntityResolver(m_entityResolver);
-      // }
-      setDocument(parser.parse(source));
-    }
-    catch (org.xml.sax.SAXException se)
-    {
-      throw new TransformerException(se);
-    }
-    catch (ParserConfigurationException pce)
-    {
-      throw new TransformerException(pce);
-    }
-    catch (IOException ioe)
-    {
-      throw new TransformerException(ioe);
+    /**
+     * Returns the Namespace Name (Namespace URI) for the given node. In a Level
+     * 2 DOM, you can ask the node itself. Note, however, that doing so
+     * conflicts with our decision in getLocalNameOfNode not to trust the that
+     * the DOM was indeed created using the Level 2 methods. If Level 1 methods
+     * were used, these two functions will disagree with each other.
+     * <p>
+     * TODO: Reconcile with getLocalNameOfNode.
+     *
+     * @param n Node to be examined
+     *
+     * @return String containing the Namespace URI bound to this DOM node at the
+     * time the Node was created.
+     */
+    public static String getNamespaceOfNode(Node n) {
+        return n.getNamespaceURI();
     }
 
-    // setDocument(((com.sun.org.apache.xerces.internal.parsers.DOMParser)parser).getDocument());
-  }
+    /**
+     * Figure out whether node2 should be considered as being later in the
+     * document than node1, in Document Order as defined by the XPath model.
+     * This may not agree with the ordering defined by other XML applications.
+     * <p>
+     * There are some cases where ordering isn't defined, and neither are the
+     * results of this function -- though we'll generally return true.
+     *
+     * @param node1 DOM Node to perform position comparison on.
+     * @param node2 DOM Node to perform position comparison on .
+     *
+     * @return false if node2 comes before node1, otherwise return true. You can
+     * think of this as
+     * {@code (node1.documentOrderPosition &lt;= node2.documentOrderPosition)}.
+     */
+    public static boolean isNodeAfter(Node node1, Node node2) {
+        if (node1 == node2 || isNodeTheSame(node1, node2)) {
+            return true;
+        }
+
+        // Default return value, if there is no defined ordering
+        boolean isNodeAfter = true;
+
+        Node parent1 = getParentOfNode(node1);
+        Node parent2 = getParentOfNode(node2);
 
-  /**
-   * Given an XML ID, return the element. This requires assistance from the
-   * DOM and parser, and is meaningful only in the context of a DTD
-   * or schema which declares attributes as being of type ID. This
-   * information may or may not be available in all parsers, may or
-   * may not be available for specific documents, and may or may not
-   * be available when validation is not turned on.
-   *
-   * @param id The ID to search for, as a String.
-   * @param doc The document to search within, as a DOM Document node.
-   * @return DOM Element node with an attribute of type ID whose value
-   * uniquely matches the requested id string, or null if there isn't
-   * such an element or if the DOM can't answer the question for other
-   * reasons.
-   */
-  public Element getElementByID(String id, Document doc)
-  {
-    return doc.getElementById(id);
-  }
+        // Optimize for most common case
+        if (parent1 == parent2 || isNodeTheSame(parent1, parent2)) // then we know they are siblings
+        {
+            if (null != parent1) {
+                isNodeAfter = isNodeAfterSibling(parent1, node1, node2);
+            }
+        } else {
+            // General strategy: Figure out the lengths of the two
+            // ancestor chains, reconcile the lengths, and look for
+            // the lowest common ancestor. If that ancestor is one of
+            // the nodes being compared, it comes before the other.
+            // Otherwise perform a sibling compare.
+            //
+            // NOTE: If no common ancestor is found, ordering is undefined
+            // and we return the default value of isNodeAfter.
+            // Count parents in each ancestor chain
+            int nParents1 = 2, nParents2 = 2;  // include node & parent obtained above
+
+            while (parent1 != null) {
+                nParents1++;
+
+                parent1 = getParentOfNode(parent1);
+            }
+
+            while (parent2 != null) {
+                nParents2++;
 
-  /**
-   * Figure out whether node2 should be considered as being later
-   * in the document than node1, in Document Order as defined
-   * by the XPath model. This may not agree with the ordering defined
-   * by other XML applications.
-   * <p>
-   * There are some cases where ordering isn't defined, and neither are
-   * the results of this function -- though we'll generally return true.
-   * <p>
-   * TODO: Make sure this does the right thing with attribute nodes!!!
-   *
-   * @param node1 DOM Node to perform position comparison on.
-   * @param node2 DOM Node to perform position comparison on .
-   *
-   * @return false if node2 comes before node1, otherwise return true.
-   * You can think of this as
-   * <code>(node1.documentOrderPosition &lt;= node2.documentOrderPosition)</code>.
-   */
-  public static boolean isNodeAfter(Node node1, Node node2)
-  {
+                parent2 = getParentOfNode(parent2);
+            }
+
+            // Initially assume scan for common ancestor starts with
+            // the input nodes.
+            Node startNode1 = node1, startNode2 = node2;
+
+            // If one ancestor chain is longer, adjust its start point
+            // so we're comparing at the same depths
+            if (nParents1 < nParents2) {
+                // Adjust startNode2 to depth of startNode1
+                int adjust = nParents2 - nParents1;
+
+                for (int i = 0; i < adjust; i++) {
+                    startNode2 = getParentOfNode(startNode2);
+                }
+            } else if (nParents1 > nParents2) {
+                // adjust startNode1 to depth of startNode2
+                int adjust = nParents1 - nParents2;
+
+                for (int i = 0; i < adjust; i++) {
+                    startNode1 = getParentOfNode(startNode1);
+                }
+            }
+
+            Node prevChild1 = null, prevChild2 = null;  // so we can "back up"
 
-    // Assume first that the nodes are DTM nodes, since discovering node
-    // order is massivly faster for the DTM.
-    if(node1 instanceof DOMOrder && node2 instanceof DOMOrder)
-    {
-      int index1 = ((DOMOrder) node1).getUid();
-      int index2 = ((DOMOrder) node2).getUid();
+            // Loop up the ancestor chain looking for common parent
+            while (null != startNode1) {
+                if (startNode1 == startNode2 || isNodeTheSame(startNode1, startNode2)) // common parent?
+                {
+                    if (null == prevChild1) // first time in loop?
+                    {
+
+                        // Edge condition: one is the ancestor of the other.
+                        isNodeAfter = (nParents1 < nParents2) ? true : false;
 
-      return index1 <= index2;
-    }
-    else
-    {
+                        break;  // from while loop
+                    } else {
+                        // Compare ancestors below lowest-common as siblings
+                        isNodeAfter = isNodeAfterSibling(startNode1, prevChild1,
+                                prevChild2);
+
+                        break;  // from while loop
+                    }
+                }  // end if(startNode1 == startNode2)
 
-      // isNodeAfter will return true if node is after countedNode
-      // in document order. The base isNodeAfter is sloooow (relatively).
-      return DOMHelper.isNodeAfter(node1, node2);
-    }
-  }
+                // Move up one level and try again
+                prevChild1 = startNode1;
+                startNode1 = getParentOfNode(startNode1);
+                prevChild2 = startNode2;
+                startNode2 = getParentOfNode(startNode2);
+            }  // end while(parents exist to examine)
+        }  // end big else (not immediate siblings)
+
+        return isNodeAfter;
+    }  // end isNodeAfter(Node node1, Node node2)
 
-  /**
-   * Get the XPath-model parent of a node.  This version takes advantage
-   * of the DOM Level 2 Attr.ownerElement() method; the base version we
-   * would otherwise inherit is prepared to fall back on exhaustively
-   * walking the document to find an Attr's parent.
-   *
-   * @param node Node to be examined
-   *
-   * @return the DOM parent of the input node, if there is one, or the
-   * ownerElement if the input node is an Attr, or null if the node is
-   * a Document, a DocumentFragment, or an orphan.
-   */
-  public static Node getParentOfNode(Node node)
-  {
-          Node parent=node.getParentNode();
-          if(parent==null && (Node.ATTRIBUTE_NODE == node.getNodeType()) )
-           parent=((Attr) node).getOwnerElement();
-          return parent;
-  }
+    /**
+     * Use DTMNodeProxy to determine whether two nodes are the same.
+     *
+     * @param node1 The first DOM node to compare.
+     * @param node2 The second DOM node to compare.
+     * @return true if the two nodes are the same.
+     */
+    public static boolean isNodeTheSame(Node node1, Node node2) {
+        if (node1 instanceof DTMNodeProxy && node2 instanceof DTMNodeProxy) {
+            return ((DTMNodeProxy) node1).equals((DTMNodeProxy) node2);
+        } else {
+            return (node1 == node2);
+        }
+    }
+
+    /**
+     * Get the XPath-model parent of a node. This version takes advantage of the
+     * DOM Level 2 Attr.ownerElement() method; the base version we would
+     * otherwise inherit is prepared to fall back on exhaustively walking the
+     * document to find an Attr's parent.
+     *
+     * @param node Node to be examined
+     *
+     * @return the DOM parent of the input node, if there is one, or the
+     * ownerElement if the input node is an Attr, or null if the node is a
+     * Document, a DocumentFragment, or an orphan.
+     */
+    public static Node getParentOfNode(Node node) {
+        Node parent = node.getParentNode();
+        if (parent == null && (Node.ATTRIBUTE_NODE == node.getNodeType())) {
+            parent = ((Attr) node).getOwnerElement();
+        }
+        return parent;
+    }
+
+    /**
+     * Figure out if child2 is after child1 in document order.
+     * <p>
+     * Warning: Some aspects of "document order" are not well defined. For
+     * example, the order of attributes is considered meaningless in XML, and
+     * the order reported by our model will be consistent for a given invocation
+     * but may not match that of either the source file or the serialized
+     * output.
+     *
+     * @param parent Must be the parent of both child1 and child2.
+     * @param child1 Must be the child of parent and not equal to child2.
+     * @param child2 Must be the child of parent and not equal to child1.
+     * @return true if child 2 is after child1 in document order.
+     */
+    private static boolean isNodeAfterSibling(Node parent, Node child1,
+            Node child2) {
+
+        boolean isNodeAfterSibling = false;
+        short child1type = child1.getNodeType();
+        short child2type = child2.getNodeType();
+
+        if ((Node.ATTRIBUTE_NODE != child1type)
+                && (Node.ATTRIBUTE_NODE == child2type)) {
+
+            // always sort attributes before non-attributes.
+            isNodeAfterSibling = false;
+        } else if ((Node.ATTRIBUTE_NODE == child1type)
+                && (Node.ATTRIBUTE_NODE != child2type)) {
 
-  /**
-   * Returns the local name of the given node, as defined by the
-   * XML Namespaces specification. This is prepared to handle documents
-   * built using DOM Level 1 methods by falling back upon explicitly
-   * parsing the node name.
-   *
-   * @param n Node to be examined
-   *
-   * @return String containing the local name, or null if the node
-   * was not assigned a Namespace.
-   */
-  public String getLocalNameOfNode(Node n)
-  {
+            // always sort attributes before non-attributes.
+            isNodeAfterSibling = true;
+        } else if (Node.ATTRIBUTE_NODE == child1type) {
+            NamedNodeMap children = parent.getAttributes();
+            int nNodes = children.getLength();
+            boolean found1 = false, found2 = false;
+
+            // Count from the start until we find one or the other.
+            for (int i = 0; i < nNodes; i++) {
+                Node child = children.item(i);
 
-    String name = n.getLocalName();
+                if (child1 == child || isNodeTheSame(child1, child)) {
+                    if (found2) {
+                        isNodeAfterSibling = false;
+
+                        break;
+                    }
 
-    return (null == name) ? super.getLocalNameOfNode(n) : name;
-  }
+                    found1 = true;
+                } else if (child2 == child || isNodeTheSame(child2, child)) {
+                    if (found1) {
+                        isNodeAfterSibling = true;
+
+                        break;
+                    }
 
-  /**
-   * Returns the Namespace Name (Namespace URI) for the given node.
-   * In a Level 2 DOM, you can ask the node itself. Note, however, that
-   * doing so conflicts with our decision in getLocalNameOfNode not
-   * to trust the that the DOM was indeed created using the Level 2
-   * methods. If Level 1 methods were used, these two functions will
-   * disagree with each other.
-   * <p>
-   * TODO: Reconcile with getLocalNameOfNode.
-   *
-   * @param n Node to be examined
-   *
-   * @return String containing the Namespace URI bound to this DOM node
-   * at the time the Node was created.
-   */
-  public String getNamespaceOfNode(Node n)
-  {
-    return n.getNamespaceURI();
-  }
+                    found2 = true;
+                }
+            }
+        } else {
+            // TODO: Check performance of alternate solution:
+            // There are two choices here: Count from the start of
+            // the document until we find one or the other, or count
+            // from one until we find or fail to find the other.
+            // Either can wind up scanning all the siblings in the worst
+            // case, which on a wide document can be a lot of work but
+            // is more typically is a short list.
+            // Scanning from the start involves two tests per iteration,
+            // but it isn't clear that scanning from the middle doesn't
+            // yield more iterations on average.
+            // We should run some testcases.
+            Node child = parent.getFirstChild();
+            boolean found1 = false, found2 = false;
+
+            while (null != child) {
 
-  /** Field m_useDOM2getNamespaceURI is a compile-time flag which
-   *  gates some of the parser options used to build a DOM -- but
-   * that code is commented out at this time and nobody else
-   * references it, so I've commented this out as well. */
-  //private boolean m_useDOM2getNamespaceURI = false;
+                // Node child = children.item(i);
+                if (child1 == child || isNodeTheSame(child1, child)) {
+                    if (found2) {
+                        isNodeAfterSibling = false;
+
+                        break;
+                    }
+
+                    found1 = true;
+                } else if (child2 == child || isNodeTheSame(child2, child)) {
+                    if (found1) {
+                        isNodeAfterSibling = true;
+
+                        break;
+                    }
+
+                    found2 = true;
+                }
+
+                child = child.getNextSibling();
+            }
+        }
+
+        return isNodeAfterSibling;
+    }  // end isNodeAfterSibling(Node parent, Node child1, Node child2)
 }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/DOMHelper.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1330 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- */
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: DOMHelper.java,v 1.2.4.1 2005/09/15 08:15:40 suresh_emailid Exp $
- */
-package com.sun.org.apache.xml.internal.utils;
-
-import com.sun.org.apache.xml.internal.dtm.ref.DTMNodeProxy;
-import com.sun.org.apache.xml.internal.res.XMLErrorResources;
-import com.sun.org.apache.xml.internal.res.XMLMessages;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Vector;
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import org.w3c.dom.Attr;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.Element;
-import org.w3c.dom.Entity;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-
-/**
- * @deprecated Since the introduction of the DTM, this class will be removed.
- * This class provides a front-end to DOM implementations, providing
- * a number of utility functions that either aren't yet standardized
- * by the DOM spec or that are defined in optional DOM modules and
- * hence may not be present in all DOMs.
- */
-public class DOMHelper
-{
-
-  /**
-   * DOM Level 1 did not have a standard mechanism for creating a new
-   * Document object. This function provides a DOM-implementation-independent
-   * abstraction for that for that concept. It's typically used when
-   * outputting a new DOM as the result of an operation.
-   * <p>
-   * TODO: This isn't directly compatable with DOM Level 2.
-   * The Level 2 createDocument call also creates the root
-   * element, and thus requires that you know what that element will be
-   * before creating the Document. We should think about whether we want
-   * to change this code, and the callers, so we can use the DOM's own
-   * method. (It's also possible that DOM Level 3 may relax this
-   * sequence, but you may give up some intelligence in the DOM by
-   * doing so; the intent was that knowing the document type and root
-   * element might let the DOM automatically switch to a specialized
-   * subclass for particular kinds of documents.)
-   *
-   * @param isSecureProcessing state of the secure processing feature.
-   * @return The newly created DOM Document object, with no children, or
-   * null if we can't find a DOM implementation that permits creating
-   * new empty Documents.
-   */
-  public static Document createDocument(boolean isSecureProcessing)
-  {
-
-    try
-    {
-
-      // Use an implementation of the JAVA API for XML Parsing 1.0 to
-      // create a DOM Document node to contain the result.
-      DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
-
-      dfactory.setNamespaceAware(true);
-      dfactory.setValidating(true);
-
-      if (isSecureProcessing)
-      {
-        try
-        {
-          dfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
-        }
-        catch (ParserConfigurationException pce) {}
-      }
-
-      DocumentBuilder docBuilder = dfactory.newDocumentBuilder();
-      Document outNode = docBuilder.newDocument();
-
-      return outNode;
-    }
-    catch (ParserConfigurationException pce)
-    {
-      throw new RuntimeException(
-        XMLMessages.createXMLMessage(
-          XMLErrorResources.ER_CREATEDOCUMENT_NOT_SUPPORTED, null));  //"createDocument() not supported in XPathContext!");
-
-      // return null;
-    }
-  }
-
-  /**
-   * DOM Level 1 did not have a standard mechanism for creating a new
-   * Document object. This function provides a DOM-implementation-independent
-   * abstraction for that for that concept. It's typically used when
-   * outputting a new DOM as the result of an operation.
-   *
-   * @return The newly created DOM Document object, with no children, or
-   * null if we can't find a DOM implementation that permits creating
-   * new empty Documents.
-   */
-  public static Document createDocument()
-  {
-    return createDocument(false);
-  }
-
-  /**
-   * Tells, through the combination of the default-space attribute
-   * on xsl:stylesheet, xsl:strip-space, xsl:preserve-space, and the
-   * xml:space attribute, whether or not extra whitespace should be stripped
-   * from the node.  Literal elements from template elements should
-   * <em>not</em> be tested with this function.
-   * @param textNode A text node from the source tree.
-   * @return true if the text node should be stripped of extra whitespace.
-   *
-   * @throws javax.xml.transform.TransformerException
-   * @xsl.usage advanced
-   */
-  public boolean shouldStripSourceNode(Node textNode)
-          throws javax.xml.transform.TransformerException
-  {
-
-    // return (null == m_envSupport) ? false : m_envSupport.shouldStripSourceNode(textNode);
-    return false;
-  }
-
-  /**
-   * Supports the XPath function GenerateID by returning a unique
-   * identifier string for any given DOM Node.
-   * <p>
-   * Warning: The base implementation uses the Node object's hashCode(),
-   * which is NOT guaranteed to be unique. If that method hasn't been
-   * overridden in this DOM ipmlementation, most Java implementions will
-   * derive it from the object's address and should be OK... but if
-   * your DOM uses a different definition of hashCode (eg hashing the
-   * contents of the subtree), or if your DOM may have multiple objects
-   * that represent a single Node in the data structure (eg via proxying),
-   * you may need to find another way to assign a unique identifier.
-   * <p>
-   * Also, be aware that if nodes are destroyed and recreated, there is
-   * an open issue regarding whether an ID may be reused. Currently
-   * we're assuming that the input document is stable for the duration
-   * of the XPath/XSLT operation, so this shouldn't arise in this context.
-   * <p>
-   * (DOM Level 3 is investigating providing a unique node "key", but
-   * that won't help Level 1 and Level 2 implementations.)
-   *
-   * @param node whose identifier you want to obtain
-   *
-   * @return a string which should be different for every Node object.
-   */
-  public String getUniqueID(Node node)
-  {
-    return "N" + Integer.toHexString(node.hashCode()).toUpperCase();
-  }
-
-  /**
-   * Figure out whether node2 should be considered as being later
-   * in the document than node1, in Document Order as defined
-   * by the XPath model. This may not agree with the ordering defined
-   * by other XML applications.
-   * <p>
-   * There are some cases where ordering isn't defined, and neither are
-   * the results of this function -- though we'll generally return true.
-   *
-   * TODO: Make sure this does the right thing with attribute nodes!!!
-   *
-   * @param node1 DOM Node to perform position comparison on.
-   * @param node2 DOM Node to perform position comparison on .
-   *
-   * @return false if node2 comes before node1, otherwise return true.
-   * You can think of this as
-   * <code>(node1.documentOrderPosition &lt;= node2.documentOrderPosition)</code>.
-   */
-  public static boolean isNodeAfter(Node node1, Node node2)
-  {
-    if (node1 == node2 || isNodeTheSame(node1, node2))
-      return true;
-
-        // Default return value, if there is no defined ordering
-    boolean isNodeAfter = true;
-
-    Node parent1 = getParentOfNode(node1);
-    Node parent2 = getParentOfNode(node2);
-
-    // Optimize for most common case
-    if (parent1 == parent2 || isNodeTheSame(parent1, parent2))  // then we know they are siblings
-    {
-      if (null != parent1)
-        isNodeAfter = isNodeAfterSibling(parent1, node1, node2);
-      else
-      {
-                  // If both parents are null, ordering is not defined.
-                  // We're returning a value in lieu of throwing an exception.
-                  // Not a case we expect to arise in XPath, but beware if you
-                  // try to reuse this method.
-
-                  // We can just fall through in this case, which allows us
-                  // to hit the debugging code at the end of the function.
-          //return isNodeAfter;
-      }
-    }
-    else
-    {
-
-      // General strategy: Figure out the lengths of the two
-      // ancestor chains, reconcile the lengths, and look for
-          // the lowest common ancestor. If that ancestor is one of
-          // the nodes being compared, it comes before the other.
-      // Otherwise perform a sibling compare.
-                //
-                // NOTE: If no common ancestor is found, ordering is undefined
-                // and we return the default value of isNodeAfter.
-
-      // Count parents in each ancestor chain
-      int nParents1 = 2, nParents2 = 2;  // include node & parent obtained above
-
-      while (parent1 != null)
-      {
-        nParents1++;
-
-        parent1 = getParentOfNode(parent1);
-      }
-
-      while (parent2 != null)
-      {
-        nParents2++;
-
-        parent2 = getParentOfNode(parent2);
-      }
-
-          // Initially assume scan for common ancestor starts with
-          // the input nodes.
-      Node startNode1 = node1, startNode2 = node2;
-
-      // If one ancestor chain is longer, adjust its start point
-          // so we're comparing at the same depths
-      if (nParents1 < nParents2)
-      {
-        // Adjust startNode2 to depth of startNode1
-        int adjust = nParents2 - nParents1;
-
-        for (int i = 0; i < adjust; i++)
-        {
-          startNode2 = getParentOfNode(startNode2);
-        }
-      }
-      else if (nParents1 > nParents2)
-      {
-        // adjust startNode1 to depth of startNode2
-        int adjust = nParents1 - nParents2;
-
-        for (int i = 0; i < adjust; i++)
-        {
-          startNode1 = getParentOfNode(startNode1);
-        }
-      }
-
-      Node prevChild1 = null, prevChild2 = null;  // so we can "back up"
-
-      // Loop up the ancestor chain looking for common parent
-      while (null != startNode1)
-      {
-        if (startNode1 == startNode2 || isNodeTheSame(startNode1, startNode2))  // common parent?
-        {
-          if (null == prevChild1)  // first time in loop?
-          {
-
-            // Edge condition: one is the ancestor of the other.
-            isNodeAfter = (nParents1 < nParents2) ? true : false;
-
-            break;  // from while loop
-          }
-          else
-          {
-                        // Compare ancestors below lowest-common as siblings
-            isNodeAfter = isNodeAfterSibling(startNode1, prevChild1,
-                                             prevChild2);
-
-            break;  // from while loop
-          }
-        }  // end if(startNode1 == startNode2)
-
-                // Move up one level and try again
-        prevChild1 = startNode1;
-        startNode1 = getParentOfNode(startNode1);
-        prevChild2 = startNode2;
-        startNode2 = getParentOfNode(startNode2);
-      }  // end while(parents exist to examine)
-    }  // end big else (not immediate siblings)
-
-        // WARNING: The following diagnostic won't report the early
-        // "same node" case. Fix if/when needed.
-
-    /* -- please do not remove... very useful for diagnostics --
-    System.out.println("node1 = "+node1.getNodeName()+"("+node1.getNodeType()+")"+
-    ", node2 = "+node2.getNodeName()
-    +"("+node2.getNodeType()+")"+
-    ", isNodeAfter = "+isNodeAfter); */
-    return isNodeAfter;
-  }  // end isNodeAfter(Node node1, Node node2)
-
-  /**
-   * Use DTMNodeProxy to determine whether two nodes are the same.
-   *
-   * @param node1 The first DOM node to compare.
-   * @param node2 The second DOM node to compare.
-   * @return true if the two nodes are the same.
-   */
-  public static boolean isNodeTheSame(Node node1, Node node2)
-  {
-    if (node1 instanceof DTMNodeProxy && node2 instanceof DTMNodeProxy)
-      return ((DTMNodeProxy)node1).equals((DTMNodeProxy)node2);
-    else
-      return (node1 == node2);
-  }
-
-  /**
-   * Figure out if child2 is after child1 in document order.
-   * <p>
-   * Warning: Some aspects of "document order" are not well defined.
-   * For example, the order of attributes is considered
-   * meaningless in XML, and the order reported by our model will
-   * be consistant for a given invocation but may not
-   * match that of either the source file or the serialized output.
-   *
-   * @param parent Must be the parent of both child1 and child2.
-   * @param child1 Must be the child of parent and not equal to child2.
-   * @param child2 Must be the child of parent and not equal to child1.
-   * @return true if child 2 is after child1 in document order.
-   */
-  private static boolean isNodeAfterSibling(Node parent, Node child1,
-                                            Node child2)
-  {
-
-    boolean isNodeAfterSibling = false;
-    short child1type = child1.getNodeType();
-    short child2type = child2.getNodeType();
-
-    if ((Node.ATTRIBUTE_NODE != child1type)
-            && (Node.ATTRIBUTE_NODE == child2type))
-    {
-
-      // always sort attributes before non-attributes.
-      isNodeAfterSibling = false;
-    }
-    else if ((Node.ATTRIBUTE_NODE == child1type)
-             && (Node.ATTRIBUTE_NODE != child2type))
-    {
-
-      // always sort attributes before non-attributes.
-      isNodeAfterSibling = true;
-    }
-    else if (Node.ATTRIBUTE_NODE == child1type)
-    {
-      NamedNodeMap children = parent.getAttributes();
-      int nNodes = children.getLength();
-      boolean found1 = false, found2 = false;
-
-          // Count from the start until we find one or the other.
-      for (int i = 0; i < nNodes; i++)
-      {
-        Node child = children.item(i);
-
-        if (child1 == child || isNodeTheSame(child1, child))
-        {
-          if (found2)
-          {
-            isNodeAfterSibling = false;
-
-            break;
-          }
-
-          found1 = true;
-        }
-        else if (child2 == child || isNodeTheSame(child2, child))
-        {
-          if (found1)
-          {
-            isNodeAfterSibling = true;
-
-            break;
-          }
-
-          found2 = true;
-        }
-      }
-    }
-    else
-    {
-                // TODO: Check performance of alternate solution:
-                // There are two choices here: Count from the start of
-                // the document until we find one or the other, or count
-                // from one until we find or fail to find the other.
-                // Either can wind up scanning all the siblings in the worst
-                // case, which on a wide document can be a lot of work but
-                // is more typically is a short list.
-                // Scanning from the start involves two tests per iteration,
-                // but it isn't clear that scanning from the middle doesn't
-                // yield more iterations on average.
-                // We should run some testcases.
-      Node child = parent.getFirstChild();
-      boolean found1 = false, found2 = false;
-
-      while (null != child)
-      {
-
-        // Node child = children.item(i);
-        if (child1 == child || isNodeTheSame(child1, child))
-        {
-          if (found2)
-          {
-            isNodeAfterSibling = false;
-
-            break;
-          }
-
-          found1 = true;
-        }
-        else if (child2 == child || isNodeTheSame(child2, child))
-        {
-          if (found1)
-          {
-            isNodeAfterSibling = true;
-
-            break;
-          }
-
-          found2 = true;
-        }
-
-        child = child.getNextSibling();
-      }
-    }
-
-    return isNodeAfterSibling;
-  }  // end isNodeAfterSibling(Node parent, Node child1, Node child2)
-
-  //==========================================================
-  // SECTION: Namespace resolution
-  //==========================================================
-
-  /**
-   * Get the depth level of this node in the tree (equals 1 for
-   * a parentless node).
-   *
-   * @param n Node to be examined.
-   * @return the number of ancestors, plus one
-   * @xsl.usage internal
-   */
-  public short getLevel(Node n)
-  {
-
-    short level = 1;
-
-    while (null != (n = getParentOfNode(n)))
-    {
-      level++;
-    }
-
-    return level;
-  }
-
-  /**
-   * Given an XML Namespace prefix and a context in which the prefix
-   * is to be evaluated, return the Namespace Name this prefix was
-   * bound to. Note that DOM Level 3 is expected to provide a version of
-   * this which deals with the DOM's "early binding" behavior.
-   *
-   * Default handling:
-   *
-   * @param prefix String containing namespace prefix to be resolved,
-   * without the ':' which separates it from the localname when used
-   * in a Node Name. The empty sting signifies the default namespace
-   * at this point in the document.
-   * @param namespaceContext Element which provides context for resolution.
-   * (We could extend this to work for other nodes by first seeking their
-   * nearest Element ancestor.)
-   *
-   * @return a String containing the Namespace URI which this prefix
-   * represents in the specified context.
-   */
-  public String getNamespaceForPrefix(String prefix, Element namespaceContext)
-  {
-
-    int type;
-    Node parent = namespaceContext;
-    String namespace = null;
-
-    if (prefix.equals("xml"))
-    {
-      namespace = QName.S_XMLNAMESPACEURI; // Hardcoded, per Namespace spec
-    }
-        else if(prefix.equals("xmlns"))
-    {
-          // Hardcoded in the DOM spec, expected to be adopted by
-          // Namespace spec. NOTE: Namespace declarations _must_ use
-          // the xmlns: prefix; other prefixes declared as belonging
-          // to this namespace will not be recognized and should
-          // probably be rejected by parsers as erroneous declarations.
-      namespace = "http://www.w3.org/2000/xmlns/";
-    }
-    else
-    {
-          // Attribute name for this prefix's declaration
-          String declname=(prefix=="")
-                        ? "xmlns"
-                        : "xmlns:"+prefix;
-
-          // Scan until we run out of Elements or have resolved the namespace
-      while ((null != parent) && (null == namespace)
-             && (((type = parent.getNodeType()) == Node.ELEMENT_NODE)
-                 || (type == Node.ENTITY_REFERENCE_NODE)))
-      {
-        if (type == Node.ELEMENT_NODE)
-        {
-
-                        // Look for the appropriate Namespace Declaration attribute,
-                        // either "xmlns:prefix" or (if prefix is "") "xmlns".
-                        // TODO: This does not handle "implicit declarations"
-                        // which may be created when the DOM is edited. DOM Level
-                        // 3 will define how those should be interpreted. But
-                        // this issue won't arise in freshly-parsed DOMs.
-
-                // NOTE: declname is set earlier, outside the loop.
-                        Attr attr=((Element)parent).getAttributeNode(declname);
-                        if(attr!=null)
-                        {
-                namespace = attr.getNodeValue();
-                break;
-                        }
-                }
-
-        parent = getParentOfNode(parent);
-      }
-    }
-
-    return namespace;
-  }
-
-  /**
-   * An experiment for the moment.
-   */
-  Map<Node, NSInfo> m_NSInfos = new HashMap<>();
-
-  /** Object to put into the m_NSInfos table that tells that a node has not been
-   *  processed, but has xmlns namespace decls.  */
-  protected static final NSInfo m_NSInfoUnProcWithXMLNS = new NSInfo(false,
-                                                            true);
-
-  /** Object to put into the m_NSInfos table that tells that a node has not been
-   *  processed, but has no xmlns namespace decls.  */
-  protected static final NSInfo m_NSInfoUnProcWithoutXMLNS = new NSInfo(false,
-                                                               false);
-
-  /** Object to put into the m_NSInfos table that tells that a node has not been
-   *  processed, and has no xmlns namespace decls, and has no ancestor decls.  */
-  protected static final NSInfo m_NSInfoUnProcNoAncestorXMLNS =
-    new NSInfo(false, false, NSInfo.ANCESTORNOXMLNS);
-
-  /** Object to put into the m_NSInfos table that tells that a node has been
-   *  processed, and has xmlns namespace decls.  */
-  protected static final NSInfo m_NSInfoNullWithXMLNS = new NSInfo(true,
-                                                          true);
-
-  /** Object to put into the m_NSInfos table that tells that a node has been
-   *  processed, and has no xmlns namespace decls.  */
-  protected static final NSInfo m_NSInfoNullWithoutXMLNS = new NSInfo(true,
-                                                             false);
-
-  /** Object to put into the m_NSInfos table that tells that a node has been
-   *  processed, and has no xmlns namespace decls. and has no ancestor decls.  */
-  protected static final NSInfo m_NSInfoNullNoAncestorXMLNS =
-    new NSInfo(true, false, NSInfo.ANCESTORNOXMLNS);
-
-  /** Vector of node (odd indexes) and NSInfos (even indexes) that tell if
-   *  the given node is a candidate for ancestor namespace processing.  */
-  protected Vector m_candidateNoAncestorXMLNS = new Vector();
-
-  /**
-   * Returns the namespace of the given node. Differs from simply getting
-   * the node's prefix and using getNamespaceForPrefix in that it attempts
-   * to cache some of the data in NSINFO objects, to avoid repeated lookup.
-   * TODO: Should we consider moving that logic into getNamespaceForPrefix?
-   *
-   * @param n Node to be examined.
-   *
-   * @return String containing the Namespace Name (uri) for this node.
-   * Note that this is undefined for any nodes other than Elements and
-   * Attributes.
-   */
-  public String getNamespaceOfNode(Node n)
-  {
-
-    String namespaceOfPrefix;
-    boolean hasProcessedNS;
-    NSInfo nsInfo;
-    short ntype = n.getNodeType();
-
-    if (Node.ATTRIBUTE_NODE != ntype)
-    {
-      nsInfo = m_NSInfos.get(n);
-      hasProcessedNS = (nsInfo == null) ? false : nsInfo.m_hasProcessedNS;
-    }
-    else
-    {
-      hasProcessedNS = false;
-      nsInfo = null;
-    }
-
-    if (hasProcessedNS)
-    {
-      namespaceOfPrefix = nsInfo.m_namespace;
-    }
-    else
-    {
-      namespaceOfPrefix = null;
-
-      String nodeName = n.getNodeName();
-      int indexOfNSSep = nodeName.indexOf(':');
-      String prefix;
-
-      if (Node.ATTRIBUTE_NODE == ntype)
-      {
-        if (indexOfNSSep > 0)
-        {
-          prefix = nodeName.substring(0, indexOfNSSep);
-        }
-        else
-        {
-
-          // Attributes don't use the default namespace, so if
-          // there isn't a prefix, we're done.
-          return namespaceOfPrefix;
-        }
-      }
-      else
-      {
-        prefix = (indexOfNSSep >= 0)
-                 ? nodeName.substring(0, indexOfNSSep) : "";
-      }
-
-      boolean ancestorsHaveXMLNS = false;
-      boolean nHasXMLNS = false;
-
-      if (prefix.equals("xml"))
-      {
-        namespaceOfPrefix = QName.S_XMLNAMESPACEURI;
-      }
-      else
-      {
-        int parentType;
-        Node parent = n;
-
-        while ((null != parent) && (null == namespaceOfPrefix))
-        {
-          if ((null != nsInfo)
-                  && (nsInfo.m_ancestorHasXMLNSAttrs
-                      == NSInfo.ANCESTORNOXMLNS))
-          {
-            break;
-          }
-
-          parentType = parent.getNodeType();
-
-          if ((null == nsInfo) || nsInfo.m_hasXMLNSAttrs)
-          {
-            boolean elementHasXMLNS = false;
-
-            if (parentType == Node.ELEMENT_NODE)
-            {
-              NamedNodeMap nnm = parent.getAttributes();
-
-              for (int i = 0; i < nnm.getLength(); i++)
-              {
-                Node attr = nnm.item(i);
-                String aname = attr.getNodeName();
-
-                if (aname.charAt(0) == 'x')
-                {
-                  boolean isPrefix = aname.startsWith("xmlns:");
-
-                  if (aname.equals("xmlns") || isPrefix)
-                  {
-                    if (n == parent)
-                      nHasXMLNS = true;
-
-                    elementHasXMLNS = true;
-                    ancestorsHaveXMLNS = true;
-
-                    String p = isPrefix ? aname.substring(6) : "";
-
-                    if (p.equals(prefix))
-                    {
-                      namespaceOfPrefix = attr.getNodeValue();
-
-                      break;
-                    }
-                  }
-                }
-              }
-            }
-
-            if ((Node.ATTRIBUTE_NODE != parentType) && (null == nsInfo)
-                    && (n != parent))
-            {
-              nsInfo = elementHasXMLNS
-                       ? m_NSInfoUnProcWithXMLNS : m_NSInfoUnProcWithoutXMLNS;
-
-              m_NSInfos.put(parent, nsInfo);
-            }
-          }
-
-          if (Node.ATTRIBUTE_NODE == parentType)
-          {
-            parent = getParentOfNode(parent);
-          }
-          else
-          {
-            m_candidateNoAncestorXMLNS.addElement(parent);
-            m_candidateNoAncestorXMLNS.addElement(nsInfo);
-
-            parent = parent.getParentNode();
-          }
-
-          if (null != parent)
-          {
-            nsInfo = m_NSInfos.get(parent);
-          }
-        }
-
-        int nCandidates = m_candidateNoAncestorXMLNS.size();
-
-        if (nCandidates > 0)
-        {
-          if ((false == ancestorsHaveXMLNS) && (null == parent))
-          {
-            for (int i = 0; i < nCandidates; i += 2)
-            {
-              Object candidateInfo = m_candidateNoAncestorXMLNS.elementAt(i
-                                       + 1);
-
-              if (candidateInfo == m_NSInfoUnProcWithoutXMLNS)
-              {
-                m_NSInfos.put((Node)m_candidateNoAncestorXMLNS.elementAt(i),
-                              m_NSInfoUnProcNoAncestorXMLNS);
-              }
-              else if (candidateInfo == m_NSInfoNullWithoutXMLNS)
-              {
-                m_NSInfos.put((Node)m_candidateNoAncestorXMLNS.elementAt(i),
-                              m_NSInfoNullNoAncestorXMLNS);
-              }
-            }
-          }
-
-          m_candidateNoAncestorXMLNS.removeAllElements();
-        }
-      }
-
-      if (Node.ATTRIBUTE_NODE != ntype)
-      {
-        if (null == namespaceOfPrefix)
-        {
-          if (ancestorsHaveXMLNS)
-          {
-            if (nHasXMLNS)
-              m_NSInfos.put(n, m_NSInfoNullWithXMLNS);
-            else
-              m_NSInfos.put(n, m_NSInfoNullWithoutXMLNS);
-          }
-          else
-          {
-            m_NSInfos.put(n, m_NSInfoNullNoAncestorXMLNS);
-          }
-        }
-        else
-        {
-          m_NSInfos.put(n, new NSInfo(namespaceOfPrefix, nHasXMLNS));
-        }
-      }
-    }
-
-    return namespaceOfPrefix;
-  }
-
-  /**
-   * Returns the local name of the given node. If the node's name begins
-   * with a namespace prefix, this is the part after the colon; otherwise
-   * it's the full node name.
-   *
-   * @param n the node to be examined.
-   *
-   * @return String containing the Local Name
-   */
-  public String getLocalNameOfNode(Node n)
-  {
-
-    String qname = n.getNodeName();
-    int index = qname.indexOf(':');
-
-    return (index < 0) ? qname : qname.substring(index + 1);
-  }
-
-  /**
-   * Returns the element name with the namespace prefix (if any) replaced
-   * by the Namespace URI it was bound to. This is not a standard
-   * representation of a node name, but it allows convenient
-   * single-string comparison of the "universal" names of two nodes.
-   *
-   * @param elem Element to be examined.
-   *
-   * @return String in the form "namespaceURI:localname" if the node
-   * belongs to a namespace, or simply "localname" if it doesn't.
-   * @see #getExpandedAttributeName
-   */
-  public String getExpandedElementName(Element elem)
-  {
-
-    String namespace = getNamespaceOfNode(elem);
-
-    return (null != namespace)
-           ? namespace + ":" + getLocalNameOfNode(elem)
-           : getLocalNameOfNode(elem);
-  }
-
-  /**
-   * Returns the attribute name with the namespace prefix (if any) replaced
-   * by the Namespace URI it was bound to. This is not a standard
-   * representation of a node name, but it allows convenient
-   * single-string comparison of the "universal" names of two nodes.
-   *
-   * @param attr Attr to be examined
-   *
-   * @return String in the form "namespaceURI:localname" if the node
-   * belongs to a namespace, or simply "localname" if it doesn't.
-   * @see #getExpandedElementName
-   */
-  public String getExpandedAttributeName(Attr attr)
-  {
-
-    String namespace = getNamespaceOfNode(attr);
-
-    return (null != namespace)
-           ? namespace + ":" + getLocalNameOfNode(attr)
-           : getLocalNameOfNode(attr);
-  }
-
-  //==========================================================
-  // SECTION: DOM Helper Functions
-  //==========================================================
-
-  /**
-   * Tell if the node is ignorable whitespace. Note that this can
-   * be determined only in the context of a DTD or other Schema,
-   * and that DOM Level 2 has nostandardized DOM API which can
-   * return that information.
-   * @deprecated
-   *
-   * @param node Node to be examined
-   *
-   * @return CURRENTLY HARDCODED TO FALSE, but should return true if
-   * and only if the node is of type Text, contains only whitespace,
-   * and does not appear as part of the #PCDATA content of an element.
-   * (Note that determining this last may require allowing for
-   * Entity References.)
-   */
-  public boolean isIgnorableWhitespace(Text node)
-  {
-
-    boolean isIgnorable = false;  // return value
-
-    // TODO: I can probably do something to figure out if this
-    // space is ignorable from just the information in
-    // the DOM tree.
-        // -- You need to be able to distinguish whitespace
-        // that is #PCDATA from whitespace that isn't.  That requires
-        // DTD support, which won't be standardized until DOM Level 3.
-    return isIgnorable;
-  }
-
-  /**
-   * Get the first unparented node in the ancestor chain.
-   * @deprecated
-   *
-   * @param node Starting node, to specify which chain to chase
-   *
-   * @return the topmost ancestor.
-   */
-  public Node getRoot(Node node)
-  {
-
-    Node root = null;
-
-    while (node != null)
-    {
-      root = node;
-      node = getParentOfNode(node);
-    }
-
-    return root;
-  }
-
-  /**
-   * Get the root node of the document tree, regardless of
-   * whether or not the node passed in is a document node.
-   * <p>
-   * TODO: This doesn't handle DocumentFragments or "orphaned" subtrees
-   * -- it's currently returning ownerDocument even when the tree is
-   * not actually part of the main Document tree. We should either
-   * rewrite the description to say that it finds the Document node,
-   * or change the code to walk up the ancestor chain.
-
-   *
-   * @param n Node to be examined
-   *
-   * @return the Document node. Note that this is not the correct answer
-   * if n was (or was a child of) a DocumentFragment or an orphaned node,
-   * as can arise if the DOM has been edited rather than being generated
-   * by a parser.
-   */
-  public Node getRootNode(Node n)
-  {
-    int nt = n.getNodeType();
-    return ( (Node.DOCUMENT_NODE == nt) || (Node.DOCUMENT_FRAGMENT_NODE == nt) )
-           ? n : n.getOwnerDocument();
-  }
-
-  /**
-   * Test whether the given node is a namespace decl node. In DOM Level 2
-   * this can be done in a namespace-aware manner, but in Level 1 DOMs
-   * it has to be done by testing the node name.
-   *
-   * @param n Node to be examined.
-   *
-   * @return boolean -- true iff the node is an Attr whose name is
-   * "xmlns" or has the "xmlns:" prefix.
-   */
-  public boolean isNamespaceNode(Node n)
-  {
-
-    if (Node.ATTRIBUTE_NODE == n.getNodeType())
-    {
-      String attrName = n.getNodeName();
-
-      return (attrName.startsWith("xmlns:") || attrName.equals("xmlns"));
-    }
-
-    return false;
-  }
-
-  /**
-   * Obtain the XPath-model parent of a DOM node -- ownerElement for Attrs,
-   * parent for other nodes.
-   * <p>
-   * Background: The DOM believes that you must be your Parent's
-   * Child, and thus Attrs don't have parents. XPath said that Attrs
-   * do have their owning Element as their parent. This function
-   * bridges the difference, either by using the DOM Level 2 ownerElement
-   * function or by using a "silly and expensive function" in Level 1
-   * DOMs.
-   * <p>
-   * (There's some discussion of future DOMs generalizing ownerElement
-   * into ownerNode and making it work on all types of nodes. This
-   * still wouldn't help the users of Level 1 or Level 2 DOMs)
-   * <p>
-   *
-   * @param node Node whose XPath parent we want to obtain
-   *
-   * @return the parent of the node, or the ownerElement if it's an
-   * Attr node, or null if the node is an orphan.
-   *
-   * @throws RuntimeException if the Document has no root element.
-   * This can't arise if the Document was created
-   * via the DOM Level 2 factory methods, but is possible if other
-   * mechanisms were used to obtain it
-   */
-  public static Node getParentOfNode(Node node) throws RuntimeException
-  {
-    Node parent;
-    short nodeType = node.getNodeType();
-
-    if (Node.ATTRIBUTE_NODE == nodeType)
-    {
-      Document doc = node.getOwnerDocument();
-          /*
-      TBD:
-      if(null == doc)
-      {
-        throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_CHILD_HAS_NO_OWNER_DOCUMENT, null));//"Attribute child does not have an owner document!");
-      }
-      */
-
-          // Given how expensive the tree walk may be, we should first ask
-          // whether this DOM can answer the question for us. The additional
-          // test does slow down Level 1 DOMs slightly. DOMHelper2, which
-          // is currently specialized for Xerces, assumes it can use the
-          // Level 2 solution. We might want to have an intermediate stage,
-          // which would assume DOM Level 2 but not assume Xerces.
-          //
-          // (Shouldn't have to check whether impl is null in a compliant DOM,
-          // but let's be paranoid for a moment...)
-          DOMImplementation impl=doc.getImplementation();
-          if(impl!=null && impl.hasFeature("Core","2.0"))
-          {
-                  parent=((Attr)node).getOwnerElement();
-                  return parent;
-          }
-
-          // DOM Level 1 solution, as fallback. Hugely expensive.
-
-      Element rootElem = doc.getDocumentElement();
-
-      if (null == rootElem)
-      {
-        throw new RuntimeException(
-          XMLMessages.createXMLMessage(
-            XMLErrorResources.ER_CHILD_HAS_NO_OWNER_DOCUMENT_ELEMENT,
-            null));  //"Attribute child does not have an owner document element!");
-      }
-
-      parent = locateAttrParent(rootElem, node);
-
-        }
-    else
-    {
-      parent = node.getParentNode();
-
-      // if((Node.DOCUMENT_NODE != nodeType) && (null == parent))
-      // {
-      //   throw new RuntimeException("Child does not have parent!");
-      // }
-    }
-
-    return parent;
-  }
-
-  /**
-   * Given an ID, return the element. This can work only if the document
-   * is interpreted in the context of a DTD or Schema, since otherwise
-   * we don't know which attributes are or aren't IDs.
-   * <p>
-   * Note that DOM Level 1 had no ability to retrieve this information.
-   * DOM Level 2 introduced it but does not promise that it will be
-   * supported in all DOMs; those which can't support it will always
-   * return null.
-   * <p>
-   * TODO: getElementByID is currently unimplemented. Support DOM Level 2?
-   *
-   * @param id The unique identifier to be searched for.
-   * @param doc The document to search within.
-   * @return CURRENTLY HARDCODED TO NULL, but it should be:
-   * The node which has this unique identifier, or null if there
-   * is no such node or this DOM can't reliably recognize it.
-   */
-  public Element getElementByID(String id, Document doc)
-  {
-    return null;
-  }
-
-  /**
-   * The getUnparsedEntityURI function returns the URI of the unparsed
-   * entity with the specified name in the same document as the context
-   * node (see [3.3 Unparsed Entities]). It returns the empty string if
-   * there is no such entity.
-   * <p>
-   * XML processors may choose to use the System Identifier (if one
-   * is provided) to resolve the entity, rather than the URI in the
-   * Public Identifier. The details are dependent on the processor, and
-   * we would have to support some form of plug-in resolver to handle
-   * this properly. Currently, we simply return the System Identifier if
-   * present, and hope that it a usable URI or that our caller can
-   * map it to one.
-   * TODO: Resolve Public Identifiers... or consider changing function name.
-   * <p>
-   * If we find a relative URI
-   * reference, XML expects it to be resolved in terms of the base URI
-   * of the document. The DOM doesn't do that for us, and it isn't
-   * entirely clear whether that should be done here; currently that's
-   * pushed up to a higher levelof our application. (Note that DOM Level
-   * 1 didn't store the document's base URI.)
-   * TODO: Consider resolving Relative URIs.
-   * <p>
-   * (The DOM's statement that "An XML processor may choose to
-   * completely expand entities before the structure model is passed
-   * to the DOM" refers only to parsed entities, not unparsed, and hence
-   * doesn't affect this function.)
-   *
-   * @param name A string containing the Entity Name of the unparsed
-   * entity.
-   * @param doc Document node for the document to be searched.
-   *
-   * @return String containing the URI of the Unparsed Entity, or an
-   * empty string if no such entity exists.
-   */
-  public String getUnparsedEntityURI(String name, Document doc)
-  {
-
-    String url = "";
-    DocumentType doctype = doc.getDoctype();
-
-    if (null != doctype)
-    {
-      NamedNodeMap entities = doctype.getEntities();
-      if(null == entities)
-        return url;
-      Entity entity = (Entity) entities.getNamedItem(name);
-      if(null == entity)
-        return url;
-
-      String notationName = entity.getNotationName();
-
-      if (null != notationName)  // then it's unparsed
-      {
-        // The draft says: "The XSLT processor may use the public
-        // identifier to generate a URI for the entity instead of the URI
-        // specified in the system identifier. If the XSLT processor does
-        // not use the public identifier to generate the URI, it must use
-        // the system identifier; if the system identifier is a relative
-        // URI, it must be resolved into an absolute URI using the URI of
-        // the resource containing the entity declaration as the base
-        // URI [RFC2396]."
-        // So I'm falling a bit short here.
-        url = entity.getSystemId();
-
-        if (null == url)
-        {
-          url = entity.getPublicId();
-        }
-        else
-        {
-          // This should be resolved to an absolute URL, but that's hard
-          // to do from here.
-        }
-      }
-    }
-
-    return url;
-  }
-
-  /**
-   * Support for getParentOfNode; walks a DOM tree until it finds
-   * the Element which owns the Attr. This is hugely expensive, and
-   * if at all possible you should use the DOM Level 2 Attr.ownerElement()
-   * method instead.
-   *  <p>
-   * The DOM Level 1 developers expected that folks would keep track
-   * of the last Element they'd seen and could recover the info from
-   * that source. Obviously that doesn't work very well if the only
-   * information you've been presented with is the Attr. The DOM Level 2
-   * getOwnerElement() method fixes that, but only for Level 2 and
-   * later DOMs.
-   *
-   * @param elem Element whose subtree is to be searched for this Attr
-   * @param attr Attr whose owner is to be located.
-   *
-   * @return the first Element whose attribute list includes the provided
-   * attr. In modern DOMs, this will also be the only such Element. (Early
-   * DOMs had some hope that Attrs might be sharable, but this idea has
-   * been abandoned.)
-   */
-  private static Node locateAttrParent(Element elem, Node attr)
-  {
-
-    Node parent = null;
-
-        // This should only be called for Level 1 DOMs, so we don't have to
-        // worry about namespace issues. In later levels, it's possible
-        // for a DOM to have two Attrs with the same NodeName but
-        // different namespaces, and we'd need to get getAttributeNodeNS...
-        // but later levels also have Attr.getOwnerElement.
-        Attr check=elem.getAttributeNode(attr.getNodeName());
-        if(check==attr)
-                parent = elem;
-
-    if (null == parent)
-    {
-      for (Node node = elem.getFirstChild(); null != node;
-              node = node.getNextSibling())
-      {
-        if (Node.ELEMENT_NODE == node.getNodeType())
-        {
-          parent = locateAttrParent((Element) node, attr);
-
-          if (null != parent)
-            break;
-        }
-      }
-    }
-
-    return parent;
-  }
-
-  /**
-   * The factory object used for creating nodes
-   * in the result tree.
-   */
-  protected Document m_DOMFactory = null;
-
-  /**
-   * Store the factory object required to create DOM nodes
-   * in the result tree. In fact, that's just the result tree's
-   * Document node...
-   *
-   * @param domFactory The DOM Document Node within whose context
-   * the result tree will be built.
-   */
-  public void setDOMFactory(Document domFactory)
-  {
-    this.m_DOMFactory = domFactory;
-  }
-
-  /**
-   * Retrieve the factory object required to create DOM nodes
-   * in the result tree.
-   *
-   * @return The result tree's DOM Document Node.
-   */
-  public Document getDOMFactory()
-  {
-
-    if (null == this.m_DOMFactory)
-    {
-      this.m_DOMFactory = createDocument();
-    }
-
-    return this.m_DOMFactory;
-  }
-
-  /**
-   * Get the textual contents of the node. See
-   * getNodeData(Node,FastStringBuffer) for discussion of how
-   * whitespace nodes are handled.
-   *
-   * @param node DOM Node to be examined
-   * @return String containing a concatenation of all the
-   * textual content within that node.
-   * @see #getNodeData(Node,FastStringBuffer)
-   *
-   */
-  public static String getNodeData(Node node)
-  {
-
-    FastStringBuffer buf = StringBufferPool.get();
-    String s;
-
-    try
-    {
-      getNodeData(node, buf);
-
-      s = (buf.length() > 0) ? buf.toString() : "";
-    }
-    finally
-    {
-      StringBufferPool.free(buf);
-    }
-
-    return s;
-  }
-
-  /**
-   * Retrieve the text content of a DOM subtree, appending it into a
-   * user-supplied FastStringBuffer object. Note that attributes are
-   * not considered part of the content of an element.
-   * <p>
-   * There are open questions regarding whitespace stripping.
-   * Currently we make no special effort in that regard, since the standard
-   * DOM doesn't yet provide DTD-based information to distinguish
-   * whitespace-in-element-context from genuine #PCDATA. Note that we
-   * should probably also consider xml:space if/when we address this.
-   * DOM Level 3 may solve the problem for us.
-   *
-   * @param node Node whose subtree is to be walked, gathering the
-   * contents of all Text or CDATASection nodes.
-   * @param buf FastStringBuffer into which the contents of the text
-   * nodes are to be concatenated.
-   */
-  public static void getNodeData(Node node, FastStringBuffer buf)
-  {
-
-    switch (node.getNodeType())
-    {
-    case Node.DOCUMENT_FRAGMENT_NODE :
-    case Node.DOCUMENT_NODE :
-    case Node.ELEMENT_NODE :
-    {
-      for (Node child = node.getFirstChild(); null != child;
-              child = child.getNextSibling())
-      {
-        getNodeData(child, buf);
-      }
-    }
-    break;
-    case Node.TEXT_NODE :
-    case Node.CDATA_SECTION_NODE :
-      buf.append(node.getNodeValue());
-      break;
-    case Node.ATTRIBUTE_NODE :
-      buf.append(node.getNodeValue());
-      break;
-    case Node.PROCESSING_INSTRUCTION_NODE :
-      // warning(XPATHErrorResources.WG_PARSING_AND_PREPARING);
-      break;
-    default :
-      // ignore
-      break;
-    }
-  }
-}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/DOMOrder.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.org.apache.xml.internal.utils;
-
-/**
- * @deprecated Since the introduction of the DTM, this class will be removed.
- * Nodes that implement this index can return a document order index.
- * Eventually, this will be replaced by DOM 3 methods.
- * (compareDocumentOrder and/or compareTreePosition.)
- */
-public interface DOMOrder
-{
-
-  /**
-   * Get the UID (document order index).
-   *
-   * @return integer whose relative value corresponds to document order
-   * -- that is, if node1.getUid()<node2.getUid(), node1 comes before
-   * node2, and if they're equal node1 and node2 are the same node. No
-   * promises are made beyond that.
-   */
-  public int getUid();
-}
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/TreeWalker.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/TreeWalker.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -17,11 +17,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package com.sun.org.apache.xml.internal.utils;
 
-import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
-import java.io.File;
-
+import com.sun.org.apache.xml.internal.dtm.ref.dom2dtm.DOM2DTM.CharacterNodeHandler;
+import javax.xml.transform.Result;
 import org.w3c.dom.Comment;
 import org.w3c.dom.Element;
 import org.w3c.dom.EntityReference;
@@ -47,14 +47,8 @@
   /** Local reference to a ContentHandler          */
   private ContentHandler m_contentHandler = null;
 
-  // ARGHH!!  JAXP Uses Xerces without setting the namespace processing to ON!
-  // DOM2Helper m_dh = new DOM2Helper();
-
-  /** DomHelper for this TreeWalker          */
-  protected DOMHelper m_dh;
-
-        /** Locator object for this TreeWalker          */
-        private LocatorImpl m_locator = new LocatorImpl();
+   /** Locator object for this TreeWalker          */
+   private LocatorImpl m_locator = new LocatorImpl();
 
   /**
    * Get the ContentHandler used for the tree walk.
@@ -76,32 +70,21 @@
     m_contentHandler = ch;
   }
 
-        /**
+   /**
    * Constructor.
    * @param   contentHandler The implementation of the
    * @param   systemId System identifier for the document.
    * contentHandler operation (toXMLString, digest, ...)
    */
-  public TreeWalker(ContentHandler contentHandler, DOMHelper dh, String systemId)
+  public TreeWalker(ContentHandler contentHandler, String systemId)
   {
     this.m_contentHandler = contentHandler;
-    m_contentHandler.setDocumentLocator(m_locator);
+    if (m_contentHandler != null) {
+        m_contentHandler.setDocumentLocator(m_locator);
+    }
     if (systemId != null) {
         m_locator.setSystemId(systemId);
     }
-    m_dh = dh;
-  }
-
-  /**
-   * Constructor.
-   * @param   contentHandler The implementation of the
-   * contentHandler operation (toXMLString, digest, ...)
-   */
-  public TreeWalker(ContentHandler contentHandler, DOMHelper dh)
-  {
-    this.m_contentHandler = contentHandler;
-    m_contentHandler.setDocumentLocator(m_locator);
-    m_dh = dh;
   }
 
   /**
@@ -111,11 +94,7 @@
    */
   public TreeWalker(ContentHandler contentHandler)
   {
-    this.m_contentHandler = contentHandler;
-    if (m_contentHandler != null) {
-        m_contentHandler.setDocumentLocator(m_locator);
-    }
-    m_dh = new DOM2Helper();
+      this(contentHandler, null);
   }
 
   /**
@@ -239,7 +218,7 @@
     this.m_contentHandler.endDocument();
   }
 
-  /** Flag indicating whether following text to be processed is raw text          */
+  // Flag indicating whether following text to be processed is raw text
   boolean nextIsRaw = false;
 
   /**
@@ -248,9 +227,9 @@
   private final void dispatachChars(Node node)
      throws org.xml.sax.SAXException
   {
-    if(m_contentHandler instanceof com.sun.org.apache.xml.internal.dtm.ref.dom2dtm.DOM2DTM.CharacterNodeHandler)
+    if(m_contentHandler instanceof CharacterNodeHandler)
     {
-      ((com.sun.org.apache.xml.internal.dtm.ref.dom2dtm.DOM2DTM.CharacterNodeHandler)m_contentHandler).characters(node);
+      ((CharacterNodeHandler)m_contentHandler).characters(node);
     }
     else
     {
@@ -313,17 +292,14 @@
     case Node.ELEMENT_NODE :
       NamedNodeMap atts = ((Element) node).getAttributes();
       int nAttrs = atts.getLength();
-      // System.out.println("TreeWalker#startNode: "+node.getNodeName());
 
       for (int i = 0; i < nAttrs; i++)
       {
         Node attr = atts.item(i);
         String attrName = attr.getNodeName();
 
-        // System.out.println("TreeWalker#startNode: attr["+i+"] = "+attrName+", "+attr.getNodeValue());
         if (attrName.equals("xmlns") || attrName.startsWith("xmlns:"))
         {
-          // System.out.println("TreeWalker#startNode: attr["+i+"] = "+attrName+", "+attr.getNodeValue());
           int index;
           // Use "" instead of null, as Xerces likes "" for the
           // name of the default namespace.  Fix attributed
@@ -337,15 +313,13 @@
 
       }
 
-      // System.out.println("m_dh.getNamespaceOfNode(node): "+m_dh.getNamespaceOfNode(node));
-      // System.out.println("m_dh.getLocalNameOfNode(node): "+m_dh.getLocalNameOfNode(node));
-      String ns = m_dh.getNamespaceOfNode(node);
+      String ns = DOM2Helper.getNamespaceOfNode(node);
       if(null == ns)
         ns = "";
       this.m_contentHandler.startElement(ns,
-                                         m_dh.getLocalNameOfNode(node),
+                                         DOM2Helper.getLocalNameOfNode(node),
                                          node.getNodeName(),
-                                         new AttList(atts, m_dh));
+                                         new AttList(atts));
       break;
     case Node.PROCESSING_INSTRUCTION_NODE :
     {
@@ -393,9 +367,9 @@
       {
         nextIsRaw = false;
 
-        m_contentHandler.processingInstruction(javax.xml.transform.Result.PI_DISABLE_OUTPUT_ESCAPING, "");
+        m_contentHandler.processingInstruction(Result.PI_DISABLE_OUTPUT_ESCAPING, "");
         dispatachChars(node);
-        m_contentHandler.processingInstruction(javax.xml.transform.Result.PI_ENABLE_OUTPUT_ESCAPING, "");
+        m_contentHandler.processingInstruction(Result.PI_ENABLE_OUTPUT_ESCAPING, "");
       }
       else
       {
@@ -440,12 +414,12 @@
       break;
 
     case Node.ELEMENT_NODE :
-      String ns = m_dh.getNamespaceOfNode(node);
+      String ns = DOM2Helper.getNamespaceOfNode(node);
       if(null == ns)
         ns = "";
       this.m_contentHandler.endElement(ns,
-                                         m_dh.getLocalNameOfNode(node),
-                                         node.getNodeName());
+              DOM2Helper.getLocalNameOfNode(node),
+              node.getNodeName());
 
       NamedNodeMap atts = ((Element) node).getAttributes();
       int nAttrs = atts.getLength();
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/operations/Quo.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/operations/Quo.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -28,6 +27,7 @@
  * The 'quo' operation expression executer. (no longer supported by XPath).
  * @deprecated
  */
+@Deprecated
 public class Quo extends Operation
 {
     static final long serialVersionUID = 693765299196169905L;
--- a/jaxp/src/java.xml/share/classes/org/xml/sax/HandlerBase.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/org/xml/sax/HandlerBase.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -66,6 +66,7 @@
  * @see org.xml.sax.DocumentHandler
  * @see org.xml.sax.ErrorHandler
  */
+@Deprecated(since="1.5")
 public class HandlerBase
     implements EntityResolver, DTDHandler, DocumentHandler, ErrorHandler
 {
--- a/jaxp/src/java.xml/share/classes/org/xml/sax/helpers/AttributeListImpl.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/org/xml/sax/helpers/AttributeListImpl.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -87,6 +87,7 @@
  * @see org.xml.sax.AttributeList
  * @see org.xml.sax.DocumentHandler#startElement
  */
+@Deprecated(since="1.5")
 public class AttributeListImpl implements AttributeList
 {
 
--- a/jaxws/.hgtags	Thu Jun 15 13:44:42 2017 +0200
+++ b/jaxws/.hgtags	Wed Jul 05 23:40:06 2017 +0200
@@ -429,3 +429,5 @@
 139e7c786ee4885efe53eb650b72c7b5a2d3b964 jdk-9+171
 3ccd9f37faa601866db5edb827363e797f5a2493 jdk-10+10
 8c615099f3e3ca137325be34bf566b767d9e3c64 jdk-9+172
+2d22d6732a73e615b9e13d6bc93bf026db3bc231 jdk-10+11
+2bd967aa452c1e0e87a6173bef6fbb96ef1c521b jdk-9+173
--- a/jdk/.hgtags	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/.hgtags	Wed Jul 05 23:40:06 2017 +0200
@@ -426,3 +426,5 @@
 29bbedd4cce8e14742bdb22118c057b877c02f0f jdk-9+171
 df64bd4757d0d130d62a22b8143ba31d3a16ac18 jdk-10+10
 0ff9ad7d067cd4fa14450cf208bf019175a0aaba jdk-9+172
+7c54889c0ec649ee04643e5cace434623d0dc667 jdk-10+11
+a5506b425f1bf91530d8417b57360e5d89328c0c jdk-9+173
--- a/jdk/make/launcher/Launcher-jdk.aot.gmk	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/make/launcher/Launcher-jdk.aot.gmk	Wed Jul 05 23:40:06 2017 +0200
@@ -30,7 +30,7 @@
 
 $(eval $(call SetupBuildLauncher, jaotc, \
     MAIN_CLASS := jdk.tools.jaotc.Main, \
-    JAVA_ARGS := -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI \
+    EXTRA_JAVA_ARGS := -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI \
         --add-exports=jdk.internal.vm.ci/jdk.vm.ci.aarch64=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
         --add-exports=jdk.internal.vm.ci/jdk.vm.ci.amd64=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
         --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
@@ -38,12 +38,13 @@
         --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.stack=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
         --add-exports=jdk.internal.vm.ci/jdk.vm.ci.common=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
         --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
-        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+    , \
+    JAVA_ARGS := --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
         --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
         --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.sparc=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
         --add-exports=jdk.internal.vm.ci/jdk.vm.ci.meta=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
         --add-exports=jdk.internal.vm.ci/jdk.vm.ci.runtime=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
-        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.sparc=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.sparc=$(call CommaList, jdk.internal.vm.compiler  jdk.aot)  \
         -XX:+UseAOT \
         -Djvmci.UseProfilingInformation=false \
         -Dgraal.UseExceptionProbability=false \
--- a/jdk/make/launcher/LauncherCommon.gmk	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/make/launcher/LauncherCommon.gmk	Wed Jul 05 23:40:06 2017 +0200
@@ -66,7 +66,10 @@
 # MAIN_MODULE  The module of the main class to launch if different from the
 #     current module
 # MAIN_CLASS   The Java main class to launch
-# JAVA_ARGS   Processed into a -DJAVA_ARGS C flag
+# JAVA_ARGS   Processed into a -DJAVA_ARGS and added to CFLAGS
+# EXTRA_JAVA_ARGS Processed into a -DEXTRA_JAVA_ARGS and is prepended
+#     before JAVA_ARGS to CFLAGS, primarily to allow long string literal
+#     compile time defines exceeding Visual Studio 2013 limitations.
 # CFLAGS   Additional CFLAGS
 # CFLAGS_windows   Additional CFLAGS_windows
 # LIBS_unix   Additional LIBS_unix
@@ -104,6 +107,11 @@
   endif
 
   ifneq ($$($1_JAVA_ARGS), )
+    ifneq ($$($1_EXTRA_JAVA_ARGS), )
+      $1_EXTRA_JAVA_ARGS_STR := '{ $$(strip $$(foreach a, \
+        $$(addprefix -J, $$($1_EXTRA_JAVA_ARGS)), "$$a"$(COMMA) )) }'
+      $1_CFLAGS += -DEXTRA_JAVA_ARGS=$$($1_EXTRA_JAVA_ARGS_STR)
+    endif
     $1_JAVA_ARGS_STR := '{ $$(strip $$(foreach a, \
         $$(addprefix -J, $$($1_JAVA_ARGS)) -m $$($1_MAIN_MODULE)/$$($1_MAIN_CLASS), "$$a"$(COMMA) )) }'
     $1_CFLAGS += -DJAVA_ARGS=$$($1_JAVA_ARGS_STR)
--- a/jdk/make/lib/CoreLibraries.gmk	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/make/lib/CoreLibraries.gmk	Wed Jul 05 23:40:06 2017 +0200
@@ -132,7 +132,8 @@
 
 ##########################################################################################
 
-LIBJAVA_SRC_DIRS := $(call FindSrcDirsForLib, java.base, java)
+# Allow a custom makefile to add extra src dirs
+LIBJAVA_SRC_DIRS += $(call FindSrcDirsForLib, java.base, java)
 
 LIBJAVA_CFLAGS := $(addprefix -I, $(LIBJAVA_SRC_DIRS)) \
     -I$(JDK_TOPDIR)/src/java.base/share/native/libfdlibm \
--- a/jdk/make/src/classes/build/tools/cldrconverter/LDMLParseHandler.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/make/src/classes/build/tools/cldrconverter/LDMLParseHandler.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -549,12 +549,20 @@
         case "decimal":
             // for FormatData
             // copy string for later assembly into NumberElements
-            pushStringEntry(qName, attributes, currentNumberingSystem + "NumberElements/decimal");
+            if (currentContainer.getqName().equals("symbols")) {
+                pushStringEntry(qName, attributes, currentNumberingSystem + "NumberElements/decimal");
+            } else {
+                pushIgnoredContainer(qName);
+            }
             break;
         case "group":
             // for FormatData
             // copy string for later assembly into NumberElements
-            pushStringEntry(qName, attributes, currentNumberingSystem + "NumberElements/group");
+            if (currentContainer.getqName().equals("symbols")) {
+                pushStringEntry(qName, attributes, currentNumberingSystem + "NumberElements/group");
+            } else {
+                pushIgnoredContainer(qName);
+            }
             break;
         case "list":
             // for FormatData
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/src/classes/build/tools/jigsaw/ListPackages.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package build.tools.jigsaw;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.UncheckedIOException;
+import java.lang.module.ModuleDescriptor;
+import java.lang.module.ModuleFinder;
+import java.lang.module.ModuleReference;
+import java.net.URI;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * Run this tool to generate the JDK internal APIs in the previous releases
+ * including platform-specific internal APIs.
+ */
+public class ListPackages {
+    // Filter non-interesting JAR files
+    private final static List<String> excludes = Arrays.asList(
+        "deploy.jar",
+        "javaws.jar",
+        "plugin.jar",
+        "cldrdata.jar",
+        "localedata.jar"
+    );
+    private static void usage() {
+        System.out.println("ListPackages [-o <outfile>] [-jdkinternals] <javaHome> [<javaHome>]*");
+    }
+
+    private static final Set<String> EXPORTED_PACKAGES = new HashSet<>();
+
+    public static void main(String... args) throws IOException {
+        List<Path> paths = new ArrayList<>();
+        Path outFile = null;
+        boolean jdkinternals = false;
+        int i=0;
+        while (i < args.length) {
+            String arg = args[i++];
+            if (arg.equals("-o")) {
+                outFile = Paths.get(args[i++]);
+            } else if (arg.equals("-jdkinternals")) {
+                jdkinternals = true;
+            } else {
+                Path p = Paths.get(arg);
+                if (Files.notExists(p))
+                    throw new IllegalArgumentException(p + " not exist");
+                paths.add(p);
+            }
+        }
+        if (paths.isEmpty()) {
+            usage();
+            System.exit(1);
+        }
+
+        // Get the exported APIs from the current JDK releases
+        Path javaHome = Paths.get(System.getProperty("java.home"));
+        ModuleFinder.ofSystem().findAll()
+            .stream()
+            .map(ModuleReference::descriptor)
+            .filter(md -> !md.name().equals("jdk.unsupported"))
+            .flatMap(md -> md.exports().stream())
+            .filter(exp -> !exp.isQualified())
+            .map(ModuleDescriptor.Exports::source)
+            .forEach(EXPORTED_PACKAGES::add);
+
+        ListPackages listPackages = new ListPackages(paths);
+        Stream<String> pkgs = listPackages.packages().stream();
+        if (jdkinternals) {
+            pkgs = pkgs.filter(pn -> !EXPORTED_PACKAGES.contains(pn));
+        }
+        if (outFile != null) {
+            try (OutputStream out = Files.newOutputStream(outFile);
+                 PrintStream pw = new PrintStream(out)) {
+                write(pw, pkgs);
+            }
+        } else {
+            write(System.out, pkgs);
+        }
+    }
+
+
+    private static void write(PrintStream pw, Stream<String> packages) {
+        pw.println("# This file is auto-generated by ListPackages tool on " +
+                   LocalDateTime.now().toString());
+        packages.sorted().forEach(pw::println);
+    }
+
+    private final Set<String> packages = new HashSet<>();
+    ListPackages(List<Path> dirs) throws IOException {
+        for (Path p : dirs) {
+            packages.addAll(list(p));
+        }
+    }
+
+    Set<String> packages() {
+        return packages;
+    }
+
+    private Set<String> list(Path javaHome) throws IOException {
+        Path jrt = javaHome.resolve("lib").resolve("modules");
+        Path jre = javaHome.resolve("jre");
+
+        if (Files.exists(jrt)) {
+            return listModularRuntime(javaHome);
+        } else if (Files.exists(jre.resolve("lib").resolve("rt.jar"))) {
+            return listLegacyRuntime(javaHome);
+        }
+        throw new IllegalArgumentException("invalid " + javaHome);
+    }
+
+    private Set<String> listModularRuntime(Path javaHome) throws IOException {
+        Map<String, String> env = new HashMap<>();
+        env.put("java.home", javaHome.toString());
+        FileSystem fs = FileSystems.newFileSystem(URI.create("jrt:/"), env);
+        Path root = fs.getPath("packages");
+        return Files.walk(root, 1)
+                    .map(Path::getFileName)
+                    .map(Path::toString)
+                    .collect(Collectors.toSet());
+    }
+
+    private Set<String> listLegacyRuntime(Path javaHome) throws IOException {
+        List<Path> dirs = new ArrayList<>();
+        Path jre = javaHome.resolve("jre");
+        Path lib = javaHome.resolve("lib");
+
+        dirs.add(jre.resolve("lib"));
+        dirs.add(jre.resolve("lib").resolve("ext"));
+        dirs.add(lib.resolve("tools.jar"));
+        dirs.add(lib.resolve("jconsole.jar"));
+        Set<String> packages = new HashSet<>();
+        for (Path d : dirs) {
+            Files.find(d, 1, (Path p, BasicFileAttributes attr)
+                    -> p.getFileName().toString().endsWith(".jar") &&
+                       !excludes.contains(p.getFileName().toString()))
+                 .map(ListPackages::walkJarFile)
+                 .forEach(packages::addAll);
+        }
+        return packages;
+    }
+
+    static Set<String> walkJarFile(Path jarfile) {
+        try (JarFile jf = new JarFile(jarfile.toFile())) {
+            return jf.stream()
+                     .map(JarEntry::getName)
+                     .filter(n -> n.endsWith(".class"))
+                     .map(ListPackages::toPackage)
+                     .collect(Collectors.toSet());
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
+    static String toPackage(String name) {
+        int i = name.lastIndexOf('/');
+        if (i < 0) {
+            System.err.format("Warning: unnamed package %s%n", name);
+        }
+        return i >= 0 ? name.substring(0, i).replace("/", ".") : "";
+    }
+}
--- a/jdk/src/java.base/share/classes/java/lang/RuntimePermission.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/RuntimePermission.java	Wed Jul 05 23:40:06 2017 +0200
@@ -403,6 +403,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class RuntimePermission extends BasicPermission {
--- a/jdk/src/java.base/share/classes/java/lang/invoke/LambdaForm.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/LambdaForm.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1092,13 +1092,24 @@
         final MemberName member;
         private @Stable MethodHandle resolvedHandle;
         @Stable MethodHandle invoker;
+        private final MethodHandleImpl.Intrinsic intrinsicName;
 
         NamedFunction(MethodHandle resolvedHandle) {
-            this(resolvedHandle.internalMemberName(), resolvedHandle);
+            this(resolvedHandle.internalMemberName(), resolvedHandle, MethodHandleImpl.Intrinsic.NONE);
+        }
+        NamedFunction(MethodHandle resolvedHandle, MethodHandleImpl.Intrinsic intrinsic) {
+            this(resolvedHandle.internalMemberName(), resolvedHandle, intrinsic);
         }
         NamedFunction(MemberName member, MethodHandle resolvedHandle) {
+            this(member, resolvedHandle, MethodHandleImpl.Intrinsic.NONE);
+        }
+        NamedFunction(MemberName member, MethodHandle resolvedHandle, MethodHandleImpl.Intrinsic intrinsic) {
             this.member = member;
             this.resolvedHandle = resolvedHandle;
+            this.intrinsicName = intrinsic;
+            assert(resolvedHandle == null ||
+                   resolvedHandle.intrinsicName() == MethodHandleImpl.Intrinsic.NONE ||
+                   resolvedHandle.intrinsicName() == intrinsic) : resolvedHandle.intrinsicName() + " != " + intrinsic;
              // The following assert is almost always correct, but will fail for corner cases, such as PrivateInvokeTest.
              //assert(!isInvokeBasic(member));
         }
@@ -1111,6 +1122,7 @@
                 // necessary to pass BigArityTest
                 this.member = Invokers.invokeBasicMethod(basicInvokerType);
             }
+            this.intrinsicName = MethodHandleImpl.Intrinsic.NONE;
             assert(isInvokeBasic(member));
         }
 
@@ -1263,8 +1275,7 @@
         }
 
         public MethodHandleImpl.Intrinsic intrinsicName() {
-            return resolvedHandle == null ? MethodHandleImpl.Intrinsic.NONE
-                                          : resolvedHandle.intrinsicName();
+            return intrinsicName;
         }
     }
 
@@ -1741,15 +1752,15 @@
             Name[] idNames = new Name[] { argument(0, L_TYPE), argument(1, type) };
             idForm = new LambdaForm(2, idNames, 1, Kind.IDENTITY);
             idForm.compileToBytecode();
-            idFun = new NamedFunction(idMem, MethodHandleImpl.makeIntrinsic(
-                    idMem.getInvocationType(), idForm, MethodHandleImpl.Intrinsic.IDENTITY));
+            idFun = new NamedFunction(idMem, SimpleMethodHandle.make(idMem.getInvocationType(), idForm),
+                        MethodHandleImpl.Intrinsic.IDENTITY);
 
             Object zeValue = Wrapper.forBasicType(btChar).zero();
             Name[] zeNames = new Name[] { argument(0, L_TYPE), new Name(idFun, zeValue) };
             zeForm = new LambdaForm(1, zeNames, 1, Kind.ZERO);
             zeForm.compileToBytecode();
-            zeFun = new NamedFunction(zeMem, MethodHandleImpl.makeIntrinsic(
-                    zeMem.getInvocationType(), zeForm, MethodHandleImpl.Intrinsic.ZERO));
+            zeFun = new NamedFunction(zeMem, SimpleMethodHandle.make(zeMem.getInvocationType(), zeForm),
+                    MethodHandleImpl.Intrinsic.ZERO);
         }
 
         LF_zero[ord] = zeForm;
--- a/jdk/src/java.base/share/classes/java/lang/invoke/LambdaFormEditor.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/LambdaFormEditor.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -541,7 +541,7 @@
         // adjust the arguments
         MethodHandle aload = MethodHandles.arrayElementGetter(erasedArrayType);
         for (int i = 0; i < arrayLength; i++) {
-            Name loadArgument = new Name(aload, spreadParam, i);
+            Name loadArgument = new Name(new NamedFunction(aload, Intrinsic.ARRAY_LOAD), spreadParam, i);
             buf.insertExpression(exprPos + i, loadArgument);
             buf.replaceParameterByCopy(pos + i, exprPos + i);
         }
@@ -604,7 +604,8 @@
         for (int i = 0; i < collectorArity; i++) {
             newParams[i] = new Name(pos + i, argType);
         }
-        Name callCombiner = new Name(arrayCollector, (Object[]) /*...*/ newParams);
+        Name callCombiner = new Name(new NamedFunction(arrayCollector, Intrinsic.NEW_ARRAY),
+                                        (Object[]) /*...*/ newParams);
 
         // insert the new expression
         int exprPos = lambdaForm.arity();
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -592,7 +592,7 @@
                 names[nameCursor++] = new Name(getFunction(NF_checkSpreadArgument), array, spreadArgCount);
                 for (int j = 0; j < spreadArgCount; i++, j++) {
                     indexes[i] = nameCursor;
-                    names[nameCursor++] = new Name(aload, array, j);
+                    names[nameCursor++] = new Name(new NamedFunction(aload, Intrinsic.ARRAY_LOAD), array, j);
                 }
             } else if (i < indexes.length) {
                 indexes[i] = argIndex;
@@ -937,7 +937,7 @@
             names[PROFILE] = new Name(getFunction(NF_profileBoolean), names[CALL_TEST], names[GET_COUNTERS]);
         }
         // call selectAlternative
-        names[SELECT_ALT] = new Name(getConstantHandle(MH_selectAlternative), names[TEST], names[GET_TARGET], names[GET_FALLBACK]);
+        names[SELECT_ALT] = new Name(new NamedFunction(getConstantHandle(MH_selectAlternative), Intrinsic.SELECT_ALTERNATIVE), names[TEST], names[GET_TARGET], names[GET_FALLBACK]);
 
         // call target or fallback
         invokeArgs[0] = names[SELECT_ALT];
@@ -1008,7 +1008,7 @@
         Object[] args = new Object[invokeBasic.type().parameterCount()];
         args[0] = names[GET_COLLECT_ARGS];
         System.arraycopy(names, ARG_BASE, args, 1, ARG_LIMIT-ARG_BASE);
-        names[BOXED_ARGS] = new Name(makeIntrinsic(invokeBasic, Intrinsic.GUARD_WITH_CATCH), args);
+        names[BOXED_ARGS] = new Name(new NamedFunction(invokeBasic, Intrinsic.GUARD_WITH_CATCH), args);
 
         // t_{i+1}:L=MethodHandleImpl.guardWithCatch(target:L,exType:L,catcher:L,t_{i}:L);
         Object[] gwcArgs = new Object[] {names[GET_TARGET], names[GET_CLASS], names[GET_CATCHER], names[BOXED_ARGS]};
@@ -1896,7 +1896,7 @@
             Object[] args = new Object[invokeBasic.type().parameterCount()];
             args[0] = names[GET_COLLECT_ARGS];
             System.arraycopy(names, ARG_BASE, args, 1, ARG_LIMIT - ARG_BASE);
-            names[BOXED_ARGS] = new Name(makeIntrinsic(invokeBasic, Intrinsic.LOOP), args);
+            names[BOXED_ARGS] = new Name(new NamedFunction(invokeBasic, Intrinsic.LOOP), args);
 
             // t_{i+1}:L=MethodHandleImpl.loop(localTypes:L,clauses:L,t_{i}:L);
             Object[] lArgs =
@@ -2133,7 +2133,7 @@
         Object[] args = new Object[invokeBasic.type().parameterCount()];
         args[0] = names[GET_COLLECT_ARGS];
         System.arraycopy(names, ARG_BASE, args, 1, ARG_LIMIT-ARG_BASE);
-        names[BOXED_ARGS] = new Name(makeIntrinsic(invokeBasic, Intrinsic.TRY_FINALLY), args);
+        names[BOXED_ARGS] = new Name(new NamedFunction(invokeBasic, Intrinsic.TRY_FINALLY), args);
 
         // t_{i+1}:L=MethodHandleImpl.tryFinally(target:L,exType:L,catcher:L,t_{i}:L);
         Object[] tfArgs = new Object[] {names[GET_TARGET], names[GET_CLEANUP], names[BOXED_ARGS]};
@@ -2225,9 +2225,8 @@
                     return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "fillNewTypedArray",
                             MethodType.methodType(Object[].class, Object[].class, Integer.class, Object[].class));
                 case MH_selectAlternative:
-                    return makeIntrinsic(IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "selectAlternative",
-                            MethodType.methodType(MethodHandle.class, boolean.class, MethodHandle.class, MethodHandle.class)),
-                        Intrinsic.SELECT_ALTERNATIVE);
+                    return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "selectAlternative",
+                            MethodType.methodType(MethodHandle.class, boolean.class, MethodHandle.class, MethodHandle.class));
                 case MH_countedLoopPred:
                     return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "countedLoopPredicate",
                             MethodType.methodType(boolean.class, int.class, int.class));
--- a/jdk/src/java.base/share/classes/java/lang/invoke/package-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/package-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -44,13 +44,13 @@
  * </li>
  * </ul>
  *
- * <h1><a name="jvm_mods"></a>Summary of relevant Java Virtual Machine changes</h1>
+ * <h1><a id="jvm_mods"></a>Summary of relevant Java Virtual Machine changes</h1>
  * The following low-level information summarizes relevant parts of the
  * Java Virtual Machine specification.  For full details, please see the
  * current version of that specification.
  *
  * Each occurrence of an {@code invokedynamic} instruction is called a <em>dynamic call site</em>.
- * <h2><a name="indyinsn"></a>{@code invokedynamic} instructions</h2>
+ * <h2><a id="indyinsn"></a>{@code invokedynamic} instructions</h2>
  * A dynamic call site is originally in an unlinked state.  In this state, there is
  * no target method for the call site to invoke.
  * <p>
@@ -77,7 +77,8 @@
  * <p>
  * The bootstrap method is invoked on at least three values:
  * <ul>
- * <li>a {@code MethodHandles.Lookup}, a lookup object on the <em>caller class</em> in which dynamic call site occurs </li>
+ * <li>a {@code MethodHandles.Lookup}, a lookup object on the <em>caller class</em>
+ *     in which dynamic call site occurs </li>
  * <li>a {@code String}, the method name mentioned in the call site </li>
  * <li>a {@code MethodType}, the resolved type descriptor of the call </li>
  * <li>optionally, between 1 and 251 additional static arguments taken from the constant pool </li>
@@ -165,17 +166,27 @@
  * Given these rules, here are examples of legal bootstrap method declarations,
  * given various numbers {@code N} of extra arguments.
  * The first rows (marked {@code *}) will work for any number of extra arguments.
- * <table border=1 cellpadding=5 summary="Static argument types">
- * <tr><th>N</th><th>sample bootstrap method</th></tr>
- * <tr><td>*</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object... args)</code></td></tr>
- * <tr><td>*</td><td><code>CallSite bootstrap(Object... args)</code></td></tr>
- * <tr><td>*</td><td><code>CallSite bootstrap(Object caller, Object... nameAndTypeWithArgs)</code></td></tr>
- * <tr><td>0</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type)</code></td></tr>
- * <tr><td>0</td><td><code>CallSite bootstrap(Lookup caller, Object... nameAndType)</code></td></tr>
- * <tr><td>1</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object arg)</code></td></tr>
- * <tr><td>2</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object... args)</code></td></tr>
- * <tr><td>2</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, String... args)</code></td></tr>
- * <tr><td>2</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, String x, int y)</code></td></tr>
+ * <table class="plain">
+ * <caption style="display:none">Static argument types</caption>
+ * <tr><th>N</th><th>Sample bootstrap method</th></tr>
+ * <tr><td>*</td>
+ *     <td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object... args)</code></td></tr>
+ * <tr><td>*</td><td>
+ *     <code>CallSite bootstrap(Object... args)</code></td></tr>
+ * <tr><td>*</td><td>
+ *     <code>CallSite bootstrap(Object caller, Object... nameAndTypeWithArgs)</code></td></tr>
+ * <tr><td>0</td><td>
+ *     <code>CallSite bootstrap(Lookup caller, String name, MethodType type)</code></td></tr>
+ * <tr><td>0</td><td>
+ *     <code>CallSite bootstrap(Lookup caller, Object... nameAndType)</code></td></tr>
+ * <tr><td>1</td><td>
+ *     <code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object arg)</code></td></tr>
+ * <tr><td>2</td><td>
+ *     <code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object... args)</code></td></tr>
+ * <tr><td>2</td><td>
+ *     <code>CallSite bootstrap(Lookup caller, String name, MethodType type, String... args)</code></td></tr>
+ * <tr><td>2</td>
+ *     <td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, String x, int y)</code></td></tr>
  * </table>
  * The last example assumes that the extra arguments are of type
  * {@code CONSTANT_String} and {@code CONSTANT_Integer}, respectively.
--- a/jdk/src/java.base/share/classes/java/lang/module/package-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/module/package-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,7 +27,7 @@
  * Classes to support module descriptors and creating configurations of modules
  * by means of resolution and service binding.
  *
- * <h2><a name="resolution">Resolution</a></h2>
+ * <h2><a id="resolution">Resolution</a></h2>
  *
  * <p> Resolution is the process of computing the transitive closure of a set
  * of root modules over a set of observable modules by resolving the
@@ -97,7 +97,7 @@
  * resolved so that it reads all other modules in the resulting configuration and
  * all modules in parent configurations. </p>
  *
- * <h2><a name="servicebinding">Service binding</a></h2>
+ * <h2><a id="servicebinding">Service binding</a></h2>
  *
  * <p> Service binding is the process of augmenting a graph of resolved modules
  * from the set of observable modules induced by the service-use dependence
--- a/jdk/src/java.base/share/classes/java/lang/package-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/package-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -57,7 +57,7 @@
  * by the {@code throw} statement. Subclasses of {@code Throwable}
  * represent errors and exceptions.
  *
- * <a name="charenc"></a>
+ * <a id="charenc"></a>
  * <h3>Character Encodings</h3>
  *
  * The specification of the {@link java.nio.charset.Charset
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Array.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Array.java	Wed Jul 05 23:40:06 2017 +0200
@@ -36,6 +36,7 @@
  * conversion would occur.
  *
  * @author Nakul Saraiya
+ * @since 1.1
  */
 public final
 class Array {
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Constructor.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Constructor.java	Wed Jul 05 23:40:06 2017 +0200
@@ -59,6 +59,7 @@
  *
  * @author      Kenneth Russell
  * @author      Nakul Saraiya
+ * @since 1.1
  */
 public final class Constructor<T> extends Executable {
     private Class<T>            clazz;
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Field.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Field.java	Wed Jul 05 23:40:06 2017 +0200
@@ -60,6 +60,7 @@
  *
  * @author Kenneth Russell
  * @author Nakul Saraiya
+ * @since 1.1
  */
 public final
 class Field extends AccessibleObject implements Member {
--- a/jdk/src/java.base/share/classes/java/lang/reflect/InvocationTargetException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/InvocationTargetException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -38,6 +38,7 @@
  *
  * @see Method
  * @see Constructor
+ * @since 1.1
  */
 public class InvocationTargetException extends ReflectiveOperationException {
     /**
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Member.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Member.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  * @see Constructor
  *
  * @author Nakul Saraiya
+ * @since 1.1
  */
 public
 interface Member {
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Method.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Method.java	Wed Jul 05 23:40:06 2017 +0200
@@ -63,6 +63,7 @@
  *
  * @author Kenneth Russell
  * @author Nakul Saraiya
+ * @since 1.1
  */
 public final class Method extends Executable {
     private Class<?>            clazz;
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Modifier.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Modifier.java	Wed Jul 05 23:40:06 2017 +0200
@@ -43,6 +43,7 @@
  *
  * @author Nakul Saraiya
  * @author Kenneth Russell
+ * @since 1.1
  */
 public class Modifier {
 
--- a/jdk/src/java.base/share/classes/java/math/BigDecimal.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/math/BigDecimal.java	Wed Jul 05 23:40:06 2017 +0200
@@ -222,6 +222,7 @@
  * @author  Mike Cowlishaw
  * @author  Joseph D. Darcy
  * @author  Sergey V. Kuksenko
+ * @since 1.1
  */
 public class BigDecimal extends Number implements Comparable<BigDecimal> {
     /**
--- a/jdk/src/java.base/share/classes/java/net/InetAddress.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/net/InetAddress.java	Wed Jul 05 23:40:06 2017 +0200
@@ -75,7 +75,7 @@
  * <blockquote><table class="borderless">
  *   <caption style="display:none">Description of unicast and multicast address types</caption>
  *   <tbody>
- *   <tr><th valign=top><i>unicast</i></th>
+ *   <tr><th style="vertical-align:top"><i>unicast</i></th>
  *       <td>An identifier for a single interface. A packet sent to
  *         a unicast address is delivered to the interface identified by
  *         that address.
@@ -94,7 +94,7 @@
  *         IP address loops around and becomes IP input on the local
  *         host. This address is often used when testing a
  *         client.</td></tr>
- *   <tr><th valign=top><i>multicast</i></th>
+ *   <tr><th style="vertical-align:top"><i>multicast</i></th>
  *       <td>An identifier for a set of interfaces (typically belonging
  *         to different nodes). A packet sent to a multicast address is
  *         delivered to all interfaces identified by that address.</td></tr>
--- a/jdk/src/java.base/share/classes/java/net/NetPermission.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/net/NetPermission.java	Wed Jul 05 23:40:06 2017 +0200
@@ -167,6 +167,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class NetPermission extends BasicPermission {
--- a/jdk/src/java.base/share/classes/java/net/SocketOptions.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/net/SocketOptions.java	Wed Jul 05 23:40:06 2017 +0200
@@ -40,6 +40,7 @@
  * DatagramSocket and MulticastSocket.
  *
  * @author David Brown
+ * @since 1.1
  */
 
 
--- a/jdk/src/java.base/share/classes/java/net/SocketPermission.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/net/SocketPermission.java	Wed Jul 05 23:40:06 2017 +0200
@@ -142,6 +142,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  *
  * @serial exclude
  */
--- a/jdk/src/java.base/share/classes/java/net/URI.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/net/URI.java	Wed Jul 05 23:40:06 2017 +0200
@@ -253,32 +253,32 @@
  * which are taken from that specification, are used below to describe these
  * constraints:
  *
- * <blockquote><table>
+ * <blockquote><table class="borderless">
  * <caption style="display:none">Describes categories alpha,digit,alphanum,unreserved,punct,reserved,escaped,and other</caption>
  *   <tbody>
- *   <tr><th valign=top><i>alpha</i></th>
+ *   <tr><th style="vertical-align:top"><i>alpha</i></th>
  *       <td>The US-ASCII alphabetic characters,
  *        {@code 'A'}&nbsp;through&nbsp;{@code 'Z'}
  *        and {@code 'a'}&nbsp;through&nbsp;{@code 'z'}</td></tr>
- *   <tr><th valign=top><i>digit</i></th>
+ *   <tr><th style="vertical-align:top"><i>digit</i></th>
  *       <td>The US-ASCII decimal digit characters,
  *       {@code '0'}&nbsp;through&nbsp;{@code '9'}</td></tr>
- *   <tr><th valign=top><i>alphanum</i></th>
+ *   <tr><th style="vertical-align:top"><i>alphanum</i></th>
  *       <td>All <i>alpha</i> and <i>digit</i> characters</td></tr>
- *   <tr><th valign=top><i>unreserved</i>&nbsp;&nbsp;&nbsp;&nbsp;</th>
+ *   <tr><th style="vertical-align:top"><i>unreserved</i>&nbsp;&nbsp;&nbsp;&nbsp;</th>
  *       <td>All <i>alphanum</i> characters together with those in the string
  *        {@code "_-!.~'()*"}</td></tr>
- *   <tr><th valign=top><i>punct</i></th>
+ *   <tr><th style="vertical-align:top"><i>punct</i></th>
  *       <td>The characters in the string {@code ",;:$&+="}</td></tr>
- *   <tr><th valign=top><i>reserved</i></th>
+ *   <tr><th style="vertical-align:top"><i>reserved</i></th>
  *       <td>All <i>punct</i> characters together with those in the string
  *        {@code "?/[]@"}</td></tr>
- *   <tr><th valign=top><i>escaped</i></th>
+ *   <tr><th style="vertical-align:top"><i>escaped</i></th>
  *       <td>Escaped octets, that is, triplets consisting of the percent
  *           character ({@code '%'}) followed by two hexadecimal digits
  *           ({@code '0'}-{@code '9'}, {@code 'A'}-{@code 'F'}, and
  *           {@code 'a'}-{@code 'f'})</td></tr>
- *   <tr><th valign=top><i>other</i></th>
+ *   <tr><th style="vertical-align:top"><i>other</i></th>
  *       <td>The Unicode characters that are not in the US-ASCII character set,
  *           are not control characters (according to the {@link
  *           java.lang.Character#isISOControl(char) Character.isISOControl}
--- a/jdk/src/java.base/share/classes/java/net/doc-files/net-properties.html	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/net/doc-files/net-properties.html	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,6 @@
+<!DOCTYPE HTML>
 <!--
- Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
  This code is free software; you can redistribute it and/or modify it
@@ -22,15 +23,14 @@
  or visit www.oracle.com if you need additional information or have any
  questions.
 -->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <HTML>
 <HEAD>
 	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
 	<TITLE>Networking Properties</TITLE>
 </HEAD>
 <BODY LANG="en-US" DIR="LTR">
-<H1 ALIGN=CENTER>Networking Properties</H1>
-<P ALIGN=LEFT>There are a few standard system properties used to
+<H1 style="text-align:center">Networking Properties</H1>
+<P>There are a few standard system properties used to
 alter the mechanisms and behavior of the various classes of the
 java.net package. Some are checked only once at startup of the VM,
 and therefore are best set using the -D option of the java command,
@@ -39,7 +39,7 @@
 The purpose of this document is to list
 and detail all of these properties.</P>
 <P>If there is no special note, a property value is checked every time it is used.</P>
-<a name="Ipv4IPv6"></a>
+<a id="Ipv4IPv6"></a>
 <H2>IPv4 / IPv6</H2>
 <UL>
 	<LI><P><B>java.net.preferIPv4Stack</B> (default: false)<BR>
@@ -62,7 +62,7 @@
     returned by the operating system.</P>
 </UL>
 <P>Both of these properties are checked only once, at startup.</P>
-<a name="Proxies"></a>
+<a id="Proxies"></a>
 <H2>Proxies</H2>
 <P>A proxy server allows indirect connection to network services and
 is used mainly for security (to get through firewalls) and
@@ -155,7 +155,7 @@
 	globally through their user interface). Note that this property is
 	checked only once at startup.</P>
 </UL>
-<a name="MiscHTTP"></a>
+<a id="MiscHTTP"></a>
 <H2>Misc HTTP properties</H2>
 <UL>
 	<LI><P><B>http.agent</B> (default: &ldquo;Java/&lt;version&gt;&rdquo;)<BR>
@@ -214,7 +214,7 @@
 	</OL>
 </UL>
 <P>All these properties are checked only once at startup.</P>
-<a name="AddressCache"></a>
+<a id="AddressCache"></a>
 <H2>Address Cache</H2>
 <P>The java.net package, when doing name resolution, uses an address
 cache for both security and performance reasons. Any address
--- a/jdk/src/java.base/share/classes/java/nio/channels/package-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/nio/channels/package-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,33 +28,46 @@
  * performing I/O operations, such as files and sockets; defines selectors, for
  * multiplexed, non-blocking I/O operations.
  *
- * <a name="channels"></a>
+ * <a id="channels"></a>
  *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Lists channels and their descriptions">
- * <tr><th align="left">Channels</th><th align="left">Description</th></tr>
- * <tr><td valign=top><i>{@link java.nio.channels.Channel}</i></td>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">Lists channels and their descriptions</caption>
+ * <tr><th style="text-align:left">Channels</th>
+ *     <th style="text-align:left">Description</th></tr>
+ * <tr><td style="vertical-align:top"><i>{@link java.nio.channels.Channel}</i></td>
  *     <td>A nexus for I/O operations</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.channels.ReadableByteChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.channels.ReadableByteChannel}</i></td>
  *     <td>Can read into a buffer</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.ScatteringByteChannel}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.ScatteringByteChannel}&nbsp;&nbsp;</i></td>
  *     <td>Can read into a sequence of&nbsp;buffers</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.channels.WritableByteChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.channels.WritableByteChannel}</i></td>
  *     <td>Can write from a buffer</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.GatheringByteChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.GatheringByteChannel}</i></td>
  *     <td>Can write from a sequence of&nbsp;buffers</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.channels.ByteChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.channels.ByteChannel}</i></td>
  *     <td>Can read/write to/from a&nbsp;buffer</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.SeekableByteChannel}</i></td>
- *     <td>A {@code ByteChannel} connected to an entity that contains a variable-length sequence of bytes</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.channels.AsynchronousChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.SeekableByteChannel}</i></td>
+ *     <td>A {@code ByteChannel} connected to an entity that contains a variable-length
+ *         sequence of bytes</td></tr>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.channels.AsynchronousChannel}</i></td>
  *     <td>Supports asynchronous I/O operations.</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.AsynchronousByteChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.AsynchronousByteChannel}</i></td>
  *     <td>Can read and write bytes asynchronously</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.channels.NetworkChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.channels.NetworkChannel}</i></td>
  *     <td>A channel to a network socket</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.MulticastChannel}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.MulticastChannel}</i></td>
  *     <td>Can join Internet Protocol (IP) multicast groups</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.Channels}</td>
+ * <tr><td style="vertical-align:top">{@link java.nio.channels.Channels}</td>
  *     <td>Utility methods for channel/stream interoperation</td></tr>
  * </table></blockquote>
  *
@@ -109,13 +122,19 @@
  * be constructed that uses a given charset to encode characters into bytes and
  * write them to a given writable byte channel.
  *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Lists file channels and their descriptions">
- * <tr><th align="left">File channels</th><th align="left">Description</th></tr>
- * <tr><td valign=top>{@link java.nio.channels.FileChannel}</td>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">
+ *         Lists file channels and their descriptions</caption>
+ * <tr><th style="text-align:left">File channels</th>
+ *     <th style="text-align:left">Description</th></tr>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.FileChannel}</td>
  *     <td>Reads, writes, maps, and manipulates files</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.FileLock}</td>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.FileLock}</td>
  *     <td>A lock on a (region of a) file</td></tr>
- * <tr><td valign=top>{@link java.nio.MappedByteBuffer}&nbsp;&nbsp;</td>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.MappedByteBuffer}&nbsp;&nbsp;</td>
  *     <td>A direct byte buffer mapped to a region of a&nbsp;file</td></tr>
  * </table></blockquote>
  *
@@ -136,27 +155,35 @@
  * file channel connected to the same underlying file as the {@link java.io}
  * class.
  *
- * <a name="multiplex"></a>
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Lists multiplexed, non-blocking channels and their descriptions">
- * <tr><th align="left">Multiplexed, non-blocking I/O</th><th align="left"><p>Description</th></tr>
- * <tr><td valign=top>{@link java.nio.channels.SelectableChannel}</td>
+ * <a id="multiplex"></a>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">
+ *         Lists multiplexed, non-blocking channels and their descriptions</caption>
+ * <tr><th style="text-align:left">Multiplexed, non-blocking I/O</th>
+ *     <th style="text-align:left">Description</th></tr>
+ * <tr><td style="vertical-align:top">{@link java.nio.channels.SelectableChannel}</td>
  *     <td>A channel that can be multiplexed</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.channels.DatagramChannel}</td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;{@link java.nio.channels.DatagramChannel}</td>
  *     <td>A channel to a datagram-oriented socket</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.channels.Pipe.SinkChannel}</td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;{@link java.nio.channels.Pipe.SinkChannel}</td>
  *     <td>The write end of a pipe</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.channels.Pipe.SourceChannel}</td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;{@link java.nio.channels.Pipe.SourceChannel}</td>
  *     <td>The read end of a pipe</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.channels.ServerSocketChannel}&nbsp;&nbsp;</td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;{@link java.nio.channels.ServerSocketChannel}&nbsp;&nbsp;</td>
  *     <td>A channel to a stream-oriented listening socket</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.channels.SocketChannel}</td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;{@link java.nio.channels.SocketChannel}</td>
  *     <td>A channel for a stream-oriented connecting socket</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.Selector}</td>
+ * <tr><td style="vertical-align:top">{@link java.nio.channels.Selector}</td>
  *     <td>A multiplexor of selectable channels</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.SelectionKey}</td>
+ * <tr><td style="vertical-align:top">{@link java.nio.channels.SelectionKey}</td>
  *     <td>A token representing the registration <br> of a channel
  *     with&nbsp;a&nbsp;selector</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.Pipe}</td>
+ * <tr><td style="vertical-align:top">{@link java.nio.channels.Pipe}</td>
  *     <td>Two channels that form a unidirectional&nbsp;pipe</td></tr>
  * </table></blockquote>
  *
@@ -222,19 +249,27 @@
  * directly; custom channel classes should extend the appropriate {@link
  * java.nio.channels.SelectableChannel} subclasses defined in this package.
  *
- * <a name="async"></a>
+ * <a id="async"></a>
  *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Lists asynchronous channels and their descriptions">
- * <tr><th align="left">Asynchronous I/O</th><th align="left">Description</th></tr>
- * <tr><td valign=top>{@link java.nio.channels.AsynchronousFileChannel}</td>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">
+ *         Lists asynchronous channels and their descriptions</caption>
+ * <tr><th style="text-align:left">
+ *     Asynchronous I/O</th><th style="text-align:left">Description</th></tr>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.AsynchronousFileChannel}</td>
  *     <td>An asynchronous channel for reading, writing, and manipulating a file</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.AsynchronousSocketChannel}</td>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.AsynchronousSocketChannel}</td>
  *     <td>An asynchronous channel to a stream-oriented connecting socket</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.AsynchronousServerSocketChannel}&nbsp;&nbsp;</td>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.AsynchronousServerSocketChannel}&nbsp;&nbsp;</td>
  *     <td>An asynchronous channel to a stream-oriented listening socket</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.CompletionHandler}</td>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.CompletionHandler}</td>
  *     <td>A handler for consuming the result of an asynchronous operation</td></tr>
- * <tr><td valign=top>{@link java.nio.channels.AsynchronousChannelGroup}</td>
+ * <tr><td style="vertical-align:top">
+ *     {@link java.nio.channels.AsynchronousChannelGroup}</td>
  *     <td>A grouping of asynchronous channels for the purpose of resource sharing</td></tr>
  * </table></blockquote>
  *
@@ -277,7 +312,6 @@
  * so that sophisticated users can take advantage of operating-system-specific
  * asynchronous I/O mechanisms when very high performance is required.
  *
- * <hr width="80%">
  * <p> Unless otherwise noted, passing a {@code null} argument to a constructor
  * or method in any class or interface in this package will cause a {@link
  * java.lang.NullPointerException NullPointerException} to be thrown.
--- a/jdk/src/java.base/share/classes/java/nio/charset/package-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/nio/charset/package-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,17 +27,19 @@
  * Defines charsets, decoders, and encoders, for translating between
  * bytes and Unicode characters.
  *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Summary of charsets, decoders, and encoders in this package">
- *  <tr><th align="left">Class name</th><th align="left">Description</th></tr>
- *   <tr><td valign=top>{@link java.nio.charset.Charset}</td>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">Summary of charsets, decoders, and encoders in this package</caption>
+ *  <tr><th style="text-align:left">Class name</th>
+ *      <th style="text-align:left"><th>DescriptiPath
+ *   <tr><td style="vertical-align:top">{@link java.nio.charset.Charset}</td>
  *       <td>A named mapping between characters<br>and bytes</td></tr>
- *   <tr><td valign=top>{@link java.nio.charset.CharsetDecoder}</td>
+ *   <tr><td style="vertical-align:top">{@link java.nio.charset.CharsetDecoder}</td>
  *       <td>Decodes bytes into characters</td></tr>
- *   <tr><td valign=top>{@link java.nio.charset.CharsetEncoder}&nbsp;&nbsp;</td>
+ *   <tr><td style="vertical-align:top">{@link java.nio.charset.CharsetEncoder}</td>
  *       <td>Encodes characters into bytes</td></tr>
- *   <tr><td valign=top>{@link java.nio.charset.CoderResult}&nbsp;&nbsp;</td>
+ *   <tr><td style="vertical-align:top">{@link java.nio.charset.CoderResult}</td>
  *       <td>Describes coder results</td></tr>
- *   <tr><td valign=top>{@link java.nio.charset.CodingErrorAction}&nbsp;&nbsp;</td>
+ *   <tr><td style="vertical-align:top">{@link java.nio.charset.CodingErrorAction}</td>
  *       <td>Describes actions to take when<br>coding errors are detected</td></tr>
  *
  * </table></blockquote>
--- a/jdk/src/java.base/share/classes/java/nio/file/attribute/package-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/nio/file/attribute/package-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,25 +26,41 @@
 /**
  * Interfaces and classes providing access to file and file system attributes.
  *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Attribute views">
- * <tr><th align="left">Attribute views</th><th align="left">Description</th></tr>
- * <tr><td valign=top><i>{@link java.nio.file.attribute.AttributeView}</i></td>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">Attribute views</caption>
+ * <tr><th style="text-align:left">Attribute views</th>
+ *     <th style="text-align:left">Description</th></tr>
+ * <tr><td><i>{@link java.nio.file.attribute.AttributeView}</i></td>
  *     <td>Can read or update non-opaque values associated with objects in a file system</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.file.attribute.FileAttributeView}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.file.attribute.FileAttributeView}</i></td>
  *     <td>Can read or update file attributes</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.BasicFileAttributeView}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;
+ *     <i>{@link java.nio.file.attribute.BasicFileAttributeView}&nbsp;&nbsp;</i></td>
  *     <td>Can read or update a basic set of file attributes</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.PosixFileAttributeView}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ *     <i>{@link java.nio.file.attribute.PosixFileAttributeView}&nbsp;&nbsp;</i></td>
  *     <td>Can read or update POSIX defined file attributes</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.DosFileAttributeView}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ *     <i>{@link java.nio.file.attribute.DosFileAttributeView}&nbsp;&nbsp;</i></td>
  *     <td>Can read or update FAT file attributes</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.FileOwnerAttributeView}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;
+ *     <i>{@link java.nio.file.attribute.FileOwnerAttributeView}&nbsp;&nbsp;</i></td>
  *     <td>Can read or update the owner of a file</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.AclFileAttributeView}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ *     <i>{@link java.nio.file.attribute.AclFileAttributeView}&nbsp;&nbsp;</i></td>
  *     <td>Can read or update Access Control Lists</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.UserDefinedFileAttributeView}&nbsp;&nbsp;</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;&nbsp;&nbsp;
+ *     <i>{@link java.nio.file.attribute.UserDefinedFileAttributeView}&nbsp;&nbsp;</i></td>
  *     <td>Can read or update user-defined file attributes</td></tr>
- * <tr><td valign=top>&nbsp;&nbsp;<i>{@link java.nio.file.attribute.FileStoreAttributeView}</i></td>
+ * <tr><td style="vertical-align:top">
+ *     &nbsp;&nbsp;<i>{@link java.nio.file.attribute.FileStoreAttributeView}</i></td>
  *     <td>Can read or update file system attributes</td></tr>
  * </table></blockquote>
  *
--- a/jdk/src/java.base/share/classes/java/nio/file/package-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/nio/file/package-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,7 +33,7 @@
  * package is used by service provider implementors wishing to extend the
  * platform default provider, or to construct other provider implementations. </p>
  *
- * <h3><a name="links">Symbolic Links</a></h3>
+ * <h3><a id="links">Symbolic Links</a></h3>
  * <p> Many operating systems and file systems support for <em>symbolic links</em>.
  * A symbolic link is a special file that serves as a reference to another file.
  * For the most part, symbolic links are transparent to applications and
@@ -45,7 +45,7 @@
  * that are semantically close but support for these other types of links is
  * not included in this package. </p>
  *
- * <h3><a name="interop">Interoperability</a></h3>
+ * <h3><a id="interop">Interoperability</a></h3>
  * <p> The {@link java.io.File} class defines the {@link java.io.File#toPath
  * toPath} method to construct a {@link java.nio.file.Path} by converting
  * the abstract path represented by the {@code java.io.File} object. The resulting
@@ -65,7 +65,7 @@
  * or on some other machine.  The exact nature of any such inconsistencies are
  * system-dependent and are therefore unspecified. </p>
  *
- * <h3><a name="integrity">Synchronized I/O File Integrity</a></h3>
+ * <h3><a id="integrity">Synchronized I/O File Integrity</a></h3>
  * <p> The {@link java.nio.file.StandardOpenOption#SYNC SYNC} and {@link
  * java.nio.file.StandardOpenOption#DSYNC DSYNC} options are used when opening a file
  * to require that updates to the file are written synchronously to the underlying
--- a/jdk/src/java.base/share/classes/java/nio/package-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/nio/package-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -60,30 +60,33 @@
  * the contents of which can be used to extend the platform's default
  * implementations or to construct alternative implementations.
  *
- * <a name="buffers"> </a>
+ * <a id="buffers"> </a>
  *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Description of the various buffers">
- *   <tr><th align="left">Buffers</th><th align="left">Description</th></tr>
- *   <tr><td valign=top>{@link java.nio.Buffer}</td>
+ * <blockquote><table class="borderless">
+ *     <caption style="display:none">Description of the various buffers</caption>
+ *   <tr><th style="text-align:left">Buffers</th>
+ *       <th style="text-align:left">Description</th></tr>
+ *   <tr><td style="vertical-align:top">{@link java.nio.Buffer}</td>
  *       <td>Position, limit, and capacity;
  *           <br>clear, flip, rewind, and mark/reset</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.ByteBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.ByteBuffer}</td>
  *       <td>Get/put, compact, views; allocate,&nbsp;wrap</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;&nbsp;&nbsp;{@link java.nio.MappedByteBuffer}&nbsp;&nbsp;</td>
+ *   <tr><td style="vertical-align:top">
+ *       &nbsp;&nbsp;&nbsp;&nbsp;{@link java.nio.MappedByteBuffer}&nbsp;&nbsp;</td>
  *       <td>A byte buffer mapped to a file</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.CharBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.CharBuffer}</td>
  *       <td>Get/put, compact; allocate,&nbsp;wrap</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.DoubleBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.DoubleBuffer}</td>
  *       <td>&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;'</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.FloatBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.FloatBuffer}</td>
  *       <td>&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;'</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.IntBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.IntBuffer}</td>
  *       <td>&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;'</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.LongBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.LongBuffer}</td>
  *       <td>&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;'</td></tr>
- *   <tr><td valign=top>&nbsp;&nbsp;{@link java.nio.ShortBuffer}</td>
+ *   <tr><td style="vertical-align:top">&nbsp;&nbsp;{@link java.nio.ShortBuffer}</td>
  *       <td>&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;'</td></tr>
- *   <tr><td valign=top>{@link java.nio.ByteOrder}</td>
+ *   <tr><td style="vertical-align:top">{@link java.nio.ByteOrder}</td>
  *       <td>Typesafe enumeration for&nbsp;byte&nbsp;orders</td></tr>
  * </table></blockquote>
  *
--- a/jdk/src/java.base/share/classes/java/security/AccessControlContext.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/AccessControlContext.java	Wed Jul 05 23:40:06 2017 +0200
@@ -74,6 +74,7 @@
  * @see AccessController
  *
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class AccessControlContext {
--- a/jdk/src/java.base/share/classes/java/security/AccessControlException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/AccessControlException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -38,6 +38,7 @@
  *
  * @author Li Gong
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public class AccessControlException extends SecurityException {
--- a/jdk/src/java.base/share/classes/java/security/AccessController.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/AccessController.java	Wed Jul 05 23:40:06 2017 +0200
@@ -259,6 +259,7 @@
  *
  * @author Li Gong
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class AccessController {
--- a/jdk/src/java.base/share/classes/java/security/AlgorithmParameterGenerator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/AlgorithmParameterGenerator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -61,11 +61,17 @@
  * </ul>
  *
  * <P>In case the client does not explicitly initialize the
- * AlgorithmParameterGenerator
- * (via a call to an {@code init} method), each provider must supply (and
- * document) a default initialization. For example, the Sun provider uses a
- * default modulus prime size of 1024 bits for the generation of DSA
- * parameters.
+ * AlgorithmParameterGenerator (via a call to an {@code init} method),
+ * each provider must supply (and document) a default initialization.
+ * See the Keysize Restriction sections of the
+ * <a href="{@docRoot}/../technotes/guides/security/SunProviders.html">
+ * JDK Providers</a>
+ * document for information on the AlgorithmParameterGenerator defaults
+ * used by JDK providers.
+ * However, note that defaults may vary across different providers.
+ * Additionally, the default value for a provider may change in a future
+ * version. Therefore, it is recommended to explicitly initialize the
+ * AlgorithmParameterGenerator instead of relying on provider-specific defaults.
  *
  * <p> Every implementation of the Java platform is required to support the
  * following standard {@code AlgorithmParameterGenerator} algorithms and
--- a/jdk/src/java.base/share/classes/java/security/AlgorithmParameterGeneratorSpi.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/AlgorithmParameterGeneratorSpi.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,8 +39,15 @@
  * <p> In case the client does not explicitly initialize the
  * AlgorithmParameterGenerator (via a call to an {@code engineInit}
  * method), each provider must supply (and document) a default initialization.
- * For example, the Sun provider uses a default modulus prime size of 1024
- * bits for the generation of DSA parameters.
+ * See the Keysize Restriction sections of the
+ * <a href="{@docRoot}/../technotes/guides/security/SunProviders.html">
+ * JDK Providers</a>
+ * document for information on the AlgorithmParameterGenerator defaults
+ * used by JDK providers.
+ * However, note that defaults may vary across different providers.
+ * Additionally, the default value for a provider may change in a future
+ * version. Therefore, it is recommended to explicitly initialize the
+ * AlgorithmParameterGenerator instead of relying on provider-specific defaults.
  *
  * @author Jan Luehe
  *
--- a/jdk/src/java.base/share/classes/java/security/AllPermission.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/AllPermission.java	Wed Jul 05 23:40:06 2017 +0200
@@ -51,6 +51,7 @@
  *
  *
  * @author Roland Schemers
+ * @since 1.2
  *
  * @serial exclude
  */
--- a/jdk/src/java.base/share/classes/java/security/BasicPermission.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/BasicPermission.java	Wed Jul 05 23:40:06 2017 +0200
@@ -62,6 +62,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public abstract class BasicPermission extends Permission
--- a/jdk/src/java.base/share/classes/java/security/Certificate.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Certificate.java	Wed Jul 05 23:40:06 2017 +0200
@@ -56,6 +56,7 @@
  * the certificate and satisfy itself of its validity.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  * @deprecated A new certificate handling package is created in the Java platform.
  *             This Certificate interface is entirely deprecated and
  *             is here to allow for a smooth transition to the new
--- a/jdk/src/java.base/share/classes/java/security/CodeSource.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/CodeSource.java	Wed Jul 05 23:40:06 2017 +0200
@@ -44,6 +44,7 @@
  *
  * @author Li Gong
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public class CodeSource implements java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/DigestException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/DigestException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * This is the generic Message Digest exception.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 public class DigestException extends GeneralSecurityException {
 
--- a/jdk/src/java.base/share/classes/java/security/DigestInputStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/DigestInputStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -59,6 +59,7 @@
  * @see DigestOutputStream
  *
  * @author Benjamin Renaud
+ * @since 1.2
  */
 
 public class DigestInputStream extends FilterInputStream {
--- a/jdk/src/java.base/share/classes/java/security/DigestOutputStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/DigestOutputStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -51,6 +51,7 @@
  * @see DigestInputStream
  *
  * @author Benjamin Renaud
+ * @since 1.2
  */
 public class DigestOutputStream extends FilterOutputStream {
 
--- a/jdk/src/java.base/share/classes/java/security/GeneralSecurityException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/GeneralSecurityException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * security-related exception classes that extend from it.
  *
  * @author Jan Luehe
+ * @since 1.2
  */
 
 public class GeneralSecurityException extends Exception {
--- a/jdk/src/java.base/share/classes/java/security/Guard.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Guard.java	Wed Jul 05 23:40:06 2017 +0200
@@ -38,6 +38,7 @@
  *
  * @author Roland Schemers
  * @author Li Gong
+ * @since 1.2
  */
 
 public interface Guard {
--- a/jdk/src/java.base/share/classes/java/security/GuardedObject.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/GuardedObject.java	Wed Jul 05 23:40:06 2017 +0200
@@ -44,6 +44,7 @@
  *
  * @author Roland Schemers
  * @author Li Gong
+ * @since 1.2
  */
 
 public class GuardedObject implements java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/Identity.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Identity.java	Wed Jul 05 23:40:06 2017 +0200
@@ -51,6 +51,7 @@
  * @see Principal
  *
  * @author Benjamin Renaud
+ * @since 1.1
  * @deprecated This class is no longer used. Its functionality has been
  * replaced by {@code java.security.KeyStore}, the
  * {@code java.security.cert} package, and
--- a/jdk/src/java.base/share/classes/java/security/IdentityScope.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/IdentityScope.java	Wed Jul 05 23:40:06 2017 +0200
@@ -55,6 +55,7 @@
  * @see Key
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  * @deprecated This class is no longer used. Its functionality has been
  * replaced by {@code java.security.KeyStore}, the
--- a/jdk/src/java.base/share/classes/java/security/InvalidKeyException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/InvalidKeyException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * length, uninitialized, etc).
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class InvalidKeyException extends KeyException {
--- a/jdk/src/java.base/share/classes/java/security/InvalidParameterException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/InvalidParameterException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * to a method.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class InvalidParameterException extends IllegalArgumentException {
--- a/jdk/src/java.base/share/classes/java/security/Key.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Key.java	Wed Jul 05 23:40:06 2017 +0200
@@ -97,6 +97,7 @@
  * @see Signer
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public interface Key extends java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/KeyException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/KeyException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -33,6 +33,7 @@
  * @see KeyManagementException
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class KeyException extends GeneralSecurityException {
--- a/jdk/src/java.base/share/classes/java/security/KeyManagementException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/KeyManagementException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -38,6 +38,7 @@
  * </ul>
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  * @see Key
  * @see KeyException
--- a/jdk/src/java.base/share/classes/java/security/KeyPair.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/KeyPair.java	Wed Jul 05 23:40:06 2017 +0200
@@ -36,6 +36,7 @@
  * @see PrivateKey
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public final class KeyPair implements java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/KeyPairGenerator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/KeyPairGenerator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -95,8 +95,15 @@
  * <p>In case the client does not explicitly initialize the KeyPairGenerator
  * (via a call to an {@code initialize} method), each provider must
  * supply (and document) a default initialization.
- * For example, the <i>Sun</i> provider uses a default modulus size (keysize)
- * of 1024 bits for DSA key pairs.
+ * See the Keysize Restriction sections of the
+ * <a href="{@docRoot}/../technotes/guides/security/SunProviders.html">
+ * JDK Providers</a>
+ * document for information on the KeyPairGenerator defaults used by
+ * JDK providers.
+ * However, note that defaults may vary across different providers.
+ * Additionally, the default value for a provider may change in a future
+ * version. Therefore, it is recommended to explicitly initialize the
+ * KeyPairGenerator instead of relying on provider-specific defaults.
  *
  * <p>Note that this class is abstract and extends from
  * {@code KeyPairGeneratorSpi} for historical reasons.
@@ -121,6 +128,7 @@
  * other algorithms are supported.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  * @see java.security.spec.AlgorithmParameterSpec
  */
--- a/jdk/src/java.base/share/classes/java/security/KeyPairGeneratorSpi.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/KeyPairGeneratorSpi.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,10 +39,18 @@
  * <p> In case the client does not explicitly initialize the KeyPairGenerator
  * (via a call to an {@code initialize} method), each provider must
  * supply (and document) a default initialization.
- * For example, the <i>Sun</i> provider uses a default modulus size (keysize)
- * of 1024 bits.
+ * See the Keysize Restriction sections of the
+ * <a href="{@docRoot}/../technotes/guides/security/SunProviders.html">
+ * JDK Providers</a>
+ * document for information on the KeyPairGenerator defaults used by
+ * JDK providers.
+ * However, note that defaults may vary across different providers.
+ * Additionally, the default value for a provider may change in a future
+ * version. Therefore, it is recommended to explicitly initialize the
+ * KeyPairGenerator instead of relying on provider-specific defaults.
  *
  * @author Benjamin Renaud
+ * @since 1.2
  *
  *
  * @see KeyPairGenerator
--- a/jdk/src/java.base/share/classes/java/security/MessageDigest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/MessageDigest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -96,6 +96,7 @@
  * other algorithms are supported.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  * @see DigestInputStream
  * @see DigestOutputStream
--- a/jdk/src/java.base/share/classes/java/security/MessageDigestSpi.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/MessageDigestSpi.java	Wed Jul 05 23:40:06 2017 +0200
@@ -43,6 +43,7 @@
  * <p> Implementations are free to implement the Cloneable interface.
  *
  * @author Benjamin Renaud
+ * @since 1.2
  *
  *
  * @see MessageDigest
--- a/jdk/src/java.base/share/classes/java/security/NoSuchAlgorithmException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/NoSuchAlgorithmException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,7 @@
  * requested but is not available in the environment.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class NoSuchAlgorithmException extends GeneralSecurityException {
--- a/jdk/src/java.base/share/classes/java/security/NoSuchProviderException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/NoSuchProviderException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,7 @@
  * requested but is not available in the environment.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class NoSuchProviderException extends GeneralSecurityException {
--- a/jdk/src/java.base/share/classes/java/security/Permission.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Permission.java	Wed Jul 05 23:40:06 2017 +0200
@@ -60,6 +60,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public abstract class Permission implements Guard, java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/PermissionCollection.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/PermissionCollection.java	Wed Jul 05 23:40:06 2017 +0200
@@ -91,6 +91,7 @@
  *
  *
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public abstract class PermissionCollection implements java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/Permissions.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Permissions.java	Wed Jul 05 23:40:06 2017 +0200
@@ -75,6 +75,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  *
  * @serial exclude
  */
--- a/jdk/src/java.base/share/classes/java/security/Policy.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Policy.java	Wed Jul 05 23:40:06 2017 +0200
@@ -78,6 +78,7 @@
  *
  * @author Roland Schemers
  * @author Gary Ellison
+ * @since 1.2
  * @see java.security.Provider
  * @see java.security.ProtectionDomain
  * @see java.security.Permission
--- a/jdk/src/java.base/share/classes/java/security/Principal.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Principal.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  * @see java.security.cert.X509Certificate
  *
  * @author Li Gong
+ * @since 1.1
  */
 public interface Principal {
 
--- a/jdk/src/java.base/share/classes/java/security/PrivateKey.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/PrivateKey.java	Wed Jul 05 23:40:06 2017 +0200
@@ -54,6 +54,7 @@
  *
  * @author Benjamin Renaud
  * @author Josh Bloch
+ * @since 1.1
  */
 
 public interface PrivateKey extends Key, javax.security.auth.Destroyable {
--- a/jdk/src/java.base/share/classes/java/security/PrivilegedAction.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/PrivilegedAction.java	Wed Jul 05 23:40:06 2017 +0200
@@ -34,6 +34,7 @@
  * throw checked exceptions must use {@code PrivilegedExceptionAction}
  * instead.
  *
+ * @since 1.2
  * @see AccessController
  * @see AccessController#doPrivileged(PrivilegedAction)
  * @see PrivilegedExceptionAction
--- a/jdk/src/java.base/share/classes/java/security/PrivilegedActionException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/PrivilegedActionException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -43,6 +43,7 @@
  * <i>cause</i>, and may be accessed via the {@link Throwable#getCause()}
  * method, as well as the aforementioned "legacy method."
  *
+ * @since 1.2
  * @see PrivilegedExceptionAction
  * @see AccessController#doPrivileged(PrivilegedExceptionAction)
  * @see AccessController#doPrivileged(PrivilegedExceptionAction,AccessControlContext)
--- a/jdk/src/java.base/share/classes/java/security/PrivilegedExceptionAction.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/PrivilegedExceptionAction.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  * computations that do not throw
  * checked exceptions should use {@code PrivilegedAction} instead.
  *
+ * @since 1.2
  * @see AccessController
  * @see AccessController#doPrivileged(PrivilegedExceptionAction)
  * @see AccessController#doPrivileged(PrivilegedExceptionAction,
--- a/jdk/src/java.base/share/classes/java/security/ProtectionDomain.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/ProtectionDomain.java	Wed Jul 05 23:40:06 2017 +0200
@@ -59,6 +59,7 @@
  * @author Li Gong
  * @author Roland Schemers
  * @author Gary Ellison
+ * @since 1.2
  */
 
 public class ProtectionDomain {
--- a/jdk/src/java.base/share/classes/java/security/Provider.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Provider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -102,6 +102,7 @@
  *
  * @author Benjamin Renaud
  * @author Andreas Sterbenz
+ * @since 1.1
  */
 public abstract class Provider extends Properties {
 
--- a/jdk/src/java.base/share/classes/java/security/ProviderException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/ProviderException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,6 +32,7 @@
  * throw specialized, provider-specific runtime errors.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 public class ProviderException extends RuntimeException {
 
--- a/jdk/src/java.base/share/classes/java/security/PublicKey.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/PublicKey.java	Wed Jul 05 23:40:06 2017 +0200
@@ -34,6 +34,7 @@
  * See, for example, the DSAPublicKey interface in
  * {@code java.security.interfaces}.
  *
+ * @since 1.1
  * @see Key
  * @see PrivateKey
  * @see Certificate
--- a/jdk/src/java.base/share/classes/java/security/SecureClassLoader.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/SecureClassLoader.java	Wed Jul 05 23:40:06 2017 +0200
@@ -39,6 +39,7 @@
  *
  * @author  Li Gong
  * @author  Roland Schemers
+ * @since 1.2
  */
 public class SecureClassLoader extends ClassLoader {
     /*
--- a/jdk/src/java.base/share/classes/java/security/SecureRandom.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/SecureRandom.java	Wed Jul 05 23:40:06 2017 +0200
@@ -143,6 +143,7 @@
  *
  * @author Benjamin Renaud
  * @author Josh Bloch
+ * @since 1.1
  */
 
 public class SecureRandom extends java.util.Random {
--- a/jdk/src/java.base/share/classes/java/security/Security.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Security.java	Wed Jul 05 23:40:06 2017 +0200
@@ -45,6 +45,7 @@
  * {@code conf/security/java.security} in the Java installation directory.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public final class Security {
--- a/jdk/src/java.base/share/classes/java/security/SecurityPermission.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/SecurityPermission.java	Wed Jul 05 23:40:06 2017 +0200
@@ -333,6 +333,7 @@
  *
  * @author Marianne Mueller
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class SecurityPermission extends BasicPermission {
--- a/jdk/src/java.base/share/classes/java/security/Signature.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Signature.java	Wed Jul 05 23:40:06 2017 +0200
@@ -113,6 +113,7 @@
  * other algorithms are supported.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  */
 
--- a/jdk/src/java.base/share/classes/java/security/SignatureException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/SignatureException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * This is the generic Signature exception.
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 
 public class SignatureException extends GeneralSecurityException {
--- a/jdk/src/java.base/share/classes/java/security/SignatureSpi.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/SignatureSpi.java	Wed Jul 05 23:40:06 2017 +0200
@@ -44,6 +44,7 @@
  * of a particular signature algorithm.
  *
  * @author Benjamin Renaud
+ * @since 1.2
  *
  *
  * @see Signature
--- a/jdk/src/java.base/share/classes/java/security/SignedObject.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/SignedObject.java	Wed Jul 05 23:40:06 2017 +0200
@@ -114,6 +114,7 @@
  * @see Signature
  *
  * @author Li Gong
+ * @since 1.2
  */
 
 public final class SignedObject implements Serializable {
--- a/jdk/src/java.base/share/classes/java/security/Signer.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Signer.java	Wed Jul 05 23:40:06 2017 +0200
@@ -38,6 +38,7 @@
  * @see Identity
  *
  * @author Benjamin Renaud
+ * @since 1.1
  *
  * @deprecated This class is no longer used. Its functionality has been
  * replaced by {@code java.security.KeyStore}, the
--- a/jdk/src/java.base/share/classes/java/security/UnresolvedPermission.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/UnresolvedPermission.java	Wed Jul 05 23:40:06 2017 +0200
@@ -96,6 +96,7 @@
  *
  *
  * @author Roland Schemers
+ * @since 1.2
  */
 
 public final class UnresolvedPermission extends Permission
--- a/jdk/src/java.base/share/classes/java/security/UnresolvedPermissionCollection.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/UnresolvedPermissionCollection.java	Wed Jul 05 23:40:06 2017 +0200
@@ -43,6 +43,7 @@
  *
  *
  * @author Roland Schemers
+ * @since 1.2
  *
  * @serial include
  */
--- a/jdk/src/java.base/share/classes/java/security/acl/Acl.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/Acl.java	Wed Jul 05 23:40:06 2017 +0200
@@ -82,6 +82,7 @@
  * @see java.security.acl.Acl#getPermissions
  *
  * @author Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/jdk/src/java.base/share/classes/java/security/acl/AclEntry.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/AclEntry.java	Wed Jul 05 23:40:06 2017 +0200
@@ -50,6 +50,7 @@
  * @see java.security.acl.Acl
  *
  * @author      Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/jdk/src/java.base/share/classes/java/security/acl/AclNotFoundException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/AclNotFoundException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,7 @@
  * non-existent ACL (Access Control List).
  *
  * @author      Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/jdk/src/java.base/share/classes/java/security/acl/Group.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/Group.java	Wed Jul 05 23:40:06 2017 +0200
@@ -39,6 +39,7 @@
  * Principal or Group.
  *
  * @author      Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/jdk/src/java.base/share/classes/java/security/acl/LastOwnerException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/LastOwnerException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,6 +32,7 @@
  * @see java.security.acl.Owner#deleteOwner
  *
  * @author Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/jdk/src/java.base/share/classes/java/security/acl/NotOwnerException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/NotOwnerException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * the object, but the Principal attempting the modification is not an owner.
  *
  * @author      Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/jdk/src/java.base/share/classes/java/security/acl/Owner.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/Owner.java	Wed Jul 05 23:40:06 2017 +0200
@@ -34,6 +34,7 @@
  * interface.) The initial owner Principal should be specified as an
  * argument to the constructor of the class implementing this interface.
  *
+ * @since 1.1
  * @see java.security.acl.Acl
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
--- a/jdk/src/java.base/share/classes/java/security/acl/Permission.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/Permission.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * a particular type of access to a resource.
  *
  * @author Satish Dharmaraj
+ * @since 1.1
  *
  * @deprecated This package has been replaced by {@code java.security.Policy}
  *      and related classes since 1.2.
--- a/jdk/src/java.base/share/classes/java/security/cert/CRLException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/CRLException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * CRL (Certificate Revocation List) Exception.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CRLException extends GeneralSecurityException {
 
--- a/jdk/src/java.base/share/classes/java/security/cert/Certificate.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/Certificate.java	Wed Jul 05 23:40:06 2017 +0200
@@ -57,6 +57,7 @@
  * @see CertificateFactory
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 
 public abstract class Certificate implements java.io.Serializable {
--- a/jdk/src/java.base/share/classes/java/security/cert/CertificateEncodingException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateEncodingException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,7 @@
  * occurs while attempting to encode a certificate.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CertificateEncodingException extends CertificateException {
 
--- a/jdk/src/java.base/share/classes/java/security/cert/CertificateException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * This exception indicates one of a variety of certificate problems.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  * @see Certificate
  */
 public class CertificateException extends GeneralSecurityException {
--- a/jdk/src/java.base/share/classes/java/security/cert/CertificateExpiredException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateExpiredException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,6 +32,7 @@
  * of the certificate.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CertificateExpiredException extends CertificateException {
 
--- a/jdk/src/java.base/share/classes/java/security/cert/CertificateNotYetValidException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateNotYetValidException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,6 +32,7 @@
  * validity period.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CertificateNotYetValidException extends CertificateException {
 
--- a/jdk/src/java.base/share/classes/java/security/cert/CertificateParsingException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateParsingException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * are found in the Certificate.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 public class CertificateParsingException extends CertificateException {
 
--- a/jdk/src/java.base/share/classes/java/security/cert/X509CRL.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/X509CRL.java	Wed Jul 05 23:40:06 2017 +0200
@@ -103,6 +103,7 @@
  * }</pre>
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  *
  *
  * @see CRL
--- a/jdk/src/java.base/share/classes/java/security/cert/X509CRLEntry.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/X509CRLEntry.java	Wed Jul 05 23:40:06 2017 +0200
@@ -62,6 +62,7 @@
  * @see X509Extension
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 
 public abstract class X509CRLEntry implements X509Extension {
--- a/jdk/src/java.base/share/classes/java/security/cert/X509Certificate.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/X509Certificate.java	Wed Jul 05 23:40:06 2017 +0200
@@ -95,6 +95,7 @@
  * </pre>
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  *
  *
  * @see Certificate
--- a/jdk/src/java.base/share/classes/java/security/cert/X509Extension.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/X509Extension.java	Wed Jul 05 23:40:06 2017 +0200
@@ -65,6 +65,7 @@
  * be handled by a <em>Class</em> that understands the extension.
  *
  * @author Hemma Prafullchandra
+ * @since 1.2
  */
 
 public interface X509Extension {
--- a/jdk/src/java.base/share/classes/java/security/interfaces/DSAKey.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/DSAKey.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  *
  * @author Benjamin Renaud
  * @author Josh Bloch
+ * @since 1.1
  */
 public interface DSAKey {
 
--- a/jdk/src/java.base/share/classes/java/security/interfaces/DSAKeyPairGenerator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/DSAKeyPairGenerator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -65,6 +65,7 @@
  * <p>Note: Some earlier implementations of this interface may not support
  * larger sizes of DSA parameters such as 2048 and 3072-bit.
  *
+ * @since 1.1
  * @see java.security.KeyPairGenerator
  */
 public interface DSAKeyPairGenerator {
--- a/jdk/src/java.base/share/classes/java/security/interfaces/DSAParams.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/DSAParams.java	Wed Jul 05 23:40:06 2017 +0200
@@ -38,6 +38,7 @@
  *
  * @author Benjamin Renaud
  * @author Josh Bloch
+ * @since 1.1
  */
 public interface DSAParams {
 
--- a/jdk/src/java.base/share/classes/java/security/interfaces/DSAPrivateKey.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/DSAPrivateKey.java	Wed Jul 05 23:40:06 2017 +0200
@@ -37,6 +37,7 @@
  * @see DSAPublicKey
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 public interface DSAPrivateKey extends DSAKey, java.security.PrivateKey {
 
--- a/jdk/src/java.base/share/classes/java/security/interfaces/DSAPublicKey.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/DSAPublicKey.java	Wed Jul 05 23:40:06 2017 +0200
@@ -37,6 +37,7 @@
  * @see DSAPrivateKey
  *
  * @author Benjamin Renaud
+ * @since 1.1
  */
 public interface DSAPublicKey extends DSAKey, java.security.PublicKey {
 
--- a/jdk/src/java.base/share/classes/java/security/interfaces/RSAPrivateCrtKey.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/RSAPrivateCrtKey.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,6 +32,7 @@
  * using the <i>Chinese Remainder Theorem</i> (CRT) information values.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see RSAPrivateKey
--- a/jdk/src/java.base/share/classes/java/security/interfaces/RSAPrivateKey.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/RSAPrivateKey.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * The interface to an RSA private key.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see RSAPrivateCrtKey
--- a/jdk/src/java.base/share/classes/java/security/interfaces/RSAPublicKey.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/interfaces/RSAPublicKey.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * The interface to an RSA public key.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  */
 
--- a/jdk/src/java.base/share/classes/java/security/spec/RSAPrivateCrtKeySpec.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/spec/RSAPrivateCrtKeySpec.java	Wed Jul 05 23:40:06 2017 +0200
@@ -33,6 +33,7 @@
  * efficiency.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see java.security.Key
--- a/jdk/src/java.base/share/classes/java/security/spec/RSAPrivateKeySpec.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/spec/RSAPrivateKeySpec.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * This class specifies an RSA private key.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see java.security.Key
--- a/jdk/src/java.base/share/classes/java/security/spec/RSAPublicKeySpec.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/spec/RSAPublicKeySpec.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * This class specifies an RSA public key.
  *
  * @author Jan Luehe
+ * @since 1.2
  *
  *
  * @see java.security.Key
--- a/jdk/src/java.base/share/classes/java/text/BreakIterator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/BreakIterator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -221,6 +221,7 @@
  * and the next is a word; otherwise, it's the material between words.)
  * </blockquote>
  *
+ * @since 1.1
  * @see CharacterIterator
  *
  */
--- a/jdk/src/java.base/share/classes/java/text/CharacterIterator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/CharacterIterator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -98,6 +98,7 @@
  * }
  * }</pre>
  *
+ * @since 1.1
  * @see StringCharacterIterator
  * @see AttributedCharacterIterator
  */
--- a/jdk/src/java.base/share/classes/java/text/ChoiceFormat.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/ChoiceFormat.java	Wed Jul 05 23:40:06 2017 +0200
@@ -163,6 +163,7 @@
  * @see          DecimalFormat
  * @see          MessageFormat
  * @author       Mark Davis
+ * @since 1.1
  */
 public class ChoiceFormat extends NumberFormat {
 
--- a/jdk/src/java.base/share/classes/java/text/CollationElementIterator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/CollationElementIterator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -104,6 +104,7 @@
  * @see                Collator
  * @see                RuleBasedCollator
  * @author             Helena Shih, Laura Werner, Richard Gillam
+ * @since 1.1
  */
 public final class CollationElementIterator
 {
--- a/jdk/src/java.base/share/classes/java/text/CollationKey.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/CollationKey.java	Wed Jul 05 23:40:06 2017 +0200
@@ -95,6 +95,7 @@
  * @see          Collator
  * @see          RuleBasedCollator
  * @author       Helena Shih
+ * @since 1.1
  */
 
 public abstract class CollationKey implements Comparable<CollationKey> {
--- a/jdk/src/java.base/share/classes/java/text/Collator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/Collator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -123,6 +123,7 @@
  * @see         CollationElementIterator
  * @see         Locale
  * @author      Helena Shih, Laura Werner, Richard Gillam
+ * @since 1.1
  */
 
 public abstract class Collator
--- a/jdk/src/java.base/share/classes/java/text/DateFormat.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/DateFormat.java	Wed Jul 05 23:40:06 2017 +0200
@@ -167,6 +167,7 @@
  * @see          java.util.GregorianCalendar
  * @see          java.util.TimeZone
  * @author       Mark Davis, Chen-Lieh Huang, Alan Liu
+ * @since 1.1
  */
 public abstract class DateFormat extends Format {
 
--- a/jdk/src/java.base/share/classes/java/text/DateFormatSymbols.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/DateFormatSymbols.java	Wed Jul 05 23:40:06 2017 +0200
@@ -98,6 +98,7 @@
  * @see          SimpleDateFormat
  * @see          java.util.SimpleTimeZone
  * @author       Chen-Lieh Huang
+ * @since 1.1
  */
 public class DateFormatSymbols implements Serializable, Cloneable {
 
--- a/jdk/src/java.base/share/classes/java/text/DecimalFormat.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/DecimalFormat.java	Wed Jul 05 23:40:06 2017 +0200
@@ -381,6 +381,7 @@
  * @see          ParsePosition
  * @author       Mark Davis
  * @author       Alan Liu
+ * @since 1.1
  */
 public class DecimalFormat extends NumberFormat {
 
--- a/jdk/src/java.base/share/classes/java/text/DecimalFormatSymbols.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/DecimalFormatSymbols.java	Wed Jul 05 23:40:06 2017 +0200
@@ -60,6 +60,7 @@
  * @see          DecimalFormat
  * @author       Mark Davis
  * @author       Alan Liu
+ * @since 1.1
  */
 
 public class DecimalFormatSymbols implements Cloneable, Serializable {
--- a/jdk/src/java.base/share/classes/java/text/FieldPosition.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/FieldPosition.java	Wed Jul 05 23:40:06 2017 +0200
@@ -68,6 +68,7 @@
  * <code>formatToCharacterIterator</code>.
  *
  * @author      Mark Davis
+ * @since 1.1
  * @see         java.text.Format
  */
 public class FieldPosition {
--- a/jdk/src/java.base/share/classes/java/text/Format.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/Format.java	Wed Jul 05 23:40:06 2017 +0200
@@ -129,6 +129,7 @@
  * @see          java.text.DateFormat
  * @see          java.text.MessageFormat
  * @author       Mark Davis
+ * @since 1.1
  */
 public abstract class Format implements Serializable, Cloneable {
 
--- a/jdk/src/java.base/share/classes/java/text/MessageFormat.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/MessageFormat.java	Wed Jul 05 23:40:06 2017 +0200
@@ -344,6 +344,7 @@
  * @see          SimpleDateFormat
  *
  * @author       Mark Davis
+ * @since 1.1
  */
 
 public class MessageFormat extends Format {
--- a/jdk/src/java.base/share/classes/java/text/NumberFormat.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/NumberFormat.java	Wed Jul 05 23:40:06 2017 +0200
@@ -185,6 +185,7 @@
  * @see          ChoiceFormat
  * @author       Mark Davis
  * @author       Helena Shih
+ * @since 1.1
  */
 public abstract class NumberFormat extends Format  {
 
--- a/jdk/src/java.base/share/classes/java/text/ParseException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/ParseException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -45,6 +45,7 @@
  * @see java.text.Format
  * @see java.text.FieldPosition
  * @author      Mark Davis
+ * @since 1.1
  */
 public
 class ParseException extends Exception {
--- a/jdk/src/java.base/share/classes/java/text/ParsePosition.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/ParsePosition.java	Wed Jul 05 23:40:06 2017 +0200
@@ -51,6 +51,7 @@
  * records the current position.
  *
  * @author      Mark Davis
+ * @since 1.1
  * @see         java.text.Format
  */
 
--- a/jdk/src/java.base/share/classes/java/text/RuleBasedCollator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/RuleBasedCollator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -242,6 +242,7 @@
  * @see        Collator
  * @see        CollationElementIterator
  * @author     Helena Shih, Laura Werner, Richard Gillam
+ * @since 1.1
  */
 public class RuleBasedCollator extends Collator{
     // IMPLEMENTATION NOTES:  The implementation of the collation algorithm is
--- a/jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java	Wed Jul 05 23:40:06 2017 +0200
@@ -434,6 +434,7 @@
  * @see          DateFormat
  * @see          DateFormatSymbols
  * @author       Mark Davis, Chen-Lieh Huang, Alan Liu
+ * @since 1.1
  */
 public class SimpleDateFormat extends DateFormat {
 
--- a/jdk/src/java.base/share/classes/java/text/StringCharacterIterator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/text/StringCharacterIterator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -47,6 +47,7 @@
  * entire <code>String</code>.
  *
  * @see CharacterIterator
+ * @since 1.1
  */
 
 public final class StringCharacterIterator implements CharacterIterator
--- a/jdk/src/java.base/share/classes/java/util/ResourceBundle.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/ResourceBundle.java	Wed Jul 05 23:40:06 2017 +0200
@@ -216,16 +216,17 @@
  * the caller module, those resource bundles need to be loaded from service
  * providers of {@link ResourceBundleProvider}. The caller module must declare
  * "{@code uses}" and the service interface name is the concatenation of the
- * base name of the bundles and the string "{@code Provider}". The
+ * package name of the base name, string "{@code .spi.}", the simple class
+ * name of the base name, and the string "{@code Provider}". The
  * <em>bundle provider modules</em> containing resource bundles must
  * declare "{@code provides}" with the service interface name and
  * its implementation class name. For example, if the base name is
  * "{@code com.example.app.MyResources}", the caller module must declare
- * "{@code uses com.example.app.MyResourcesProvider;}" and a module containing resource
- * bundles must declare "{@code provides com.example.app.MyResourcesProvider
+ * "{@code uses com.example.app.spi.MyResourcesProvider;}" and a module containing resource
+ * bundles must declare "{@code provides com.example.app.spi.MyResourcesProvider
  * with com.example.app.internal.MyResourcesProviderImpl;}"
  * where {@code com.example.app.internal.MyResourcesProviderImpl} is an
- * implementation class of {@code com.example.app.MyResourcesProvider}.</li>
+ * implementation class of {@code com.example.app.spi.MyResourcesProvider}.</li>
  * <li>If you want to use non-standard formats in named modules, such as XML,
  * {@link ResourceBundleProvider} needs to be used.</li>
  * <li>The {@code getBundle} method with a {@code ClassLoader} may not be able to
@@ -243,9 +244,10 @@
  *
  * The {@code getBundle} factory methods load service providers of
  * {@link ResourceBundleProvider}, if available, using {@link ServiceLoader}.
- * The service type is designated by {@code basename+"Provider"}. For
+ * The service type is designated by
+ * {@code <package name> + ".spi." + <simple name> + "Provider"}. For
  * example, if the base name is "{@code com.example.app.MyResources}", the service
- * type is {@code com.example.app.MyResourcesProvider}.
+ * type is {@code com.example.app.spi.MyResourcesProvider}.
  * <p>
  * In named modules, the loaded service providers for the given base name are
  * used to load resource bundles. If no service provider is available, or if
@@ -923,7 +925,12 @@
      * <p> Resource bundles in named modules may be encapsulated.  When
      * the resource bundle is loaded from a provider, the caller module
      * must have an appropriate <i>uses</i> clause in its <i>module descriptor</i>
-     * to declare that the module uses implementations of {@code "baseName"Provider}.
+     * to declare that the module uses implementations of
+     * {@code <package name> + ".spi." + <simple name> + "Provider"}.
+     * Otherwise, it will load the resource bundles that are local in the
+     * given module or that are visible to the class loader of the given module
+     * (refer to the <a href="#bundleprovider">Resource Bundles in Named Modules</a>
+     * section for details).
      * When the resource bundle is loaded from the specified module, it is
      * subject to the encapsulation rules specified by
      * {@link Module#getResourceAsStream Module.getResourceAsStream}.
@@ -958,20 +965,17 @@
      * <p> Resource bundles in named modules may be encapsulated.  When
      * the resource bundle is loaded from a provider, the caller module
      * must have an appropriate <i>uses</i> clause in its <i>module descriptor</i>
-     * to declare that the module uses implementations of {@code "baseName"Provider}.
+     * to declare that the module uses implementations of
+     * {@code <package name> + ".spi." + <simple name> + "Provider"}.
+     * Otherwise, it will load the resource bundles that are local in the
+     * given module or that are visible to the class loader of the given module
+     * (refer to the <a href="#bundleprovider">Resource Bundles in Named Modules</a>
+     * section for details).
      * When the resource bundle is loaded from the specified module, it is
      * subject to the encapsulation rules specified by
      * {@link Module#getResourceAsStream Module.getResourceAsStream}.
      *
      * <p>
-     * If the given {@code module} is a named module, this method will
-     * load the service providers for {@link java.util.spi.ResourceBundleProvider}
-     * and also resource bundles that are local in the given module or that
-     * are visible to the class loader of the given module (refer to the
-     * <a href="#bundleprovider">Resource Bundles in Named Modules</a> section
-     * for details).
-     *
-     * <p>
      * If the given {@code module} is an unnamed module, then this method is
      * equivalent to calling {@link #getBundle(String, Locale, ClassLoader)
      * getBundle(baseName, targetLocale, module.getClassLoader()} to load
@@ -1070,8 +1074,10 @@
      * Resource bundles in a named module are private to that module.  If
      * the caller is in a named module, this method will find resource bundles
      * from the service providers of {@link java.util.spi.ResourceBundleProvider}
-     * and also find resource bundles that are in the caller's module or
-     * that are visible to the given class loader.
+     * if any. Otherwise, it will load the resource bundles that are visible to
+     * the given {@code loader} (refer to the
+     * <a href="#bundleprovider">Resource Bundles in Named Modules</a> section
+     * for details).
      * If the caller is in a named module and the given {@code loader} is
      * different than the caller's class loader, or if the caller is not in
      * a named module, this method will not find resource bundles from named
@@ -1883,8 +1889,15 @@
     private static Class<ResourceBundleProvider>
             getResourceBundleProviderType(String baseName, ClassLoader loader)
     {
-        // Look up <baseName> + "Provider"
-        String providerName = baseName + "Provider";
+        // Look up <packagename> + ".spi." + <name>"Provider"
+        int i = baseName.lastIndexOf('.');
+        if (i <= 0) {
+            return null;
+        }
+
+        String name = baseName.substring(i+1, baseName.length()) + "Provider";
+        String providerName = baseName.substring(0, i) + ".spi." + name;
+
         // Use the class loader of the getBundle caller so that the caller's
         // visibility of the provider type is checked.
         return AccessController.doPrivileged(
--- a/jdk/src/java.base/share/classes/java/util/concurrent/CompletionService.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/CompletionService.java	Wed Jul 05 23:40:06 2017 +0200
@@ -57,6 +57,8 @@
  * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
  * actions taken by that task, which in turn <i>happen-before</i>
  * actions following a successful return from the corresponding {@code take()}.
+ *
+ * @since 1.5
  */
 public interface CompletionService<V> {
     /**
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ExecutorCompletionService.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ExecutorCompletionService.java	Wed Jul 05 23:40:06 2017 +0200
@@ -97,6 +97,8 @@
  *   if (result != null)
  *     use(result);
  * }}</pre>
+ *
+ * @since 1.5
  */
 public class ExecutorCompletionService<V> implements CompletionService<V> {
     private final Executor executor;
--- a/jdk/src/java.base/share/classes/java/util/concurrent/locks/LockSupport.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/locks/LockSupport.java	Wed Jul 05 23:40:06 2017 +0200
@@ -133,6 +133,8 @@
  *     Class<?> ensureLoaded = LockSupport.class;
  *   }
  * }}</pre>
+ *
+ * @since 1.5
  */
 public class LockSupport {
     private LockSupport() {} // Cannot be instantiated.
--- a/jdk/src/java.base/share/classes/java/util/jar/JarEntry.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/jar/JarEntry.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,6 +32,8 @@
 
 /**
  * This class is used to represent a JAR file entry.
+ *
+ * @since 1.2
  */
 public
 class JarEntry extends ZipEntry {
--- a/jdk/src/java.base/share/classes/java/util/package-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/package-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,7 @@
  * miscellaneous utility classes (a string tokenizer, a random-number
  * generator, and a bit array).
  *
- * <h2><a name="CollectionsFramework"></a>{@index "Java Collections Framework"}</h2>
+ * <h2><a id="CollectionsFramework"></a>{@index "Java Collections Framework"}</h2>
  * <ul>
  *   <li><a href="../../../technotes/guides/collections/overview.html"><b>Collections Framework Overview</b></a>
  *   <li><a href="../../../technotes/guides/collections/reference.html"><b>
--- a/jdk/src/java.base/share/classes/java/util/spi/CalendarNameProvider.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/spi/CalendarNameProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -46,7 +46,7 @@
  * Calendar}. The following are calendar-common fields and their values to be
  * supported for each calendar system.
  *
- * <table class="plain" style="border-bottom:1px solid">
+ *  <table class="plain">
  * <caption style="display:none">Field values</caption>
  * <thead>
  *   <tr>
@@ -57,8 +57,8 @@
  * </thead>
  * <tbody>
  *   <tr>
- *     <td valign="top">{@link Calendar#MONTH}</td>
- *     <td valign="top">{@link Calendar#JANUARY} to {@link Calendar#UNDECIMBER}</td>
+ *     <td style="vertical-align:top">{@link Calendar#MONTH}</td>
+ *     <td style="vertical-align:top">{@link Calendar#JANUARY} to {@link Calendar#UNDECIMBER}</td>
  *     <td>Month numbering is 0-based (e.g., 0 - January, ..., 11 -
  *         December). Some calendar systems have 13 months. Month
  *         names need to be supported in both the formatting and
@@ -67,14 +67,14 @@
  *         in both of the forms.</td>
  *   </tr>
  *   <tr>
- *     <td valign="top">{@link Calendar#DAY_OF_WEEK}</td>
- *     <td valign="top">{@link Calendar#SUNDAY} to {@link Calendar#SATURDAY}</td>
+ *     <td style="vertical-align:top">{@link Calendar#DAY_OF_WEEK}</td>
+ *     <td style="vertical-align:top">{@link Calendar#SUNDAY} to {@link Calendar#SATURDAY}</td>
  *     <td>Day-of-week numbering is 1-based starting from Sunday (i.e., 1 - Sunday,
  *         ..., 7 - Saturday).</td>
  *   </tr>
  *   <tr>
- *     <td valign="top">{@link Calendar#AM_PM}</td>
- *     <td valign="top">{@link Calendar#AM} to {@link Calendar#PM}</td>
+ *     <td style="vertical-align:top">{@link Calendar#AM_PM}</td>
+ *     <td style="vertical-align:top">{@link Calendar#AM} to {@link Calendar#PM}</td>
  *     <td>0 - AM, 1 - PM</td>
  *   </tr>
  * </tbody>
@@ -82,7 +82,7 @@
  *
  * <p style="margin-top:20px">The following are calendar-specific fields and their values to be supported.
  *
- * <table class="plain" style="border-bottom:1px solid">
+ * <table class="plain">
  * <caption style="display:none">Calendar type and field values</caption>
  * <thead>
  *   <tr>
@@ -94,8 +94,8 @@
  * </thead>
  * <tbody>
  *   <tr>
- *     <td rowspan="2" valign="top">{@code "gregory"}</td>
- *     <td rowspan="2" valign="top">{@link Calendar#ERA}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@code "gregory"}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@link Calendar#ERA}</td>
  *     <td>0</td>
  *     <td>{@link java.util.GregorianCalendar#BC} (BCE)</td>
  *   </tr>
@@ -104,8 +104,8 @@
  *     <td>{@link java.util.GregorianCalendar#AD} (CE)</td>
  *   </tr>
  *   <tr>
- *     <td rowspan="2" valign="top">{@code "buddhist"}</td>
- *     <td rowspan="2" valign="top">{@link Calendar#ERA}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@code "buddhist"}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@link Calendar#ERA}</td>
  *     <td>0</td>
  *     <td>BC (BCE)</td>
  *   </tr>
@@ -114,8 +114,8 @@
  *     <td>B.E. (Buddhist Era)</td>
  *   </tr>
  *   <tr>
- *     <td rowspan="6" valign="top">{@code "japanese"}</td>
- *     <td rowspan="5" valign="top">{@link Calendar#ERA}</td>
+ *     <td rowspan="6" style="vertical-align:top">{@code "japanese"}</td>
+ *     <td rowspan="5" style="vertical-align:top">{@link Calendar#ERA}</td>
  *     <td>0</td>
  *     <td>Seireki (Before Meiji)</td>
  *   </tr>
@@ -144,8 +144,8 @@
  *     Year representation in {@code SimpleDateFormat}</a>.</td>
  *   </tr>
  *   <tr>
- *     <td rowspan="2" valign="top">{@code "roc"}</td>
- *     <td rowspan="2" valign="top">{@link Calendar#ERA}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@code "roc"}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@link Calendar#ERA}</td>
  *     <td>0</td>
  *     <td>Before R.O.C.</td>
  *   </tr>
@@ -154,8 +154,8 @@
  *     <td>R.O.C.</td>
  *   </tr>
  *   <tr>
- *     <td rowspan="2" valign="top">{@code "islamic"}</td>
- *     <td rowspan="2" valign="top">{@link Calendar#ERA}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@code "islamic"}</td>
+ *     <td rowspan="2" style="vertical-align:top">{@link Calendar#ERA}</td>
  *     <td>0</td>
  *     <td>Before AH</td>
  *   </tr>
--- a/jdk/src/java.base/share/classes/java/util/spi/ResourceBundleProvider.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/spi/ResourceBundleProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,11 +35,11 @@
  * during a call to the
  * {@link ResourceBundle#getBundle(String, Locale, ClassLoader)
  * ResourceBundle.getBundle} method. The provider service type is determined by
- * {@code basename+"Provider"}.
+ * {@code <package name> + ".spi." + <simple name> + "Provider"}.
  *
  * <p>
  * For example, if the base name is "com.example.app.MyResources",
- * {@code com.example.app.MyResourcesProvider} will be the provider service type:
+ * {@code com.example.app.spi.MyResourcesProvider} will be the provider service type:
  * <pre>{@code
  * public interface MyResourcesProvider extends ResourceBundleProvider {
  * }
--- a/jdk/src/java.base/share/classes/java/util/zip/Adler32.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/Adler32.java	Wed Jul 05 23:40:06 2017 +0200
@@ -39,6 +39,7 @@
  * a {@link NullPointerException} to be thrown.</p>
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class Adler32 implements Checksum {
--- a/jdk/src/java.base/share/classes/java/util/zip/CRC32.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/CRC32.java	Wed Jul 05 23:40:06 2017 +0200
@@ -38,6 +38,7 @@
  * a {@link NullPointerException} to be thrown.</p>
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class CRC32 implements Checksum {
--- a/jdk/src/java.base/share/classes/java/util/zip/CheckedInputStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/CheckedInputStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  *
  * @see         Checksum
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class CheckedInputStream extends FilterInputStream {
--- a/jdk/src/java.base/share/classes/java/util/zip/CheckedOutputStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/CheckedOutputStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -36,6 +36,7 @@
  *
  * @see         Checksum
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class CheckedOutputStream extends FilterOutputStream {
--- a/jdk/src/java.base/share/classes/java/util/zip/Checksum.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/Checksum.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,7 @@
  * An interface representing a data checksum.
  *
  * @author David Connelly
+ * @since 1.1
  */
 public interface Checksum {
 
--- a/jdk/src/java.base/share/classes/java/util/zip/DataFormatException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/DataFormatException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * Signals that a data format error has occurred.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class DataFormatException extends Exception {
--- a/jdk/src/java.base/share/classes/java/util/zip/Deflater.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/Deflater.java	Wed Jul 05 23:40:06 2017 +0200
@@ -69,6 +69,7 @@
  *
  * @see         Inflater
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class Deflater {
--- a/jdk/src/java.base/share/classes/java/util/zip/DeflaterOutputStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/DeflaterOutputStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -37,6 +37,7 @@
  *
  * @see         Deflater
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class DeflaterOutputStream extends FilterOutputStream {
--- a/jdk/src/java.base/share/classes/java/util/zip/GZIPInputStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/GZIPInputStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -38,6 +38,7 @@
  *
  * @see         InflaterInputStream
  * @author      David Connelly
+ * @since 1.1
  *
  */
 public
--- a/jdk/src/java.base/share/classes/java/util/zip/GZIPOutputStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/GZIPOutputStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,6 +32,7 @@
  * This class implements a stream filter for writing compressed data in
  * the GZIP file format.
  * @author      David Connelly
+ * @since 1.1
  *
  */
 public
--- a/jdk/src/java.base/share/classes/java/util/zip/Inflater.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/Inflater.java	Wed Jul 05 23:40:06 2017 +0200
@@ -68,6 +68,7 @@
  *
  * @see         Deflater
  * @author      David Connelly
+ * @since 1.1
  *
  */
 public
--- a/jdk/src/java.base/share/classes/java/util/zip/InflaterInputStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/InflaterInputStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -37,6 +37,7 @@
  *
  * @see         Inflater
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class InflaterInputStream extends FilterInputStream {
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipConstants.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipConstants.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,7 @@
  * which manipulate ZIP files.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 interface ZipConstants {
     /*
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipEntry.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipEntry.java	Wed Jul 05 23:40:06 2017 +0200
@@ -39,6 +39,7 @@
  * This class is used to represent a ZIP file entry.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class ZipEntry implements ZipConstants, Cloneable {
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java	Wed Jul 05 23:40:06 2017 +0200
@@ -70,6 +70,7 @@
  * thrown.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class ZipFile implements ZipConstants, Closeable {
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipInputStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipInputStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -40,6 +40,7 @@
  * entries.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class ZipInputStream extends InflaterInputStream implements ZipConstants {
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipOutputStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipOutputStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -41,6 +41,7 @@
  * entries.
  *
  * @author      David Connelly
+ * @since 1.1
  */
 public
 class ZipOutputStream extends DeflaterOutputStream implements ZipConstants {
--- a/jdk/src/java.base/share/classes/java/util/zip/package-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/package-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,13 +37,13 @@
  *         Info-ZIP Application Note 970311</a> - a detailed description of
  *         the Info-ZIP format upon which the {@code java.util.zip} classes
  *         are based.
- *     <li><a name="zip64">An implementation may optionally support the
+ *     <li><a id="zip64">An implementation may optionally support the
  *         ZIP64(tm) format extensions defined by the</a>
  *         <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">
  *         PKWARE ZIP File Format Specification</a>. The ZIP64(tm) format
  *         extensions are used to overcome the size limitations of the
  *         original ZIP format.
- *     <li><a name="lang_encoding">APPENDIX D of</a>
+ *     <li><a id="lang_encoding">APPENDIX D of</a>
  *         <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">
  *         PKWARE ZIP File Format Specification</a> - Language Encoding Flag
  *         (EFS) to encode ZIP entry filename and comment fields using UTF-8.
--- a/jdk/src/java.base/share/classes/javax/crypto/KeyGenerator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/crypto/KeyGenerator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -83,6 +83,15 @@
  * <p>In case the client does not explicitly initialize the KeyGenerator
  * (via a call to an {@code init} method), each provider must
  * supply (and document) a default initialization.
+ * See the Keysize Restriction sections of the
+ * <a href="{@docRoot}/../technotes/guides/security/SunProviders.html">
+ * JDK Providers</a>
+ * document for information on the KeyGenerator defaults used by
+ * JDK providers.
+ * However, note that defaults may vary across different providers.
+ * Additionally, the default value for a provider may change in a future
+ * version. Therefore, it is recommended to explicitly initialize the
+ * KeyGenerator instead of relying on provider-specific defaults.
  *
  * <p> Every implementation of the Java platform is required to support the
  * following standard {@code KeyGenerator} algorithms with the keysizes in
--- a/jdk/src/java.base/share/classes/javax/crypto/KeyGeneratorSpi.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/crypto/KeyGeneratorSpi.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,6 +35,19 @@
  * cryptographic service provider who wishes to supply the implementation
  * of a key generator for a particular algorithm.
  *
+ * <p>In case the client does not explicitly initialize the KeyGenerator
+ * (via a call to an {@code init} method), each provider must
+ * supply (and document) a default initialization.
+ * See the Keysize Restriction sections of the
+ * <a href="{@docRoot}/../technotes/guides/security/SunProviders.html">
+ * JDK Providers</a>
+ * document for information on the KeyGenerator defaults used by
+ * JDK providers.
+ * However, note that defaults may vary across different providers.
+ * Additionally, the default value for a provider may change in a future
+ * version. Therefore, it is recommended to explicitly initialize the
+ * KeyGenerator instead of relying on provider-specific defaults.
+ *
  * @author Jan Luehe
  *
  * @see SecretKey
--- a/jdk/src/java.base/share/classes/javax/security/auth/AuthPermission.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/AuthPermission.java	Wed Jul 05 23:40:06 2017 +0200
@@ -139,6 +139,7 @@
  * @implNote
  * Implementations may define additional target names, but should use naming
  * conventions such as reverse domain name notation to avoid name clashes.
+ * @since 1.4
  */
 public final class AuthPermission extends
 java.security.BasicPermission {
--- a/jdk/src/java.base/share/classes/javax/security/auth/DestroyFailedException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/DestroyFailedException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,6 +32,7 @@
  * the {@code Destroyable} interface when the {@code destroy}
  * method fails.
  *
+ * @since 1.4
  */
 public class DestroyFailedException extends Exception {
 
--- a/jdk/src/java.base/share/classes/javax/security/auth/Destroyable.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/Destroyable.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * Objects such as credentials may optionally implement this interface
  * to provide the capability to destroy its contents.
  *
+ * @since 1.4
  * @see javax.security.auth.Subject
  */
 public interface Destroyable {
--- a/jdk/src/java.base/share/classes/javax/security/auth/Policy.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/Policy.java	Wed Jul 05 23:40:06 2017 +0200
@@ -153,6 +153,7 @@
  * These two APIs provide callers the means to query the
  * Policy for Principal-based Permission entries.
  *
+ * @since 1.4
  * @see java.security.Security security properties
  */
 @Deprecated(since="1.4")
--- a/jdk/src/java.base/share/classes/javax/security/auth/PrivateCredentialPermission.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/PrivateCredentialPermission.java	Wed Jul 05 23:40:06 2017 +0200
@@ -100,6 +100,7 @@
  * "a.b.Principal" with the name, "duke", and "c.d.Principal", with the name,
  * "dukette".
  *
+ * @since 1.4
  */
 public final class PrivateCredentialPermission extends Permission {
 
--- a/jdk/src/java.base/share/classes/javax/security/auth/RefreshFailedException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/RefreshFailedException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,6 +32,7 @@
  * the {@code Refreshable} interface when the {@code refresh}
  * method fails.
  *
+ * @since 1.4
  */
 public class RefreshFailedException extends Exception {
 
--- a/jdk/src/java.base/share/classes/javax/security/auth/Refreshable.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/Refreshable.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,6 +32,7 @@
  * may implement this interface to allow callers to refresh the time period
  * for which it is valid.
  *
+ * @since 1.4
  * @see javax.security.auth.Subject
  */
 public interface Refreshable {
--- a/jdk/src/java.base/share/classes/javax/security/auth/Subject.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/Subject.java	Wed Jul 05 23:40:06 2017 +0200
@@ -94,6 +94,7 @@
  * {@code Principal} implementations associated with Subjects
  * must implement {@code Serializable}.
  *
+ * @since 1.4
  * @see java.security.Principal
  * @see java.security.DomainCombiner
  */
--- a/jdk/src/java.base/share/classes/javax/security/auth/SubjectDomainCombiner.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/SubjectDomainCombiner.java	Wed Jul 05 23:40:06 2017 +0200
@@ -43,6 +43,7 @@
  * with Principals from the {@code Subject} associated with this
  * {@code SubjectDomainCombiner}.
  *
+ * @since 1.4
  */
 public class SubjectDomainCombiner implements java.security.DomainCombiner {
 
--- a/jdk/src/java.base/share/classes/javax/security/auth/callback/Callback.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/Callback.java	Wed Jul 05 23:40:06 2017 +0200
@@ -40,6 +40,7 @@
  * if appropriate, to return requested information back to the
  * underlying security services.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  * @see javax.security.auth.callback.ChoiceCallback
  * @see javax.security.auth.callback.ConfirmationCallback
--- a/jdk/src/java.base/share/classes/javax/security/auth/callback/CallbackHandler.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/CallbackHandler.java	Wed Jul 05 23:40:06 2017 +0200
@@ -63,6 +63,7 @@
  * <p> All default handler implementations must provide a public
  * zero-argument constructor.
  *
+ * @since 1.4
  * @see java.security.Security security properties
  */
 public interface CallbackHandler {
--- a/jdk/src/java.base/share/classes/javax/security/auth/callback/ChoiceCallback.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/ChoiceCallback.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * method of a {@code CallbackHandler} to display a list of choices
  * and to retrieve the selected choice(s).
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class ChoiceCallback implements Callback, java.io.Serializable {
--- a/jdk/src/java.base/share/classes/javax/security/auth/callback/ConfirmationCallback.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/ConfirmationCallback.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * method of a {@code CallbackHandler} to ask for YES/NO,
  * OK/CANCEL, YES/NO/CANCEL or other similar confirmations.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class ConfirmationCallback implements Callback, java.io.Serializable {
--- a/jdk/src/java.base/share/classes/javax/security/auth/callback/LanguageCallback.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/LanguageCallback.java	Wed Jul 05 23:40:06 2017 +0200
@@ -33,6 +33,7 @@
  * method of a {@code CallbackHandler} to retrieve the {@code Locale}
  * used for localizing text.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class LanguageCallback implements Callback, java.io.Serializable {
--- a/jdk/src/java.base/share/classes/javax/security/auth/callback/NameCallback.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/NameCallback.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,7 @@
  * {@code NameCallback} to the {@code handle}
  * method of a {@code CallbackHandler} to retrieve name information.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class NameCallback implements Callback, java.io.Serializable {
--- a/jdk/src/java.base/share/classes/javax/security/auth/callback/PasswordCallback.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/PasswordCallback.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,7 @@
  * {@code PasswordCallback} to the {@code handle}
  * method of a {@code CallbackHandler} to retrieve password information.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class PasswordCallback implements Callback, java.io.Serializable {
--- a/jdk/src/java.base/share/classes/javax/security/auth/callback/TextInputCallback.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/TextInputCallback.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * method of a {@code CallbackHandler} to retrieve generic text
  * information.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class TextInputCallback implements Callback, java.io.Serializable {
--- a/jdk/src/java.base/share/classes/javax/security/auth/callback/TextOutputCallback.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/TextOutputCallback.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * method of a {@code CallbackHandler} to display information messages,
  * warning messages and error messages.
  *
+ * @since 1.4
  * @see javax.security.auth.callback.CallbackHandler
  */
 public class TextOutputCallback implements Callback, java.io.Serializable {
--- a/jdk/src/java.base/share/classes/javax/security/auth/callback/UnsupportedCallbackException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/callback/UnsupportedCallbackException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * Signals that a {@code CallbackHandler} does not
  * recognize a particular {@code Callback}.
  *
+ * @since 1.4
  */
 public class UnsupportedCallbackException extends Exception {
 
--- a/jdk/src/java.base/share/classes/javax/security/auth/login/AccountExpiredException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/AccountExpiredException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  * throws this exception to notify the application.  The application can
  * then take the appropriate steps to notify the user.
  *
+ * @since 1.4
  */
 public class AccountExpiredException extends AccountException {
 
--- a/jdk/src/java.base/share/classes/javax/security/auth/login/AppConfigurationEntry.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/AppConfigurationEntry.java	Wed Jul 05 23:40:06 2017 +0200
@@ -39,6 +39,7 @@
  * options.  Please refer to the {@code Configuration} class for
  * more information on the different control flags and their semantics.
  *
+ * @since 1.4
  * @see javax.security.auth.login.Configuration
  */
 public class AppConfigurationEntry {
--- a/jdk/src/java.base/share/classes/javax/security/auth/login/Configuration.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/Configuration.java	Wed Jul 05 23:40:06 2017 +0200
@@ -182,6 +182,7 @@
  * Java Security Standard Algorithm Names Specification</a>
  * for a list of standard Configuration types.
  *
+ * @since 1.4
  * @see javax.security.auth.login.LoginContext
  * @see java.security.Security security properties
  */
--- a/jdk/src/java.base/share/classes/javax/security/auth/login/CredentialExpiredException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/CredentialExpiredException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -37,6 +37,7 @@
  * the application.  The application can then take the appropriate
  * steps to assist the user in updating the password.
  *
+ * @since 1.4
  */
 public class CredentialExpiredException extends CredentialException {
 
--- a/jdk/src/java.base/share/classes/javax/security/auth/login/FailedLoginException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/FailedLoginException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,6 +32,7 @@
  * For example, a {@code LoginModule} throws this exception if
  * the user entered an incorrect password.
  *
+ * @since 1.4
  */
 public class FailedLoginException extends LoginException {
 
--- a/jdk/src/java.base/share/classes/javax/security/auth/login/LoginContext.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/LoginContext.java	Wed Jul 05 23:40:06 2017 +0200
@@ -182,6 +182,7 @@
  * </ul>
  * </ol>
  *
+ * @since 1.4
  * @see java.security.Security
  * @see javax.security.auth.AuthPermission
  * @see javax.security.auth.Subject
--- a/jdk/src/java.base/share/classes/javax/security/auth/login/LoginException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/LoginException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -28,6 +28,7 @@
 /**
  * This is the basic login exception.
  *
+ * @since 1.4
  * @see javax.security.auth.login.LoginContext
  */
 
--- a/jdk/src/java.base/share/classes/javax/security/auth/spi/LoginModule.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/spi/LoginModule.java	Wed Jul 05 23:40:06 2017 +0200
@@ -122,6 +122,7 @@
  * no arguments.  This allows classes which load the {@code LoginModule}
  * to instantiate it.
  *
+ * @since 1.4
  * @see javax.security.auth.login.LoginContext
  * @see javax.security.auth.login.Configuration
  */
--- a/jdk/src/java.base/share/classes/javax/security/auth/x500/X500PrivateCredential.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/x500/X500PrivateCredential.java	Wed Jul 05 23:40:06 2017 +0200
@@ -36,6 +36,7 @@
  * This enables looking up the private credentials for an X.500 principal
  * in a subject.
  *
+ * @since 1.4
  */
 public final class X500PrivateCredential implements Destroyable {
     private X509Certificate cert;
--- a/jdk/src/java.base/share/classes/sun/security/tools/keytool/Main.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/tools/keytool/Main.java	Wed Jul 05 23:40:06 2017 +0200
@@ -181,7 +181,7 @@
     enum Command {
         CERTREQ("Generates.a.certificate.request",
             ALIAS, SIGALG, FILEOUT, KEYPASS, KEYSTORE, DNAME,
-            STOREPASS, STORETYPE, PROVIDERNAME, ADDPROVIDER,
+            EXT, STOREPASS, STORETYPE, PROVIDERNAME, ADDPROVIDER,
             PROVIDERCLASS, PROVIDERPATH, V, PROTECTED),
         CHANGEALIAS("Changes.an.entry.s.alias",
             ALIAS, DESTALIAS, KEYPASS, KEYSTORE, CACERTS, STOREPASS,
@@ -250,12 +250,12 @@
             KEYSTORE, STOREPASS, PROVIDERNAME, ADDPROVIDER,
             PROVIDERCLASS, PROVIDERPATH, V),
         SELFCERT("Generates.a.self.signed.certificate",
-            ALIAS, SIGALG, DNAME, STARTDATE, VALIDITY, KEYPASS,
+            ALIAS, SIGALG, DNAME, STARTDATE, EXT, VALIDITY, KEYPASS,
             STORETYPE, KEYSTORE, STOREPASS, PROVIDERNAME,
             ADDPROVIDER, PROVIDERCLASS, PROVIDERPATH, V),
         GENCRL("Generates.CRL",
             RFC, FILEOUT, ID,
-            ALIAS, SIGALG, EXT, KEYPASS, KEYSTORE,
+            ALIAS, SIGALG, KEYPASS, KEYSTORE,
             STOREPASS, STORETYPE, PROVIDERNAME, ADDPROVIDER,
             PROVIDERCLASS, PROVIDERPATH, V, PROTECTED),
         IDENTITYDB("Imports.entries.from.a.JDK.1.1.x.style.identity.database",
--- a/jdk/src/java.base/share/classes/sun/security/util/DerInputBuffer.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/util/DerInputBuffer.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,7 +27,6 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
-import java.io.OutputStream;
 import java.math.BigInteger;
 import java.util.Date;
 import sun.util.calendar.CalendarDate;
@@ -275,7 +274,7 @@
         if (len > available())
             throw new IOException("short read of DER Generalized Time");
 
-        if (len < 13 || len > 23)
+        if (len < 13)
             throw new IOException("DER Generalized Time length error");
 
         return getTime(len, true);
@@ -350,7 +349,7 @@
          */
 
         millis = 0;
-        if (len > 2 && len < 12) {
+        if (len > 2) {
             second = 10 * Character.digit((char)buf[pos++], 10);
             second += Character.digit((char)buf[pos++], 10);
             len -= 2;
@@ -358,31 +357,30 @@
             if (buf[pos] == '.' || buf[pos] == ',') {
                 len --;
                 pos++;
-                // handle upto milisecond precision only
                 int precision = 0;
-                int peek = pos;
-                while (buf[peek] != 'Z' &&
-                       buf[peek] != '+' &&
-                       buf[peek] != '-') {
-                    peek++;
+                while (buf[pos] != 'Z' &&
+                       buf[pos] != '+' &&
+                       buf[pos] != '-') {
+                    // Validate all digits in the fractional part but
+                    // store millisecond precision only
+                    int thisDigit = Character.digit((char)buf[pos], 10);
                     precision++;
+                    pos++;
+                    switch (precision) {
+                        case 1:
+                            millis += 100 * thisDigit;
+                            break;
+                        case 2:
+                            millis += 10 * thisDigit;
+                            break;
+                        case 3:
+                            millis += thisDigit;
+                            break;
+                    }
                 }
-                switch (precision) {
-                case 3:
-                    millis += 100 * Character.digit((char)buf[pos++], 10);
-                    millis += 10 * Character.digit((char)buf[pos++], 10);
-                    millis += Character.digit((char)buf[pos++], 10);
-                    break;
-                case 2:
-                    millis += 100 * Character.digit((char)buf[pos++], 10);
-                    millis += 10 * Character.digit((char)buf[pos++], 10);
-                    break;
-                case 1:
-                    millis += 100 * Character.digit((char)buf[pos++], 10);
-                    break;
-                default:
-                        throw new IOException("Parse " + type +
-                            " time, unsupported precision for seconds value");
+                if (precision == 0) {
+                    throw new IOException("Parse " + type +
+                            " time, empty fractional part");
                 }
                 len -= precision;
             }
--- a/jdk/src/java.base/share/native/launcher/defines.h	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/native/launcher/defines.h	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -44,17 +44,24 @@
 #define DOT_VERSION "0.0"
 
 #ifdef JAVA_ARGS
-#define HAS_JAVA_ARGS JNI_TRUE
 #ifdef PROGNAME
 static const char* const_progname = PROGNAME;
 #else
 static char* const_progname = NULL;
 #endif
 static const char* const_jargs[] = JAVA_ARGS;
+#ifdef EXTRA_JAVA_ARGS
+static const char* const_extra_jargs[] = EXTRA_JAVA_ARGS;
+#else
+static const char** const_extra_jargs = NULL;
+#endif
 #else  /* !JAVA_ARGS */
-#define HAS_JAVA_ARGS JNI_FALSE
+#ifdef EXTRA_JAVA_ARGS
+#error "EXTRA_JAVA_ARGS defined without JAVA_ARGS"
+#endif
 static const char* const_progname = "java";
 static const char** const_jargs = NULL;
+static const char** const_extra_jargs = NULL;
 static const char* const_appclasspath[] = { NULL };
 #endif /* JAVA_ARGS */
 
--- a/jdk/src/java.base/share/native/launcher/main.c	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/native/launcher/main.c	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -85,6 +85,8 @@
 {
     int margc;
     char** margv;
+    int jargc;
+    char** jargv;
     const jboolean const_javaw = JNI_TRUE;
 
     __initenv = _environ;
@@ -95,10 +97,47 @@
 {
     int margc;
     char** margv;
+    int jargc;
+    char** jargv;
     const jboolean const_javaw = JNI_FALSE;
 #endif /* JAVAW */
+    {
+        int i, main_jargc, extra_jargc;
+        JLI_List list;
 
-    JLI_InitArgProcessing(!HAS_JAVA_ARGS, const_disable_argfile);
+        main_jargc = (sizeof(const_jargs) / sizeof(char *)) > 1
+            ? sizeof(const_jargs) / sizeof(char *)
+            : 0; // ignore the null terminator index
+
+        extra_jargc = (sizeof(const_extra_jargs) / sizeof(char *)) > 1
+            ? sizeof(const_extra_jargs) / sizeof(char *)
+            : 0; // ignore the null terminator index
+
+        if (main_jargc > 0 && extra_jargc > 0) { // combine extra java args
+            jargc = main_jargc + extra_jargc;
+            list = JLI_List_new(jargc + 1);
+
+            for (i = 0 ; i < extra_jargc; i++) {
+                JLI_List_add(list, JLI_StringDup(const_extra_jargs[i]));
+            }
+
+            for (i = 0 ; i < main_jargc ; i++) {
+                JLI_List_add(list, JLI_StringDup(const_jargs[i]));
+            }
+
+            // terminate the list
+            JLI_List_add(list, NULL);
+            jargv = list->elements;
+         } else if (extra_jargc > 0) { // should never happen
+            fprintf(stderr, "EXTRA_JAVA_ARGS defined without JAVA_ARGS");
+            abort();
+         } else { // no extra args, business as usual
+            jargc = main_jargc;
+            jargv = (char **) const_jargs;
+         }
+    }
+
+    JLI_InitArgProcessing(jargc > 0, const_disable_argfile);
 
 #ifdef _WIN32
     {
@@ -164,12 +203,12 @@
     }
 #endif /* WIN32 */
     return JLI_Launch(margc, margv,
-                   sizeof(const_jargs) / sizeof(char *), const_jargs,
+                   jargc, (const char**) jargv,
                    0, NULL,
                    VERSION_STRING,
                    DOT_VERSION,
                    (const_progname != NULL) ? const_progname : *margv,
                    (const_launcher != NULL) ? const_launcher : *margv,
-                   HAS_JAVA_ARGS,
+                   jargc > 0,
                    const_cpwildcard, const_javaw, 0);
 }
--- a/jdk/src/java.base/share/native/libjli/args.c	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/native/libjli/args.c	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -78,7 +78,7 @@
 static jboolean stopExpansion = JNI_FALSE;
 static jboolean relaunch = JNI_FALSE;
 
-void JLI_InitArgProcessing(jboolean isJava, jboolean disableArgFile) {
+void JLI_InitArgProcessing(jboolean hasJavaArgs, jboolean disableArgFile) {
     // No expansion for relaunch
     if (argsCount != 1) {
         relaunch = JNI_TRUE;
@@ -91,7 +91,7 @@
     expectingNoDashArg = JNI_FALSE;
 
     // for tools, this value remains 0 all the time.
-    firstAppArgIndex = isJava ? NOT_FOUND : 0;
+    firstAppArgIndex = hasJavaArgs ? 0: NOT_FOUND;
 }
 
 int JLI_GetAppArgIndex() {
--- a/jdk/src/java.base/share/native/libjli/java.c	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/native/libjli/java.c	Wed Jul 05 23:40:06 2017 +0200
@@ -246,6 +246,10 @@
     DumpState();
     if (JLI_IsTraceLauncher()) {
         int i;
+        printf("Java args:\n");
+        for (i = 0; i < jargc ; i++) {
+            printf("jargv[%d] = %s\n", i, jargv[i]);
+        }
         printf("Command line args:\n");
         for (i = 0; i < argc ; i++) {
             printf("argv[%d] = %s\n", i, argv[i]);
--- a/jdk/src/java.base/share/native/libjli/jli_util.h	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.base/share/native/libjli/jli_util.h	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -133,7 +133,7 @@
 char *JLI_List_join(JLI_List l, char sep);
 JLI_List JLI_List_split(const char *str, char sep);
 
-void JLI_InitArgProcessing(jboolean isJava, jboolean disableArgFile);
+void JLI_InitArgProcessing(jboolean hasJavaArgs, jboolean disableArgFile);
 JLI_List JLI_PreprocessArg(const char *arg);
 jboolean JLI_AddArgsFromEnvVar(JLI_List args, const char *var_name);
 
--- a/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/Clipboard.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/Clipboard.java	Wed Jul 05 23:40:06 2017 +0200
@@ -48,6 +48,7 @@
  *
  * @author      Amy Fowler
  * @author      Alexander Gerasimov
+ * @since 1.1
  */
 public class Clipboard {
 
--- a/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/ClipboardOwner.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/ClipboardOwner.java	Wed Jul 05 23:40:06 2017 +0200
@@ -39,6 +39,7 @@
  * @see java.awt.datatransfer.Clipboard
  *
  * @author      Amy Fowler
+ * @since 1.1
  */
 
 public interface ClipboardOwner {
--- a/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/DataFlavor.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/DataFlavor.java	Wed Jul 05 23:40:06 2017 +0200
@@ -112,6 +112,7 @@
  * @author      Blake Sullivan
  * @author      Laurence P. G. Cable
  * @author      Jeff Dunn
+ * @since 1.1
  */
 public class DataFlavor implements Externalizable, Cloneable {
 
--- a/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/StringSelection.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/StringSelection.java	Wed Jul 05 23:40:06 2017 +0200
@@ -39,6 +39,7 @@
  * and all equivalent flavors is <b>deprecated</b>. No other
  * <code>DataFlavor</code>s are supported.
  *
+ * @since 1.1
  * @see java.awt.datatransfer.DataFlavor#stringFlavor
  * @see java.awt.datatransfer.DataFlavor#plainTextFlavor
  */
--- a/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/Transferable.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/Transferable.java	Wed Jul 05 23:40:06 2017 +0200
@@ -37,6 +37,7 @@
  * a section in <em>The Java Tutorial</em>, for more information.
  *
  * @author      Amy Fowler
+ * @since 1.1
  */
 
 public interface Transferable {
--- a/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/UnsupportedFlavorException.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.datatransfer/share/classes/java/awt/datatransfer/UnsupportedFlavorException.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,7 @@
  * @see Transferable#getTransferData
  *
  * @author      Amy Fowler
+ * @since 1.1
  */
 public class UnsupportedFlavorException extends Exception {
 
--- a/jdk/src/java.rmi/share/classes/sun/rmi/registry/RegistryImpl.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/java.rmi/share/classes/sun/rmi/registry/RegistryImpl.java	Wed Jul 05 23:40:06 2017 +0200
@@ -102,10 +102,10 @@
     private static final String REGISTRY_FILTER_PROPNAME = "sun.rmi.registry.registryFilter";
 
     /** Registry max depth of remote invocations. **/
-    private static int REGISTRY_MAX_DEPTH = 5;
+    private static final int REGISTRY_MAX_DEPTH = 20;
 
     /** Registry maximum array size in remote invocations. **/
-    private static int REGISTRY_MAX_ARRAY_SIZE = 10000;
+    private static final int REGISTRY_MAX_ARRAY_SIZE = 10000;
 
     /**
      * The registryFilter created from the value of the {@code "sun.rmi.registry.registryFilter"}
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/MultiExchange.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/MultiExchange.java	Wed Jul 05 23:40:06 2017 +0200
@@ -316,13 +316,14 @@
                 })
             // 5. Handle errors and cancel any timer set
             .handle((response, ex) -> {
-                if (response != null) {
+                cancelTimer();
+                if (ex == null) {
+                    assert response != null;
                     return MinimalFuture.completedFuture(response);
                 }
                 // all exceptions thrown are handled here
                 CompletableFuture<Response> error = getExceptionalCF(ex);
                 if (error == null) {
-                    cancelTimer();
                     return responseAsyncImpl();
                 } else {
                     return error;
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java	Wed Jul 05 23:40:06 2017 +0200
@@ -274,9 +274,7 @@
                 int x;
                 do {
                     if (needData) {
-                        do {
-                            x = chan.read (unwrap_src);
-                        } while (x == 0);
+                        x = chan.read (unwrap_src);
                         if (x == -1) {
                             throw new IOException ("connection closed for reading");
                         }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/Receiver.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/Receiver.java	Wed Jul 05 23:40:06 2017 +0200
@@ -28,7 +28,6 @@
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.channels.SelectionKey;
-import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
 
 /*
@@ -58,23 +57,24 @@
     private final Frame.Reader reader = new Frame.Reader();
     private final RawChannel.RawEvent event = createHandler();
     private final AtomicLong demand = new AtomicLong();
-    private final CooperativeHandler handler =
-              new CooperativeHandler(this::pushContinuously);
-    /*
-     * Used to ensure registering the channel event at most once (i.e. to avoid
-     * multiple registrations).
-     */
-    private final AtomicBoolean readable = new AtomicBoolean();
+    private final CooperativeHandler handler;
+
     private ByteBuffer data;
+    private volatile int state;
+
+    private static final int UNREGISTERED = 0;
+    private static final int AVAILABLE    = 1;
+    private static final int WAITING      = 2;
 
     Receiver(MessageStreamConsumer messageConsumer, RawChannel channel) {
         this.messageConsumer = messageConsumer;
         this.channel = channel;
+        this.frameConsumer = new FrameConsumer(this.messageConsumer);
         this.data = channel.initialByteBuffer();
-        this.frameConsumer = new FrameConsumer(this.messageConsumer);
-        // To ensure the initial non-final `data` will be read correctly
-        // (happens-before) by reader after executing readable.get()
-        readable.set(true);
+        // To ensure the initial non-final `data` will be visible
+        // (happens-before) when `handler` invokes `pushContinuously`
+        // the following assignment is done last:
+        handler = new CooperativeHandler(this::pushContinuously);
     }
 
     private RawChannel.RawEvent createHandler() {
@@ -87,7 +87,7 @@
 
             @Override
             public void handle() {
-                readable.set(true);
+                state = AVAILABLE;
                 handler.handle();
             }
         };
@@ -110,54 +110,63 @@
 
     /*
      * Stops the machinery from reading and delivering messages permanently,
-     * regardless of the current demand.
+     * regardless of the current demand and data availability.
      */
     void close() {
         handler.stop();
     }
 
     private void pushContinuously() {
-        while (readable.get() && demand.get() > 0 && !handler.isStopped()) {
-            pushOnce();
-        }
-    }
-
-    private void pushOnce() {
-        if (data == null && !readData()) {
-            return;
-        }
-        try {
-            reader.readFrame(data, frameConsumer); // Pushing frame parts to the consumer
-        } catch (FailWebSocketException e) {
-            messageConsumer.onError(e);
-            return;
-        }
-        if (!data.hasRemaining()) {
-            data = null;
+        while (!handler.isStopped()) {
+            if (data.hasRemaining()) {
+                if (demand.get() > 0) {
+                    try {
+                        int oldPos = data.position();
+                        reader.readFrame(data, frameConsumer);
+                        int newPos = data.position();
+                        assert oldPos != newPos : data; // reader always consumes bytes
+                    } catch (FailWebSocketException e) {
+                        handler.stop();
+                        messageConsumer.onError(e);
+                    }
+                    continue;
+                }
+                break;
+            }
+            switch (state) {
+                case WAITING:
+                    return;
+                case UNREGISTERED:
+                    try {
+                        state = WAITING;
+                        channel.registerEvent(event);
+                    } catch (IOException e) {
+                        handler.stop();
+                        messageConsumer.onError(e);
+                    }
+                    return;
+                case AVAILABLE:
+                    try {
+                        data = channel.read();
+                    } catch (IOException e) {
+                        handler.stop();
+                        messageConsumer.onError(e);
+                        return;
+                    }
+                    if (data == null) { // EOF
+                        handler.stop();
+                        messageConsumer.onComplete();
+                        return;
+                    } else if (!data.hasRemaining()) { // No data at the moment
+                        // Pretty much a "goto", reusing the existing code path
+                        // for registration
+                        state = UNREGISTERED;
+                    }
+                    continue;
+                default:
+                    throw new InternalError(String.valueOf(state));
+            }
         }
     }
+}
 
-    private boolean readData() {
-        try {
-            data = channel.read();
-        } catch (IOException e) {
-            messageConsumer.onError(e);
-            return false;
-        }
-        if (data == null) { // EOF
-            messageConsumer.onComplete();
-            return false;
-        } else if (!data.hasRemaining()) { // No data in the socket at the moment
-            data = null;
-            readable.set(false);
-            try {
-                channel.registerEvent(event);
-            } catch (IOException e) {
-                messageConsumer.onError(e);
-            }
-            return false;
-        }
-        assert data.hasRemaining();
-        return true;
-    }
-}
--- a/jdk/test/TEST.ROOT	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/TEST.ROOT	Wed Jul 05 23:40:06 2017 +0200
@@ -10,7 +10,7 @@
 # randomness tests.
 #
 # A "headful" test requires a graphical environment to meaningfully
-# run. Tests that are not headful are "headless." 
+# run. Tests that are not headful are "headless."
 
 keys=2d dnd i18n intermittent randomness headful
 
@@ -18,7 +18,7 @@
 othervm.dirs=java/awt java/beans javax/accessibility javax/imageio javax/sound javax/print javax/management com/sun/awt sun/awt sun/java2d sun/pisces javax/xml/jaxp/testng/validation java/lang/ProcessHandle
 
 # Tests that cannot run concurrently
-exclusiveAccess.dirs=java/rmi/Naming java/util/prefs sun/management/jmxremote sun/tools/jstatd sun/security/mscapi java/util/stream java/util/BitSet/stream javax/rmi com/sun/corba/cachedSocket
+exclusiveAccess.dirs=java/rmi/Naming java/util/prefs sun/management/jmxremote sun/tools/jstatd sun/security/mscapi java/util/stream java/util/Arrays/largeMemory java/util/BitSet/stream javax/rmi com/sun/corba/cachedSocket
 
 # Group definitions
 groups=TEST.groups [closed/TEST.groups]
--- a/jdk/test/TEST.groups	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/TEST.groups	Wed Jul 05 23:40:06 2017 +0200
@@ -1,4 +1,4 @@
-#  Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+#  Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
 #  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 #  This code is free software; you can redistribute it and/or modify it
@@ -641,6 +641,7 @@
   java/security/PermissionCollection/Concurrent.java \
   java/security/Principal/Implies.java \
   java/security/cert/GetInstance.java \
+  java/util/Arrays/largeMemory/ParallelPrefix.java  \
   java/util/logging/DrainFindDeadlockTest.java \
   java/util/logging/LoggingMXBeanTest.java \
   java/util/logging/TestLogConfigurationDeadLock.java \
@@ -709,7 +710,6 @@
   java/nio/Buffer/Chars.java  \
   java/nio/file/Files/StreamTest.java  \
   java/security/BasicPermission/Wildcard.java \
-  java/util/Arrays/ParallelPrefix.java  \
   java/util/Arrays/SetAllTest.java  \
   java/util/BitSet/stream/BitSetStreamTest.java  \
   java/util/Collection/CollectionDefaults.java  \
--- a/jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,8 +26,10 @@
  * @bug 7130985
  * @summary Four helper classes missing in Sun JDK
  * @library /lib/testlibrary /test/lib
- * @build jdk.testlibrary.*
  * @modules java.corba
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.testlibrary.*
  * @run main CorbaExceptionsCompileTest
  */
 
--- a/jdk/test/com/sun/crypto/provider/CICO/PBEFunc/CipherNCFuncTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/com/sun/crypto/provider/CICO/PBEFunc/CipherNCFuncTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,8 @@
  * @test
  * @bug 8048604
  * @library ../ /test/lib
+ * @build jdk.test.lib.RandomFactory
+ * @run main CipherNCFuncTest
  * @summary This test verifies the assertion "There should be no transformation
  *          on the plaintext/ciphertext in encryption/decryption mechanism" for
  *          feature "NullCipher".
--- a/jdk/test/java/io/FilePermission/FilePermissionCollectionMerge.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/io/FilePermission/FilePermissionCollectionMerge.java	Wed Jul 05 23:40:06 2017 +0200
@@ -28,6 +28,8 @@
  * @summary FilePermissionCollection merges incorrectly
  * @modules java.base/sun.security.util
  * @library /test/lib
+ * @build jdk.test.lib.Asserts
+ * @run main FilePermissionCollectionMerge
  */
 
 import sun.security.util.FilePermCompat;
--- a/jdk/test/java/io/FilePermission/Invalid.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/io/FilePermission/Invalid.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,6 +27,8 @@
  * @bug 8167646
  * @summary Better invalid FilePermission
  * @library /test/lib
+ * @build jdk.test.lib.Asserts
+ * @run main Invalid
  */
 
 import jdk.test.lib.Asserts;
--- a/jdk/test/java/io/FilePermission/MergeName.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/io/FilePermission/MergeName.java	Wed Jul 05 23:40:06 2017 +0200
@@ -37,6 +37,13 @@
  * @bug 8170364
  * @summary FilePermission path modified during merge
  * @library /test/lib
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
+ * @run main MergeName
  */
 
 public class MergeName {
--- a/jdk/test/java/io/FilePermission/ReadFileOnPath.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/io/FilePermission/ReadFileOnPath.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,6 +27,13 @@
  * @library /lib/testlibrary /test/lib
  * @modules java.base/jdk.internal.misc
  *          jdk.compiler
+ * @build jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run main ReadFileOnPath
  * @summary Still able to read file on the same path
  */
--- a/jdk/test/java/io/InputStream/ReadAllBytes.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/io/InputStream/ReadAllBytes.java	Wed Jul 05 23:40:06 2017 +0200
@@ -33,6 +33,7 @@
  * @test
  * @bug 8080835
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main ReadAllBytes
  * @summary Basic test for InputStream.readAllBytes
  * @key randomness
--- a/jdk/test/java/io/InputStream/ReadNBytes.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/io/InputStream/ReadNBytes.java	Wed Jul 05 23:40:06 2017 +0200
@@ -33,6 +33,7 @@
  * @test
  * @bug 8080835
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main ReadNBytes
  * @summary Basic test for InputStream.readNBytes
  * @key randomness
--- a/jdk/test/java/io/Serializable/class/NonSerializableTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/io/Serializable/class/NonSerializableTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,8 +25,13 @@
  * @test
  * @bug 4075221
  * @library /test/lib
- * @build jdk.test.lib.compiler.*
- * @build jdk.test.lib.process.*
+ * @build jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run testng/timeout=300 NonSerializableTest
  * @summary Enable serialize of nonSerializable Class descriptor.
  */
--- a/jdk/test/java/io/Serializable/evolution/RenamePackage/RenamePackageTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/io/Serializable/evolution/RenamePackage/RenamePackageTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,7 +26,12 @@
  * @bug 4087295 4785472
  * @library /test/lib
  * @build jdk.test.lib.compiler.CompilerUtils
- * @build jdk.test.lib.process.ProcessTools
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @build RenamePackageTest
  * @run main RenamePackageTest
  * @summary Enable resolveClass() to accommodate package renaming.
--- a/jdk/test/java/io/Serializable/failureAtomicity/FailureAtomicity.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/io/Serializable/failureAtomicity/FailureAtomicity.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,6 +27,8 @@
  * @summary Better failure atomicity for default read object.
  * @modules jdk.compiler
  * @library /test/lib
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
  * @compile FailureAtomicity.java SerialRef.java
  * @run main failureAtomicity.FailureAtomicity
  */
--- a/jdk/test/java/io/Serializable/serialver/classpath/ClasspathTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/io/Serializable/serialver/classpath/ClasspathTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,8 +25,12 @@
  * @test
  * @bug 4035147 4785472
  * @library /test/lib
+ * @build jdk.test.lib.Utils
+ * @build jdk.test.lib.Asserts
+ * @build jdk.test.lib.JDKToolFinder
  * @build jdk.test.lib.JDKToolLauncher
- * @build jdk.test.lib.process.ProcessTools
+ * @build jdk.test.lib.Platform
+ * @build jdk.test.lib.process.*
  * @build ClasspathTest
  * @run main serialver.ClasspathTest
  * @summary Test the use of the -classpath switch in the serialver application.
--- a/jdk/test/java/io/Serializable/serialver/nested/NestedTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/io/Serializable/serialver/nested/NestedTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,8 +25,12 @@
  * @test
  * @bug 4312217 4785473
  * @library /test/lib
- * @build jdk.test.lib.JDKToolLauncher
- * @build jdk.test.lib.process.ProcessTools
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @build NestedTest
  * @run main serialver.NestedTest
  * @summary  To test the use of nested class specification using the '.'
--- a/jdk/test/java/lang/Class/forName/modules/TestDriver.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/Class/forName/modules/TestDriver.java	Wed Jul 05 23:40:06 2017 +0200
@@ -43,7 +43,10 @@
  * @summary Tests for Class.forName(Module,String)
  * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler
- * @build jdk.test.lib.compiler.CompilerUtils jdk.testlibrary.ProcessTools
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.test.lib.compiler.CompilerUtils
+ *        jdk.testlibrary.ProcessTools
  *        TestDriver TestMain TestLayer
  * @run testng TestDriver
  */
--- a/jdk/test/java/lang/Double/ParseHexFloatingPoint.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/Double/ParseHexFloatingPoint.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /*
  * @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main ParseHexFloatingPoint
  * @bug 4826774 8078672
  * @summary Numerical tests for hexadecimal inputs to parse{Double, Float} (use -Dseed=X to set PRNG seed)
--- a/jdk/test/java/lang/Integer/BitTwiddle.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/Integer/BitTwiddle.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /*
  * @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main BitTwiddle
  * @bug     4495754 8078672
  * @summary Basic test for int bit twiddling (use -Dseed=X to set PRNG seed)
--- a/jdk/test/java/lang/Long/BitTwiddle.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/Long/BitTwiddle.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /*
  * @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main BitTwiddle
  * @bug     4495754 8078672
  * @summary Basic test for long bit twiddling (use -Dseed=X to set PRNG seed)
--- a/jdk/test/java/lang/Math/CubeRootTests.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/Math/CubeRootTests.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /*
  * @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main CubeRootTests
  * @bug 4347132 4939441 8078672
  * @summary Tests for {Math, StrictMath}.cbrt (use -Dseed=X to set PRNG seed)
--- a/jdk/test/java/lang/Math/HypotTests.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/Math/HypotTests.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /*
  * @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main HypotTests
  * @bug 4851638 4939441 8078672
  * @summary Tests for {Math, StrictMath}.hypot (use -Dseed=X to set PRNG seed)
--- a/jdk/test/java/lang/Math/IeeeRecommendedTests.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/Math/IeeeRecommendedTests.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /*
  * @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main IeeeRecommendedTests
  * @bug 4860891 4826732 4780454 4939441 4826652 8078672
  * @summary Tests for IEEE 754[R] recommended functions and similar methods (use -Dseed=X to set PRNG seed)
--- a/jdk/test/java/lang/Math/Log1pTests.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/Math/Log1pTests.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /*
  * @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main Log1pTests
  * @bug 4851638 4939441 8078672
  * @summary Tests for {Math, StrictMath}.log1p (use -Dseed=X to set PRNG seed)
--- a/jdk/test/java/lang/Math/MultiplicationTests.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/Math/MultiplicationTests.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /*
  * @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main MultiplicationTests
  * @bug 5100935
  * @summary Tests for multiplication methods (use -Dseed=X to set PRNG seed)
--- a/jdk/test/java/lang/ProcessHandle/Basic.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/ProcessHandle/Basic.java	Wed Jul 05 23:40:06 2017 +0200
@@ -39,6 +39,12 @@
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          jdk.management
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run testng Basic
  * @summary Basic tests for ProcessHandler
  * @author Roger Riggs
--- a/jdk/test/java/lang/ProcessHandle/InfoTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/ProcessHandle/InfoTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -51,7 +51,12 @@
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          jdk.management
- * @build jdk.test.lib.Platform jdk.test.lib.Utils
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run testng InfoTest
  * @summary Functions of ProcessHandle.Info
  * @author Roger Riggs
--- a/jdk/test/java/lang/ProcessHandle/OnExitTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/ProcessHandle/OnExitTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -43,7 +43,12 @@
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          jdk.management
- * @build jdk.test.lib.Platform jdk.test.lib.Utils
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run testng OnExitTest
  * @summary Functions of Process.onExit and ProcessHandle.onExit
  * @author Roger Riggs
--- a/jdk/test/java/lang/ProcessHandle/TreeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/ProcessHandle/TreeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -48,6 +48,11 @@
  * @modules java.base/jdk.internal.misc
  *          jdk.management
  * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run testng/othervm TreeTest
  * @summary Test counting and JavaChild.spawning and counting of Processes.
  * @author Roger Riggs
--- a/jdk/test/java/lang/StackTraceElement/WithClassLoaderName.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/StackTraceElement/WithClassLoaderName.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,7 +27,8 @@
  * @summary Basic test StackTraceElement with class loader names
  * @library lib /lib/testlibrary /test/lib
  * @modules jdk.compiler
- * @build m1/* WithClassLoaderName
+ * @build jdk.test.lib.compiler.CompilerUtils
+ *        m1/* WithClassLoaderName
  * @run main/othervm m1/com.app.Main
  * @run main/othervm WithClassLoaderName
  */
--- a/jdk/test/java/lang/StackWalker/StackWalkTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/StackWalker/StackWalkTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -38,6 +38,7 @@
  * @bug 8140450
  * @summary Stack Walk Test (use -Dseed=X to set PRNG seed)
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @compile StackRecorderUtil.java
  * @run main/othervm StackWalkTest
  * @run main/othervm/java.security.policy=stackwalktest.policy StackWalkTest
--- a/jdk/test/java/lang/StrictMath/CubeRootTests.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/StrictMath/CubeRootTests.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,7 @@
  * @bug 4347132 8136799
  * @key randomness
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @build Tests
  * @build FdlibmTranslit
  * @build CubeRootTests
--- a/jdk/test/java/lang/StrictMath/ExpTests.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/StrictMath/ExpTests.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,7 @@
  * @bug 8139688
  * @key randomness
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @build Tests
  * @build FdlibmTranslit
  * @build ExpTests
--- a/jdk/test/java/lang/StrictMath/HypotTests.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/StrictMath/HypotTests.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,6 +27,7 @@
  * @key randomness
  * @summary Tests for StrictMath.hypot
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @build Tests
  * @build FdlibmTranslit
  * @build HypotTests
--- a/jdk/test/java/lang/String/CompactString/SerializationTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/String/CompactString/SerializationTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * @test
  * @bug 8077559
  * @library /test/lib
+ * @build jdk.test.lib.util.SerializationUtils
  * @summary Tests Compact String. This one is testing String serialization
  *          among -XX:+CompactStrings/-XX:-CompactStrings/LegacyString
  * @run testng/othervm -XX:+CompactStrings SerializationTest
--- a/jdk/test/java/lang/String/LiteralReplace.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/String/LiteralReplace.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /* @test
  * @bug 8058779 8054307
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run testng LiteralReplace
  * @summary Basic tests of String.replace(CharSequence, CharSequence)
  * @key randomness
--- a/jdk/test/java/lang/StringBuffer/CompactStringBufferSerialization.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/StringBuffer/CompactStringBufferSerialization.java	Wed Jul 05 23:40:06 2017 +0200
@@ -33,6 +33,7 @@
  * @test
  * @bug 8077559
  * @library /test/lib
+ * @build jdk.test.lib.util.SerializationUtils
  * @summary Tests Compact String. This one is testing StringBuffer serialization
  *          among -XX:+CompactStrings/-XX:-CompactStrings/LegacyStringBuffer
  * @run testng/othervm -XX:+CompactStrings CompactStringBufferSerialization
--- a/jdk/test/java/lang/StringBuilder/CompactStringBuilderSerialization.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/StringBuilder/CompactStringBuilderSerialization.java	Wed Jul 05 23:40:06 2017 +0200
@@ -33,6 +33,7 @@
  * @test
  * @bug 8077559
  * @library /test/lib
+ * @build jdk.test.lib.util.SerializationUtils
  * @summary Tests Compact String. This one is testing StringBuilder serialization
  *          among -XX:+CompactStrings/-XX:-CompactStrings/LegacyStringBuilder
  * @run testng/othervm -XX:+CompactStrings CompactStringBuilderSerialization
--- a/jdk/test/java/lang/Thread/ThreadStateTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/Thread/ThreadStateTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -33,6 +33,7 @@
  * @library /lib/testlibrary
  * @library /test/lib
  * @build jdk.testlibrary.*
+ * @build jdk.test.lib.LockFreeLogger
  * @build ThreadStateTest ThreadStateController
  * @run main/othervm -Xmixed ThreadStateTest
  */
--- a/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * @summary Test verifies that lambda forms are garbage collected
  * @author kshefov
  * @library /lib/testlibrary /java/lang/invoke/common
+ * @build jdk.test.lib.TimeLimitedRunner
  * @build TestMethods
  * @build LambdaFormTestCase
  * @build LFGarbageCollectedTest
--- a/jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,10 +27,11 @@
  * @key randomness
  * @summary Test verifies that lambda forms are cached when run with multiple threads
  * @author kshefov
- * @library /lib/testlibrary /java/lang/invoke/common
+ * @library /lib/testlibrary /java/lang/invoke/common /test/lib
  * @modules java.base/java.lang.invoke:open
  *          java.base/java.lang.ref:open
  *          java.management
+ * @build jdk.test.lib.TimeLimitedRunner
  * @build TestMethods
  * @build LambdaFormTestCase
  * @build LFCachingTestCase
--- a/jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,10 +27,11 @@
  * @key randomness
  * @summary Test verifies that lambda forms are cached when run with single thread
  * @author kshefov
- * @library /lib/testlibrary /java/lang/invoke/common
+ * @library /lib/testlibrary /java/lang/invoke/common /test/lib
  * @modules java.base/java.lang.ref:open
  *          java.base/java.lang.invoke:open
  *          java.management
+ * @build jdk.test.lib.TimeLimitedRunner
  * @build TestMethods
  * @build LambdaFormTestCase
  * @build LFCachingTestCase
--- a/jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java	Wed Jul 05 23:40:06 2017 +0200
@@ -21,7 +21,7 @@
  * questions.
  */
 
-import jdk.testlibrary.TimeLimitedRunner;
+import jdk.test.lib.TimeLimitedRunner;
 import jdk.testlibrary.Utils;
 import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
 import test.java.lang.invoke.lib.Helper;
--- a/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -23,8 +23,8 @@
 
 package test.java.lang.invoke.MethodHandles;
 
+import jdk.test.lib.TimeLimitedRunner;
 import jdk.testlibrary.Asserts;
-import jdk.testlibrary.TimeLimitedRunner;
 import jdk.testlibrary.Utils;
 import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
 import test.java.lang.invoke.lib.Helper;
@@ -43,7 +43,8 @@
 import java.util.function.Supplier;
 
 /* @test
- * @library /lib/testlibrary /java/lang/invoke/common
+ * @library /lib/testlibrary /java/lang/invoke/common /test/lib
+ * @build jdk.test.lib.TimeLimitedRunner
  * @compile CatchExceptionTest.java
  * @run main/othervm -esa test.java.lang.invoke.MethodHandles.CatchExceptionTest
  * @key intermittent randomness
--- a/jdk/test/java/lang/ref/CleanerTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/lang/ref/CleanerTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -51,7 +51,12 @@
  * @test
  * @library /lib/testlibrary /test/lib
  * @build sun.hotspot.WhiteBox
- * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @modules java.base/jdk.internal
  *          java.base/jdk.internal.misc
  *          java.base/jdk.internal.ref
--- a/jdk/test/java/math/BigDecimal/StringConstructor.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/math/BigDecimal/StringConstructor.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /*
  * @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main StringConstructor
  * @bug 4103117 4331084 4488017 4490929 6255285 6268365 8074460 8078672
  * @summary Tests the BigDecimal string constructor (use -Dseed=X to set PRNG seed).
--- a/jdk/test/java/math/BigInteger/BigIntegerTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/math/BigInteger/BigIntegerTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /*
  * @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main BigIntegerTest
  * @bug 4181191 4161971 4227146 4194389 4823171 4624738 4812225 4837946 4026465 8074460 8078672 8032027
  * @summary tests methods in BigInteger (use -Dseed=X to set PRNG seed)
--- a/jdk/test/java/math/BigInteger/ModPow65537.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/math/BigInteger/ModPow65537.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /*
  * @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main ModPow65537
  * @bug 4891312 8074460 8078672
  * @summary verify that modPow() not broken by the special case for 65537 (use -Dseed=X to set PRNG seed)
--- a/jdk/test/java/math/BigInteger/PrimeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/math/BigInteger/PrimeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,7 @@
 /*
  * @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main PrimeTest
  * @bug 8026236 8074460 8078672
  * @summary test primality verification methods in BigInteger (use -Dseed=X to set PRNG seed)
--- a/jdk/test/java/net/Inet6Address/B6206527.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/Inet6Address/B6206527.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,8 @@
  * @bug 6206527
  * @summary "cannot assign address" when binding ServerSocket on Suse 9
  * @library /test/lib
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Platform
  * @run main B6206527
  */
 
--- a/jdk/test/java/net/Inet6Address/B6558853.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/Inet6Address/B6558853.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,8 @@
  * @bug 6558853
  * @summary  getHostAddress() on connections using IPv6 link-local addrs should have zone id
  * @library /test/lib
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Platform
  * @run main B6558853
  */
 
--- a/jdk/test/java/net/InetAddress/CheckJNI.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/InetAddress/CheckJNI.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,8 @@
  * @bug 4889870 4890033
  * @summary java -Xcheck:jni failing in net code on Solaris / [Datagram]Socket.getLocalAddress() failure
  * @library /test/lib
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Platform
  * @run main/othervm -Xcheck:jni CheckJNI
  */
 
--- a/jdk/test/java/net/InetAddress/ptr/Lookup.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/InetAddress/ptr/Lookup.java	Wed Jul 05 23:40:06 2017 +0200
@@ -28,8 +28,12 @@
  * @summary Test that reverse lookups of IPv4 addresses work when IPv6
  *          is enabled
  * @library /test/lib
- * @build jdk.test.lib.JDKToolFinder
- *        jdk.test.lib.process.OutputAnalyzer
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  *        Lookup
  * @run main Lookup root
  *
--- a/jdk/test/java/net/MulticastSocket/JoinLeave.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/MulticastSocket/JoinLeave.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,8 @@
  * @bug 4091811 4148753 4102731
  * @summary Test java.net.MulticastSocket joinGroup and leaveGroup
  * @library /test/lib
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Platform
  * @run main JoinLeave
  */
 
--- a/jdk/test/java/net/MulticastSocket/SetLoopbackMode.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/MulticastSocket/SetLoopbackMode.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,8 @@
  * @bug 4686717
  * @summary Test MulticastSocket.setLoopbackMode
  * @library /test/lib
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Platform
  * @run main/othervm SetLoopbackMode
  */
 
--- a/jdk/test/java/net/NetworkConfigurationProbe.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/NetworkConfigurationProbe.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,13 @@
  * @test
  * @summary NOT A TEST. Captures the network interface configuration.
  * @library /test/lib
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run main NetworkConfigurationProbe
  */
 
--- a/jdk/test/java/net/ServerSocket/AcceptCauseFileDescriptorLeak.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/ServerSocket/AcceptCauseFileDescriptorLeak.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,8 +30,12 @@
  *          can cause fd leak
  * @requires (os.family != "windows")
  * @library /test/lib
- * @build jdk.test.lib.JDKToolFinder
- *        jdk.test.lib.process.OutputAnalyzer
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  *        AcceptCauseFileDescriptorLeak
  * @run main/othervm AcceptCauseFileDescriptorLeak root
  */
--- a/jdk/test/java/net/Socket/LinkLocal.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/Socket/LinkLocal.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,6 +27,8 @@
  * @summary Connecting to a link-local IPv6 address should not
  *          causes a SocketException to be thrown.
  * @library /test/lib
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Platform
  * @run main LinkLocal
  */
 
--- a/jdk/test/java/net/Socket/OldSocketImplTestDriver.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/Socket/OldSocketImplTestDriver.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,7 +30,12 @@
  * @test
  * @bug 6449565
  * @library /test/lib
- * @build jdk.test.lib.process.ProcessTools
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run main OldSocketImplTestDriver
  * @summary Test driver for OdlSocketImpl
  */
--- a/jdk/test/java/net/SocketPermission/SocketPermissionTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/SocketPermission/SocketPermissionTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,8 @@
  * @bug 8047031
  * @summary SocketPermission tests for legacy socket types
  * @library /test/lib
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Platform
  * @run testng/othervm SocketPermissionTest
  */
 
--- a/jdk/test/java/net/URLClassLoader/closetest/CloseTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/URLClassLoader/closetest/CloseTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,7 +30,10 @@
  * @library ../../../../com/sun/net/httpserver
  *          /lib/testlibrary
  *          /test/lib
- * @build FileServerHandler JarUtils jdk.test.lib.compiler.CompilerUtils
+ * @build jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.test.lib.Platform
+ *        FileServerHandler JarUtils
  * @run main/othervm CloseTest
  * @summary URL-downloaded jar files can consume all available file descriptors
  */
--- a/jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,7 +26,10 @@
  * @bug 6899919
  * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler
- * @build JarUtils jdk.test.lib.compiler.CompilerUtils
+ * @build jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.test.lib.Platform
+ *        JarUtils
  * @run main/othervm GetResourceAsStream
  */
 
--- a/jdk/test/java/net/URLClassLoader/getresourceasstream/TestDriver.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/URLClassLoader/getresourceasstream/TestDriver.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,8 +26,12 @@
  * @bug 5103449
  * @summary REGRESSION: getResourceAsStream is broken in JDK1.5.0-rc
  * @library /test/lib
- * @build jdk.test.lib.JDKToolFinder
- *        jdk.test.lib.process.ProcessTools
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  *        Test
  * @run main/othervm TestDriver
  */
--- a/jdk/test/java/net/URLClassLoader/sealing/CheckSealedTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/URLClassLoader/sealing/CheckSealedTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,8 +26,12 @@
  * @bug 4244970
  * @summary Test to see if sealing violation is detected correctly
  * @library /test/lib
- * @build jdk.test.lib.JDKToolFinder
- *        jdk.test.lib.process.OutputAnalyzer
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run main CheckSealedTest
  */
 
--- a/jdk/test/java/net/URLConnection/6212146/TestDriver.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/URLConnection/6212146/TestDriver.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,8 +27,12 @@
  * @summary URLConnection.connect() fails on JAR Entry it creates
  * file handler leak
  * @library /test/lib
- * @build jdk.test.lib.JDKToolFinder
- *        jdk.test.lib.process.ProcessTools
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  *        Test
  * @run main/othervm TestDriver
  */
--- a/jdk/test/java/net/httpclient/RequestBodyTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/httpclient/RequestBodyTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,8 @@
  * @library /lib/testlibrary/ /test/lib
  * @compile ../../../com/sun/net/httpserver/LogFilter.java
  * @compile ../../../com/sun/net/httpserver/FileServerHandler.java
+ * @build jdk.test.lib.Platform
+ * @build jdk.test.lib.util.FileUtils
  * @build LightWeightHttpServer
  * @build jdk.testlibrary.SimpleSSLContext
  * @run testng/othervm RequestBodyTest
--- a/jdk/test/java/net/ipv6tests/B6521014.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/ipv6tests/B6521014.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,8 @@
  * @bug 6521014 6543428
  * @summary IOException thrown when Socket tries to bind to an local IPv6 address on SuSE Linux
  * @library /test/lib
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Platform
  * @run main B6521014
  */
 
--- a/jdk/test/java/net/spi/URLStreamHandlerProvider/Basic.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/net/spi/URLStreamHandlerProvider/Basic.java	Wed Jul 05 23:40:06 2017 +0200
@@ -56,7 +56,9 @@
  * @modules jdk.compiler
  * @summary Basic test for URLStreamHandlerProvider
  * @library /lib/testlibrary /test/lib
- * @build jdk.testlibrary.JDKToolFinder
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.testlibrary.JDKToolFinder
  * @compile Basic.java Child.java
  * @run main Basic
  */
--- a/jdk/test/java/nio/Buffer/LimitDirectMemoryNegativeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/Buffer/LimitDirectMemoryNegativeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -28,6 +28,12 @@
  *          various bad values fail to launch the VM
  * @requires (os.arch == "x86_64") | (os.arch == "amd64") | (os.arch == "sparcv9")
  * @library /test/lib
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  *
  * @run main LimitDirectMemoryNegativeTest foo
  * @run main LimitDirectMemoryNegativeTest 10kmt
--- a/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,7 @@
  * @bug 4607272 6842687 6878369 6944810 7023403
  * @summary Unit test for AsynchronousSocketChannel(use -Dseed=X to set PRNG seed)
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main Basic -skipSlowConnectTest
  * @key randomness intermittent
  */
--- a/jdk/test/java/nio/channels/DatagramChannel/BasicMulticastTests.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/channels/DatagramChannel/BasicMulticastTests.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,7 +25,9 @@
  * @bug 4527345
  * @summary Unit test for DatagramChannel's multicast support
  * @library /test/lib
- * @build BasicMulticastTests
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Platform
+ *        BasicMulticastTests
  * @run main BasicMulticastTests
  */
 
--- a/jdk/test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,7 +25,9 @@
  * @bug 4527345 7026376 6633549
  * @summary Unit test for DatagramChannel's multicast support
  * @library /test/lib
- * @build MulticastSendReceiveTests
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Platform
+ *        MulticastSendReceiveTests
  * @run main MulticastSendReceiveTests
  * @run main/othervm -Djava.net.preferIPv4Stack=true MulticastSendReceiveTests
  * @key randomness
--- a/jdk/test/java/nio/channels/DatagramChannel/Promiscuous.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/channels/DatagramChannel/Promiscuous.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,7 +26,9 @@
  * @summary Test for interference when two sockets are bound to the same
  *   port but joined to different multicast groups
  * @library /test/lib
- * @build Promiscuous
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Platform
+ *        Promiscuous
  * @run main Promiscuous
  * @run main/othervm -Djava.net.preferIPv4Stack=true Promiscuous
  * @key randomness
--- a/jdk/test/java/nio/channels/FileChannel/Transfer.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/channels/FileChannel/Transfer.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,7 @@
  * @summary Test FileChannel.transferFrom and transferTo (use -Dseed=X to set PRNG seed)
  * @library ..
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run testng/timeout=300 Transfer
  * @key randomness
  */
--- a/jdk/test/java/nio/channels/Selector/LotsOfUpdatesTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/channels/Selector/LotsOfUpdatesTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -28,7 +28,13 @@
  *     Solaris if maximum number of file descriptors is less than 10000
  * @requires (os.family != "windows")
  * @library /test/lib
- * @build LotsOfUpdates
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
+ *        LotsOfUpdates
  * @run main LotsOfUpdatesTest
  */
 
--- a/jdk/test/java/nio/channels/SocketChannel/VectorIO.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/channels/SocketChannel/VectorIO.java	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 /* @test
  * @summary Test socketchannel vector IO (use -Dseed=X to set PRNG seed)
  * @library .. /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main VectorIO
  * @key randomness
  */
--- a/jdk/test/java/nio/file/FileStore/Basic.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/file/FileStore/Basic.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,8 @@
  * @summary Unit test for java.nio.file.FileStore
  * @key intermittent
  * @library .. /test/lib
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
  * @run main Basic
  */
 
--- a/jdk/test/java/nio/file/FileSystem/Basic.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/file/FileSystem/Basic.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,8 @@
  * @bug 4313887 6838333 8132497
  * @summary Unit test for java.nio.file.FileSystem
  * @library .. /test/lib
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
  * @run main/othervm Basic
  */
 
--- a/jdk/test/java/nio/file/Files/CopyAndMove.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/file/Files/CopyAndMove.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,7 +25,8 @@
  * @bug 4313887 6838333 6917021 7006126 6950237 8006645
  * @summary Unit test for java.nio.file.Files copy and move methods (use -Dseed=X to set PRNG seed)
  * @library .. /test/lib
- * @build CopyAndMove PassThroughFileSystem
+ * @build jdk.test.lib.RandomFactory
+ *        CopyAndMove PassThroughFileSystem
  * @run main/othervm CopyAndMove
  * @key randomness
  */
--- a/jdk/test/java/nio/file/Files/DeleteOnClose.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/file/Files/DeleteOnClose.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,13 @@
  * @bug 4313887
  * @summary Unit test for DELETE_ON_CLOSE open option
  * @library /test/lib ..
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
+ * @run main DeleteOnClose
  */
 
 import java.io.IOException;
--- a/jdk/test/java/nio/file/Files/StreamLinesTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/file/Files/StreamLinesTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,7 @@
  * @bug 8072773
  * @library /test/lib /lib/testlibrary/bootlib
  * @build java.base/java.util.stream.OpTestCase
+ *        jdk.test.lib.RandomFactory
  * @run testng/othervm StreamLinesTest
  * @summary Tests streams returned from Files.lines, primarily focused on
  *          testing the file-channel-based stream stream with supported
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/file/Files/walkFileTree/FindTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4313887 6907737
+ * @summary Tests that walkFileTree is consistent with the native find program
+ * @requires (os.family != "windows")
+ * @library /test/lib
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
+ *        CreateFileTree
+ * @run testng/othervm -Djava.io.tmpdir=. FindTest
+ */
+
+import java.io.IOException;
+import java.nio.file.FileSystemLoopException;
+import java.nio.file.FileVisitOption;
+import java.nio.file.FileVisitResult;
+import java.nio.file.FileVisitor;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import jdk.test.lib.process.OutputAnalyzer;
+import jdk.test.lib.process.ProcessTools;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+public class FindTest {
+
+    private static final Random rand = new Random();
+    private static final boolean isAIX = System.getProperty("os.name").equals("AIX");
+    private static Path top;
+    private static String TOP;
+
+    @BeforeClass
+    public static void createFileTree() throws Exception {
+        top = CreateFileTree.create();
+        TOP = top.toAbsolutePath().toString();
+    }
+
+    @Test
+    public void printTreeTest() throws Throwable {
+        // print the file tree and compare output with find(1)
+        assertOutputEquals(printFileTree(top), runFind("find", TOP));
+    }
+
+    @Test
+    public void printTreeFollowLinkTest() throws Throwable {
+        // print the file tree, following links, and compare output with find(1).
+
+        // On AIX "find -follow" may core dump on recursive links without '-L'
+        // see: http://www-01.ibm.com/support/docview.wss?uid=isg1IV28143
+        String[] cmds = isAIX
+                      ? new String[]{"find", "-L", TOP, "-follow"}
+                      : new String[]{"find", TOP, "-follow"};
+        OutputAnalyzer expected = runFind(cmds);
+
+        // Some versions of find(1) output cycles (sym links to ancestor
+        // directories), other versions do not. For that reason we run
+        // PrintFileTree with the -printCycles option when the output without
+        // this option differs to find(1).
+        try {
+            assertOutputEquals(printFileTree(top, "-follow"), expected);
+        } catch (AssertionError x) {
+            assertOutputEquals(printFileTree(top, "-follow", "-printCycles"), expected);
+        }
+    }
+
+    private void assertOutputEquals(List<String> actual, OutputAnalyzer expected)
+            throws IOException {
+        List<String> expectedList = Arrays.asList(expected.getStdout()
+                                          .split(System.lineSeparator()));
+        assertEquals(actual.size(), expectedList.size());
+        assertTrue(actual.removeAll(expectedList));
+    }
+
+    private OutputAnalyzer runFind(String... cmds) throws Throwable {
+        return ProcessTools.executeCommand(cmds);
+    }
+
+    /**
+     * Invokes Files.walkFileTree to traverse a file tree and prints
+     * each of the directories and files. The -follow option causes symbolic
+     * links to be followed and the -printCycles option will print links
+     * where the target of the link is an ancestor directory.
+     */
+    private static List<String> printFileTree(Path dir, String... opts) throws Exception {
+        List<Path> fileTreeList = new ArrayList<>();
+
+        List<String> optsList = Arrays.asList(opts);
+        boolean followLinks = optsList.contains("-follow");
+        boolean reportCycles = optsList.contains("-printCycles");
+
+        Set<FileVisitOption> options = new HashSet<>();
+        if (followLinks)
+            options.add(FileVisitOption.FOLLOW_LINKS);
+
+        Files.walkFileTree(dir, options, Integer.MAX_VALUE, new FileVisitor<Path>() {
+            @Override
+            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
+                fileTreeList.add(dir);
+                return FileVisitResult.CONTINUE;
+            }
+            @Override
+            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
+                fileTreeList.add(file);
+                return FileVisitResult.CONTINUE;
+            }
+            @Override
+            public FileVisitResult postVisitDirectory(Path dir, IOException exc)
+                throws IOException
+            {
+                if (exc != null)
+                    throw exc;
+                return FileVisitResult.CONTINUE;
+            }
+            @Override
+            public FileVisitResult visitFileFailed(Path file, IOException exc)
+                throws IOException
+            {
+                if (followLinks && (exc instanceof FileSystemLoopException)) {
+                    if (reportCycles)
+                        fileTreeList.add(file);
+                    return FileVisitResult.CONTINUE;
+                } else {
+                    throw exc;
+                }
+            }
+        });
+
+        return fileTreeList.stream()
+                           .map(f -> f.toAbsolutePath().toString())
+                           .collect(Collectors.toCollection(ArrayList::new));
+    }
+}
--- a/jdk/test/java/nio/file/Files/walkFileTree/PrintFileTree.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2008, 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
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * Invokes Files.walkFileTree to traverse a file tree and prints
- * each of the directories and files. The -follow option causes symbolic
- * links to be followed and the -printCycles option will print links
- * where the target of the link is an ancestor directory.
- */
-
-public class PrintFileTree {
-
-    public static void main(String[] args) throws Exception {
-        boolean followLinks = false;
-        boolean printCycles = false;
-        int i = 0;
-        while (i < (args.length-1)) {
-            switch (args[i]) {
-                case "-follow"      : followLinks = true; break;
-                case "-printCycles" : printCycles = true;  break;
-                default:
-                    throw new RuntimeException(args[i] + " not recognized");
-            }
-            i++;
-        }
-        Path dir = Paths.get(args[i]);
-
-        Set<FileVisitOption> options = new HashSet<FileVisitOption>();
-        if (followLinks)
-            options.add(FileVisitOption.FOLLOW_LINKS);
-
-        final boolean follow = followLinks;
-        final boolean reportCycles = printCycles;
-        Files.walkFileTree(dir, options, Integer.MAX_VALUE, new FileVisitor<Path>() {
-            @Override
-            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
-                System.out.println(dir);
-                return FileVisitResult.CONTINUE;
-            }
-            @Override
-            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
-                System.out.println(file);
-                return FileVisitResult.CONTINUE;
-            }
-            @Override
-            public FileVisitResult postVisitDirectory(Path dir, IOException exc)
-                throws IOException
-            {
-                if (exc != null)
-                    throw exc;
-                return FileVisitResult.CONTINUE;
-            }
-            @Override
-            public FileVisitResult visitFileFailed(Path file, IOException exc)
-                throws IOException
-            {
-                if (follow && (exc instanceof FileSystemLoopException)) {
-                    if (reportCycles)
-                        System.out.println(file);
-                    return FileVisitResult.CONTINUE;
-                } else {
-                    throw exc;
-                }
-            }
-        });
-    }
-}
--- a/jdk/test/java/nio/file/Files/walkFileTree/find.sh	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-#
-# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4313887 6907737
-# @summary Tests that walkFileTree is consistent with the native find program
-# @build CreateFileTree PrintFileTree
-# @run shell find.sh
-
-# if TESTJAVA isn't set then we assume an interactive run.
-
-if [ -z "$TESTJAVA" ]; then
-    TESTSRC=.
-    TESTCLASSES=.
-    JAVA=java
-else
-    JAVA="${TESTJAVA}/bin/java"
-fi
-
-OS=`uname -s`
-case "$OS" in
-    Windows_* | CYGWIN* )
-        echo "This test does not run on Windows" 
-        exit 0
-        ;;
-    AIX )
-        CLASSPATH=${TESTCLASSES}:${TESTSRC}
-        # On AIX "find -follow" may core dump on recursive links without '-L'
-        # see: http://www-01.ibm.com/support/docview.wss?uid=isg1IV28143
-        FIND_FOLLOW_OPT="-L"
-        ;;
-    * )
-        FIND_FOLLOW_OPT=
-        CLASSPATH=${TESTCLASSES}:${TESTSRC}
-        ;;
-esac
-export CLASSPATH
-
-# create the file tree
-ROOT=`$JAVA CreateFileTree`
-if [ $? != 0 ]; then exit 1; fi
-
-failures=0
-
-# print the file tree and compare output with find(1)
-$JAVA ${TESTVMOPTS} PrintFileTree "$ROOT" > out1
-find "$ROOT" > out2
-diff out1 out2
-if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
-
-# repeat test following links. Some versions of find(1) output
-# cycles (sym links to ancestor directories), other versions do
-# not. For that reason we run PrintFileTree with the -printCycles
-# option when the output without this option differs to find(1).
-find $FIND_FOLLOW_OPT "$ROOT" -follow > out1
-$JAVA ${TESTVMOPTS} PrintFileTree -follow "$ROOT" > out2
-diff out1 out2
-if [ $? != 0 ];
-  then 
-    # re-run printing cycles to stdout
-    $JAVA ${TESTVMOPTS} PrintFileTree -follow -printCycles "$ROOT" > out2
-    diff out1 out2
-    if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
-  fi
-
-# clean-up
-rm -r "$ROOT"
-
-echo ''
-if [ $failures -gt 0 ];
-  then echo "$failures test(s) failed";
-  else echo "Test passed"; fi
-exit $failures
--- a/jdk/test/java/nio/file/WatchService/LotsOfEvents.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/nio/file/WatchService/LotsOfEvents.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,7 @@
  * @summary Tests WatchService behavior when lots of events are pending (use -Dseed=X to set PRNG seed)
  * @library ..
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main/timeout=180 LotsOfEvents
  * @key randomness
  */
--- a/jdk/test/java/rmi/registry/serialFilter/RegistryFilterTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/rmi/registry/serialFilter/RegistryFilterTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,24 +21,18 @@
  * questions.
  */
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.ObjectOutputStream;
 import java.io.Serializable;
 
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
+import java.rmi.AlreadyBoundException;
 import java.rmi.MarshalledObject;
 import java.rmi.NotBoundException;
 import java.rmi.Remote;
 import java.rmi.RemoteException;
-import java.rmi.AlreadyBoundException;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.registry.Registry;
+import java.security.Security;
 import java.util.Objects;
-import java.security.Security;
 
 import org.testng.Assert;
 import org.testng.TestNG;
@@ -57,7 +51,8 @@
  * @summary Test filters for the RMI Registry
  * @run testng/othervm RegistryFilterTest
  * @run testng/othervm
- *        -Dsun.rmi.registry.registryFilter=!java.lang.Long;!RegistryFilterTest$RejectableClass
+ *        -Dsun.rmi.registry.registryFilter=!java.lang.Long;!RegistryFilterTest$RejectableClass;maxdepth=19
+ *        -Dtest.maxdepth=19
  *        RegistryFilterTest
  * @run testng/othervm/policy=security.policy
  *        -Djava.security.properties=${test.src}/java.security-extra1
@@ -68,6 +63,8 @@
     private static int port;
     private static Registry registry;
 
+    static final int REGISTRY_MAX_DEPTH = 20;
+
     static final int REGISTRY_MAX_ARRAY = 10000;
 
     static final String registryFilter =
@@ -125,7 +122,7 @@
 
 
     /*
-     * Test registry rejects an object with the max array size  + 1.
+     * Test registry rejects an object with the max array size + 1.
      */
     @Test(dataProvider="bindData")
     public void simpleBind(String name, Remote obj, boolean blacklisted) throws RemoteException, AlreadyBoundException, NotBoundException {
@@ -139,9 +136,9 @@
     }
 
     /*
-    * Test registry rejects an object with a well known class
-    * if blacklisted in the security properties.
-    */
+     * Test registry rejects an object with a well known class
+     * if blacklisted in the security properties.
+     */
     @Test
     public void simpleRejectableClass() throws RemoteException, AlreadyBoundException, NotBoundException {
         RejectableClass r1 = null;
@@ -150,9 +147,46 @@
             r1 = new RejectableClass();
             registry.bind(name, r1);
             registry.unbind(name);
-            Assert.assertNull(registryFilter, "Registry filter should not have rejected");
+            Assert.assertNull(registryFilter, "Registry filter should have rejected");
+        } catch (Exception rex) {
+            Assert.assertNotNull(registryFilter, "Registry filter should not have rejected");
+        }
+    }
+
+    /*
+     * Test registry does not reject an object with depth at the built-in limit.
+     */
+    @Test
+    public void simpleDepthBuiltinNonRejectable() throws RemoteException, AlreadyBoundException, NotBoundException {
+        int depthOverride = Integer.getInteger("test.maxdepth", REGISTRY_MAX_DEPTH);
+        depthOverride = Math.min(depthOverride, REGISTRY_MAX_DEPTH);
+        System.out.printf("overrideDepth: %d, filter: %s%n", depthOverride, registryFilter);
+        try {
+            String name = "reject2";
+            DepthRejectableClass r1 = DepthRejectableClass.create(depthOverride);
+            registry.bind(name, r1);
+            registry.unbind(name);
         } catch (Exception rex) {
-            Assert.assertNotNull(registryFilter, "Registry filter should have rejected");
+            Assert.fail("Registry filter should not have rejected depth: "
+                            + depthOverride);
+        }
+    }
+
+    /*
+     * Test registry rejects an object with depth at the limit + 1.
+     */
+    @Test
+    public void simpleDepthRejectable() throws RemoteException, AlreadyBoundException, NotBoundException {
+        int depthOverride = Integer.getInteger("test.maxdepth", REGISTRY_MAX_DEPTH);
+        depthOverride = Math.min(depthOverride, REGISTRY_MAX_DEPTH);
+        System.out.printf("overrideDepth: %d, filter: %s%n", depthOverride, registryFilter);
+        try {
+            String name = "reject3";
+            DepthRejectableClass r1 = DepthRejectableClass.create(depthOverride + 1);
+            registry.bind(name, r1);
+            Assert.fail("Registry filter should have rejected depth: " + depthOverride + 1);
+        } catch (Exception rex) {
+            // Rejection expected
         }
     }
 
@@ -173,6 +207,7 @@
             return super.toString() + "//" + Objects.toString(obj);
         }
     }
+
     /**
      * A simple Serializable Remote object that is passed by value.
      * It and its contents are checked by the Registry serial filter.
@@ -183,4 +218,25 @@
         RejectableClass() {}
     }
 
+    /**
+     * A simple Serializable Remote object that is passed by value.
+     * It and its contents are checked by the Registry serial filter.
+     */
+    static class DepthRejectableClass implements Serializable, Remote {
+        private static final long serialVersionUID = 362498820763181264L;
+        private final DepthRejectableClass next;
+
+        private DepthRejectableClass(DepthRejectableClass next) {
+            this.next = next;
+        }
+
+        static DepthRejectableClass create(int depth) {
+            DepthRejectableClass next = new DepthRejectableClass(null);
+            for (int i = 1; i < depth; i++) {
+                next = new DepthRejectableClass(next);
+            }
+            return next;
+        }
+    }
+
 }
--- a/jdk/test/java/security/AccessController/DoPrivAccompliceTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/security/AccessController/DoPrivAccompliceTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -42,7 +42,13 @@
  * DoPrivAccmplice.jar.
  *
  * @library /test/lib
- *
+ * @build jdk.test.lib.util.JarUtils
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run main/othervm DoPrivAccompliceTest
  */
 
--- a/jdk/test/java/security/KeyStore/PKCS12/EntryProtectionTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/security/KeyStore/PKCS12/EntryProtectionTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -42,6 +42,8 @@
  * specified by different PBE algorithms (use -Dseed=X to set PRNG seed)
  * @library /test/lib /lib/testlibrary ../
  * @key randomness
+ * @build jdk.test.lib.RandomFactory
+ * @run main EntryProtectionTest
  */
 public class EntryProtectionTest {
     private static final char[] PASSWORD = "passwd".toCharArray();
--- a/jdk/test/java/security/MessageDigest/TestDigestIOStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/security/MessageDigest/TestDigestIOStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -41,6 +41,7 @@
  * @author Kevin Liu
  * @key randomness
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main/timeout=180 TestDigestIOStream
  */
 
--- a/jdk/test/java/security/MessageDigest/TestSameLength.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/security/MessageDigest/TestSameLength.java	Wed Jul 05 23:40:06 2017 +0200
@@ -36,6 +36,8 @@
  * @author Kevin Liu
  * @key randomness
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
+ * @run main TestSameLength
  */
 
 public class TestSameLength {
--- a/jdk/test/java/security/MessageDigest/TestSameValue.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/security/MessageDigest/TestSameValue.java	Wed Jul 05 23:40:06 2017 +0200
@@ -37,6 +37,8 @@
  * @author Kevin Liu
  * @key randomness
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
+ * @run main TestSameValue
  */
 
 public class TestSameValue {
--- a/jdk/test/java/security/Policy/ExtensiblePolicy/ExtensiblePolicyWithJarTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/security/Policy/ExtensiblePolicy/ExtensiblePolicyWithJarTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -34,6 +34,7 @@
  * @bug 8050402
  * @summary Check policy is extensible with user defined permissions
  * @library /lib/testlibrary /test/lib
+ * @build jdk.test.lib.util.JarUtils
  * @compile TVJar/TVPermission.java
  * @run main ExtensiblePolicyWithJarTest
  */
--- a/jdk/test/java/security/SecureRandom/DrbgParametersSpec.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/security/SecureRandom/DrbgParametersSpec.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,8 @@
  * @bug 8051408 8158534
  * @summary Make sure DrbgParameters coded as specified
  * @library /test/lib
+ * @build jdk.test.lib.Asserts
+ * @run main DrbgParametersSpec
  */
 
 import jdk.test.lib.Asserts;
--- a/jdk/test/java/security/Signature/Offsets.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/security/Signature/Offsets.java	Wed Jul 05 23:40:06 2017 +0200
@@ -42,6 +42,7 @@
  *          generation, the test tries to verify signature with the above API
  *          and passing in different signature offset (0, 33, 66, 99).
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main Offsets SUN NONEwithDSA
  * @run main Offsets SUN SHA1withDSA
  * @run main Offsets SUN SHA224withDSA
--- a/jdk/test/java/util/Arrays/ParallelPrefix.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,279 +0,0 @@
-/*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/**
- * @test 8014076 8025067
- * @summary unit test for Arrays.ParallelPrefix().
- * @author Tristan Yan
- * @run testng ParallelPrefix
- */
-
-import java.util.Arrays;
-import java.util.function.BinaryOperator;
-import java.util.function.DoubleBinaryOperator;
-import java.util.function.Function;
-import java.util.function.IntBinaryOperator;
-import java.util.function.LongBinaryOperator;
-import java.util.stream.IntStream;
-import java.util.stream.LongStream;
-import static org.testng.Assert.*;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-public class ParallelPrefix {
-    //Array size less than MIN_PARTITION
-    private static final int SMALL_ARRAY_SIZE = 1 << 3;
-
-    //Array size equals MIN_PARTITION
-    private static final int THRESHOLD_ARRAY_SIZE = 1 << 4;
-
-    //Array size greater than MIN_PARTITION
-    private static final int MEDIUM_ARRAY_SIZE = 1 << 8;
-
-    //Array size much greater than MIN_PARTITION
-    private static final int LARGE_ARRAY_SIZE = 1 << 14;
-
-    private static final int[] ARRAY_SIZE_COLLECTION  = new int[]{
-        SMALL_ARRAY_SIZE,
-        THRESHOLD_ARRAY_SIZE,
-        MEDIUM_ARRAY_SIZE,
-        LARGE_ARRAY_SIZE
-    };
-
-    @DataProvider(name = "intSet")
-    public static Object[][] intSet(){
-        return genericData(size -> IntStream.range(0, size).toArray(),
-                new IntBinaryOperator[]{
-                    Integer::sum,
-                    Integer::min});
-    }
-
-    @DataProvider(name = "longSet")
-    public static Object[][] longSet(){
-        return genericData(size -> LongStream.range(0, size).toArray(),
-                new LongBinaryOperator[]{
-                    Long::sum,
-                    Long::min});
-    }
-
-    @DataProvider(name = "doubleSet")
-    public static Object[][] doubleSet(){
-        return genericData(size -> IntStream.range(0, size).mapToDouble(i -> (double)i).toArray(),
-                new DoubleBinaryOperator[]{
-                    Double::sum,
-                    Double::min});
-    }
-
-    @DataProvider(name = "stringSet")
-    public static Object[][] stringSet(){
-        Function<Integer, String[]> stringsFunc = size ->
-                IntStream.range(0, size).mapToObj(Integer::toString).toArray(String[]::new);
-        BinaryOperator<String> concat = String::concat;
-        return genericData(stringsFunc,
-                (BinaryOperator<String>[]) new BinaryOperator[]{
-                    concat });
-    }
-
-    private static <T, OPS> Object[][] genericData(Function<Integer, T> generateFunc, OPS[] ops) {
-        //test arrays which size is equals n-1, n, n+1, test random data
-        Object[][] data = new Object[ARRAY_SIZE_COLLECTION.length * 3 * ops.length][4];
-        for(int n = 0; n < ARRAY_SIZE_COLLECTION.length; n++ ) {
-            for(int testValue = -1 ; testValue <= 1; testValue++) {
-                int array_size = ARRAY_SIZE_COLLECTION[n] + testValue;
-                for(int opsN = 0; opsN < ops.length; opsN++) {
-                    int index = n * 3 * ops.length + (testValue + 1) * ops.length + opsN;
-                    data[index][0] = generateFunc.apply(array_size);
-                    data[index][1] = array_size / 3;
-                    data[index][2] = 2 * array_size / 3;
-                    data[index][3] = ops[opsN];
-                }
-            }
-        }
-        return data;
-    }
-
-    @Test(dataProvider="intSet")
-    public void testParallelPrefixForInt(int[] data, int fromIndex, int toIndex, IntBinaryOperator op) {
-        int[] sequentialResult = data.clone();
-        for (int index = fromIndex + 1; index < toIndex; index++) {
-            sequentialResult[index ] = op.applyAsInt(sequentialResult[index  - 1], sequentialResult[index]);
-        }
-
-        int[] parallelResult = data.clone();
-        Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
-        assertArraysEqual(parallelResult, sequentialResult);
-
-        int[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, toIndex);
-        Arrays.parallelPrefix(parallelRangeResult, op);
-        assertArraysEqual(parallelRangeResult, Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
-    }
-
-    @Test(dataProvider="longSet")
-    public void testParallelPrefixForLong(long[] data, int fromIndex, int toIndex, LongBinaryOperator op) {
-        long[] sequentialResult = data.clone();
-        for (int index = fromIndex + 1; index < toIndex; index++) {
-            sequentialResult[index ] = op.applyAsLong(sequentialResult[index  - 1], sequentialResult[index]);
-        }
-
-        long[] parallelResult = data.clone();
-        Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
-        assertArraysEqual(parallelResult, sequentialResult);
-
-        long[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, toIndex);
-        Arrays.parallelPrefix(parallelRangeResult, op);
-        assertArraysEqual(parallelRangeResult, Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
-    }
-
-    @Test(dataProvider="doubleSet")
-    public void testParallelPrefixForDouble(double[] data, int fromIndex, int toIndex, DoubleBinaryOperator op) {
-        double[] sequentialResult = data.clone();
-        for (int index = fromIndex + 1; index < toIndex; index++) {
-            sequentialResult[index ] = op.applyAsDouble(sequentialResult[index  - 1], sequentialResult[index]);
-        }
-
-        double[] parallelResult = data.clone();
-        Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
-        assertArraysEqual(parallelResult, sequentialResult);
-
-        double[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, toIndex);
-        Arrays.parallelPrefix(parallelRangeResult, op);
-        assertArraysEqual(parallelRangeResult, Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
-    }
-
-    @Test(dataProvider="stringSet")
-    public void testParallelPrefixForStringr(String[] data , int fromIndex, int toIndex, BinaryOperator<String> op) {
-        String[] sequentialResult = data.clone();
-        for (int index = fromIndex + 1; index < toIndex; index++) {
-            sequentialResult[index ] = op.apply(sequentialResult[index  - 1], sequentialResult[index]);
-        }
-
-        String[] parallelResult = data.clone();
-        Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
-        assertArraysEqual(parallelResult, sequentialResult);
-
-        String[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, toIndex);
-        Arrays.parallelPrefix(parallelRangeResult, op);
-        assertArraysEqual(parallelRangeResult, Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
-    }
-
-    @Test
-    public void testNPEs() {
-        // null array
-        assertThrowsNPE(() -> Arrays.parallelPrefix((int[]) null, Integer::max));
-        assertThrowsNPE(() -> Arrays.parallelPrefix((long []) null, Long::max));
-        assertThrowsNPE(() -> Arrays.parallelPrefix((double []) null, Double::max));
-        assertThrowsNPE(() -> Arrays.parallelPrefix((String []) null, String::concat));
-
-        // null array w/ range
-        assertThrowsNPE(() -> Arrays.parallelPrefix((int[]) null, 0, 0, Integer::max));
-        assertThrowsNPE(() -> Arrays.parallelPrefix((long []) null, 0, 0, Long::max));
-        assertThrowsNPE(() -> Arrays.parallelPrefix((double []) null, 0, 0, Double::max));
-        assertThrowsNPE(() -> Arrays.parallelPrefix((String []) null, 0, 0, String::concat));
-
-        // null op
-        assertThrowsNPE(() -> Arrays.parallelPrefix(new int[] {}, null));
-        assertThrowsNPE(() -> Arrays.parallelPrefix(new long[] {}, null));
-        assertThrowsNPE(() -> Arrays.parallelPrefix(new double[] {}, null));
-        assertThrowsNPE(() -> Arrays.parallelPrefix(new String[] {}, null));
-
-        // null op w/ range
-        assertThrowsNPE(() -> Arrays.parallelPrefix(new int[] {}, 0, 0, null));
-        assertThrowsNPE(() -> Arrays.parallelPrefix(new long[] {}, 0, 0, null));
-        assertThrowsNPE(() -> Arrays.parallelPrefix(new double[] {}, 0, 0, null));
-        assertThrowsNPE(() -> Arrays.parallelPrefix(new String[] {}, 0, 0, null));
-    }
-
-    @Test
-    public void testIAEs() {
-        assertThrowsIAE(() -> Arrays.parallelPrefix(new int[] {}, 1, 0, Integer::max));
-        assertThrowsIAE(() -> Arrays.parallelPrefix(new long[] {}, 1, 0, Long::max));
-        assertThrowsIAE(() -> Arrays.parallelPrefix(new double[] {}, 1, 0, Double::max));
-        assertThrowsIAE(() -> Arrays.parallelPrefix(new String[] {}, 1, 0, String::concat));
-    }
-
-    @Test
-    public void testAIOOBEs() {
-        // bad "fromIndex"
-        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new int[] {}, -1, 0, Integer::max));
-        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new long[] {}, -1, 0, Long::max));
-        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new double[] {}, -1, 0, Double::max));
-        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new String[] {}, -1, 0, String::concat));
-
-        // bad "toIndex"
-        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new int[] {}, 0, 1, Integer::max));
-        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new long[] {}, 0, 1, Long::max));
-        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new double[] {}, 0, 1, Double::max));
-        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new String[] {}, 0, 1, String::concat));
-    }
-
-    // "library" code
-
-    private void assertThrowsNPE(ThrowingRunnable r) {
-        assertThrows(NullPointerException.class, r);
-    }
-
-    private void assertThrowsIAE(ThrowingRunnable r) {
-        assertThrows(IllegalArgumentException.class, r);
-    }
-
-    private void assertThrowsAIOOB(ThrowingRunnable r) {
-        assertThrows(ArrayIndexOutOfBoundsException.class, r);
-    }
-
-    static void assertArraysEqual(int[] actual, int[] expected) {
-        try {
-            assertEquals(actual, expected, "");
-        } catch (AssertionError x) {
-            throw new AssertionError(String.format("Expected:%s, actual:%s",
-                    Arrays.toString(expected), Arrays.toString(actual)), x);
-        }
-    }
-
-    static void assertArraysEqual(long[] actual, long[] expected) {
-        try {
-            assertEquals(actual, expected, "");
-        } catch (AssertionError x) {
-            throw new AssertionError(String.format("Expected:%s, actual:%s",
-                    Arrays.toString(expected), Arrays.toString(actual)), x);
-        }
-    }
-
-    static void assertArraysEqual(double[] actual, double[] expected) {
-        try {
-            assertEquals(actual, expected, "");
-        } catch (AssertionError x) {
-            throw new AssertionError(String.format("Expected:%s, actual:%s",
-                    Arrays.toString(expected), Arrays.toString(actual)), x);
-        }
-    }
-
-    static void assertArraysEqual(String[] actual, String[] expected) {
-        try {
-            assertEquals(actual, expected, "");
-        } catch (AssertionError x) {
-            throw new AssertionError(String.format("Expected:%s, actual:%s",
-                    Arrays.toString(expected), Arrays.toString(actual)), x);
-        }
-    }
-}
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Arrays/largeMemory/ParallelPrefix.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,308 @@
+/*
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test 8014076 8025067
+ * @summary unit test for Arrays.ParallelPrefix().
+ * @author Tristan Yan
+ * @modules java.management jdk.management
+ * @run testng/othervm -Xms256m -Xmx1024m ParallelPrefix
+ */
+
+import java.lang.management.ManagementFactory;
+import java.util.Arrays;
+import java.util.function.BinaryOperator;
+import java.util.function.DoubleBinaryOperator;
+import java.util.function.Function;
+import java.util.function.IntBinaryOperator;
+import java.util.function.LongBinaryOperator;
+import java.util.stream.IntStream;
+import java.util.stream.LongStream;
+import com.sun.management.OperatingSystemMXBean;
+import static org.testng.Assert.*;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeSuite;
+
+public class ParallelPrefix {
+    //Array size less than MIN_PARTITION
+    private static final int SMALL_ARRAY_SIZE = 1 << 3;
+
+    //Array size equals MIN_PARTITION
+    private static final int THRESHOLD_ARRAY_SIZE = 1 << 4;
+
+    //Array size greater than MIN_PARTITION
+    private static final int MEDIUM_ARRAY_SIZE = 1 << 8;
+
+    //Array size much greater than MIN_PARTITION
+    private static final int LARGE_ARRAY_SIZE = 1 << 14;
+
+    private static int[] arraySizeCollection;
+
+    @BeforeSuite
+    public static void setup() {
+        java.lang.management.OperatingSystemMXBean bean =
+                ManagementFactory.getOperatingSystemMXBean();
+        if (bean instanceof OperatingSystemMXBean) {
+            OperatingSystemMXBean os = (OperatingSystemMXBean)bean;
+            long physicalMemorySize = os.getTotalPhysicalMemorySize() / (1024 * 1024);
+            System.out.println("System memory size: " + physicalMemorySize + "M");
+            // when we can get system memory size, and it's larger than 2G,
+            // then we enable large array size test below,
+            // else disable large array size test below.
+            if (physicalMemorySize > (2 * 1024)) {
+                arraySizeCollection  = new int[]{
+                        SMALL_ARRAY_SIZE,
+                        THRESHOLD_ARRAY_SIZE,
+                        MEDIUM_ARRAY_SIZE,
+                        LARGE_ARRAY_SIZE
+                    };
+                System.out.println("System memory is large enough, add large array size test");
+                return;
+            }
+        }
+        arraySizeCollection  = new int[]{
+                SMALL_ARRAY_SIZE,
+                THRESHOLD_ARRAY_SIZE,
+                MEDIUM_ARRAY_SIZE
+            };
+        System.out.println("System memory is not large enough, remove large array size test");
+    }
+
+    @DataProvider(name = "intSet")
+    public static Object[][] intSet(){
+        return genericData(size -> IntStream.range(0, size).toArray(),
+                new IntBinaryOperator[]{
+                    Integer::sum,
+                    Integer::min});
+    }
+
+    @DataProvider(name = "longSet")
+    public static Object[][] longSet(){
+        return genericData(size -> LongStream.range(0, size).toArray(),
+                new LongBinaryOperator[]{
+                    Long::sum,
+                    Long::min});
+    }
+
+    @DataProvider(name = "doubleSet")
+    public static Object[][] doubleSet(){
+        return genericData(size -> IntStream.range(0, size).mapToDouble(i -> (double)i).toArray(),
+                new DoubleBinaryOperator[]{
+                    Double::sum,
+                    Double::min});
+    }
+
+    @DataProvider(name = "stringSet")
+    public static Object[][] stringSet(){
+        Function<Integer, String[]> stringsFunc = size ->
+                IntStream.range(0, size).mapToObj(Integer::toString).toArray(String[]::new);
+        BinaryOperator<String> concat = String::concat;
+        return genericData(stringsFunc,
+                (BinaryOperator<String>[]) new BinaryOperator[]{
+                    concat });
+    }
+
+    private static <T, OPS> Object[][] genericData(Function<Integer, T> generateFunc, OPS[] ops) {
+        //test arrays which size is equals n-1, n, n+1, test random data
+        Object[][] data = new Object[arraySizeCollection.length * 3 * ops.length][4];
+        for(int n = 0; n < arraySizeCollection.length; n++ ) {
+            for(int testValue = -1 ; testValue <= 1; testValue++) {
+                int array_size = arraySizeCollection[n] + testValue;
+                for(int opsN = 0; opsN < ops.length; opsN++) {
+                    int index = n * 3 * ops.length + (testValue + 1) * ops.length + opsN;
+                    data[index][0] = generateFunc.apply(array_size);
+                    data[index][1] = array_size / 3;
+                    data[index][2] = 2 * array_size / 3;
+                    data[index][3] = ops[opsN];
+                }
+            }
+        }
+        return data;
+    }
+
+    @Test(dataProvider="intSet")
+    public void testParallelPrefixForInt(int[] data, int fromIndex, int toIndex, IntBinaryOperator op) {
+        int[] sequentialResult = data.clone();
+        for (int index = fromIndex + 1; index < toIndex; index++) {
+            sequentialResult[index ] = op.applyAsInt(sequentialResult[index  - 1], sequentialResult[index]);
+        }
+
+        int[] parallelResult = data.clone();
+        Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
+        assertArraysEqual(parallelResult, sequentialResult);
+
+        int[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, toIndex);
+        Arrays.parallelPrefix(parallelRangeResult, op);
+        assertArraysEqual(parallelRangeResult, Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
+    }
+
+    @Test(dataProvider="longSet")
+    public void testParallelPrefixForLong(long[] data, int fromIndex, int toIndex, LongBinaryOperator op) {
+        long[] sequentialResult = data.clone();
+        for (int index = fromIndex + 1; index < toIndex; index++) {
+            sequentialResult[index ] = op.applyAsLong(sequentialResult[index  - 1], sequentialResult[index]);
+        }
+
+        long[] parallelResult = data.clone();
+        Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
+        assertArraysEqual(parallelResult, sequentialResult);
+
+        long[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, toIndex);
+        Arrays.parallelPrefix(parallelRangeResult, op);
+        assertArraysEqual(parallelRangeResult, Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
+    }
+
+    @Test(dataProvider="doubleSet")
+    public void testParallelPrefixForDouble(double[] data, int fromIndex, int toIndex, DoubleBinaryOperator op) {
+        double[] sequentialResult = data.clone();
+        for (int index = fromIndex + 1; index < toIndex; index++) {
+            sequentialResult[index ] = op.applyAsDouble(sequentialResult[index  - 1], sequentialResult[index]);
+        }
+
+        double[] parallelResult = data.clone();
+        Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
+        assertArraysEqual(parallelResult, sequentialResult);
+
+        double[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, toIndex);
+        Arrays.parallelPrefix(parallelRangeResult, op);
+        assertArraysEqual(parallelRangeResult, Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
+    }
+
+    @Test(dataProvider="stringSet")
+    public void testParallelPrefixForStringr(String[] data , int fromIndex, int toIndex, BinaryOperator<String> op) {
+        String[] sequentialResult = data.clone();
+        for (int index = fromIndex + 1; index < toIndex; index++) {
+            sequentialResult[index ] = op.apply(sequentialResult[index  - 1], sequentialResult[index]);
+        }
+
+        String[] parallelResult = data.clone();
+        Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
+        assertArraysEqual(parallelResult, sequentialResult);
+
+        String[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, toIndex);
+        Arrays.parallelPrefix(parallelRangeResult, op);
+        assertArraysEqual(parallelRangeResult, Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
+    }
+
+    @Test
+    public void testNPEs() {
+        // null array
+        assertThrowsNPE(() -> Arrays.parallelPrefix((int[]) null, Integer::max));
+        assertThrowsNPE(() -> Arrays.parallelPrefix((long []) null, Long::max));
+        assertThrowsNPE(() -> Arrays.parallelPrefix((double []) null, Double::max));
+        assertThrowsNPE(() -> Arrays.parallelPrefix((String []) null, String::concat));
+
+        // null array w/ range
+        assertThrowsNPE(() -> Arrays.parallelPrefix((int[]) null, 0, 0, Integer::max));
+        assertThrowsNPE(() -> Arrays.parallelPrefix((long []) null, 0, 0, Long::max));
+        assertThrowsNPE(() -> Arrays.parallelPrefix((double []) null, 0, 0, Double::max));
+        assertThrowsNPE(() -> Arrays.parallelPrefix((String []) null, 0, 0, String::concat));
+
+        // null op
+        assertThrowsNPE(() -> Arrays.parallelPrefix(new int[] {}, null));
+        assertThrowsNPE(() -> Arrays.parallelPrefix(new long[] {}, null));
+        assertThrowsNPE(() -> Arrays.parallelPrefix(new double[] {}, null));
+        assertThrowsNPE(() -> Arrays.parallelPrefix(new String[] {}, null));
+
+        // null op w/ range
+        assertThrowsNPE(() -> Arrays.parallelPrefix(new int[] {}, 0, 0, null));
+        assertThrowsNPE(() -> Arrays.parallelPrefix(new long[] {}, 0, 0, null));
+        assertThrowsNPE(() -> Arrays.parallelPrefix(new double[] {}, 0, 0, null));
+        assertThrowsNPE(() -> Arrays.parallelPrefix(new String[] {}, 0, 0, null));
+    }
+
+    @Test
+    public void testIAEs() {
+        assertThrowsIAE(() -> Arrays.parallelPrefix(new int[] {}, 1, 0, Integer::max));
+        assertThrowsIAE(() -> Arrays.parallelPrefix(new long[] {}, 1, 0, Long::max));
+        assertThrowsIAE(() -> Arrays.parallelPrefix(new double[] {}, 1, 0, Double::max));
+        assertThrowsIAE(() -> Arrays.parallelPrefix(new String[] {}, 1, 0, String::concat));
+    }
+
+    @Test
+    public void testAIOOBEs() {
+        // bad "fromIndex"
+        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new int[] {}, -1, 0, Integer::max));
+        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new long[] {}, -1, 0, Long::max));
+        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new double[] {}, -1, 0, Double::max));
+        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new String[] {}, -1, 0, String::concat));
+
+        // bad "toIndex"
+        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new int[] {}, 0, 1, Integer::max));
+        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new long[] {}, 0, 1, Long::max));
+        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new double[] {}, 0, 1, Double::max));
+        assertThrowsAIOOB(() -> Arrays.parallelPrefix(new String[] {}, 0, 1, String::concat));
+    }
+
+    // "library" code
+
+    private void assertThrowsNPE(ThrowingRunnable r) {
+        assertThrows(NullPointerException.class, r);
+    }
+
+    private void assertThrowsIAE(ThrowingRunnable r) {
+        assertThrows(IllegalArgumentException.class, r);
+    }
+
+    private void assertThrowsAIOOB(ThrowingRunnable r) {
+        assertThrows(ArrayIndexOutOfBoundsException.class, r);
+    }
+
+    static void assertArraysEqual(int[] actual, int[] expected) {
+        try {
+            assertEquals(actual, expected, "");
+        } catch (AssertionError x) {
+            throw new AssertionError(String.format("Expected:%s, actual:%s",
+                    Arrays.toString(expected), Arrays.toString(actual)), x);
+        }
+    }
+
+    static void assertArraysEqual(long[] actual, long[] expected) {
+        try {
+            assertEquals(actual, expected, "");
+        } catch (AssertionError x) {
+            throw new AssertionError(String.format("Expected:%s, actual:%s",
+                    Arrays.toString(expected), Arrays.toString(actual)), x);
+        }
+    }
+
+    static void assertArraysEqual(double[] actual, double[] expected) {
+        try {
+            assertEquals(actual, expected, "");
+        } catch (AssertionError x) {
+            throw new AssertionError(String.format("Expected:%s, actual:%s",
+                    Arrays.toString(expected), Arrays.toString(actual)), x);
+        }
+    }
+
+    static void assertArraysEqual(String[] actual, String[] expected) {
+        try {
+            assertEquals(actual, expected, "");
+        } catch (AssertionError x) {
+            throw new AssertionError(String.format("Expected:%s, actual:%s",
+                    Arrays.toString(expected), Arrays.toString(actual)), x);
+        }
+    }
+}
+
--- a/jdk/test/java/util/Base64/TestBase64.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/Base64/TestBase64.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,7 @@
  *       8014217 8025003 8026330 8028397 8129544 8165243
  * @summary tests java.util.Base64
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main TestBase64
  * @key randomness
  */
--- a/jdk/test/java/util/List/SubList.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/List/SubList.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,7 @@
  * @test
  * @bug 8079136
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run testng SubList
  * @summary Basic functionality of sublists
  * @key randomness
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic/src/asiabundles/jdk/test/resources/asia/MyResourcesAsia.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic/src/asiabundles/jdk/test/resources/asia/MyResourcesAsia.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,7 +28,7 @@
 import java.util.Set;
 import java.util.spi.AbstractResourceBundleProvider;
 
-import jdk.test.resources.MyResourcesProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesAsia extends AbstractResourceBundleProvider
     implements MyResourcesProvider
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic/src/asiabundles/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic/src/asiabundles/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,6 @@
 module asiabundles {
     requires test;
 
-    provides jdk.test.resources.MyResourcesProvider
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.asia.MyResourcesAsia;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic/src/eubundles/jdk/test/resources/eu/MyResourcesEU.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic/src/eubundles/jdk/test/resources/eu/MyResourcesEU.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,7 +28,7 @@
 import java.util.Set;
 import java.util.spi.AbstractResourceBundleProvider;
 
-import jdk.test.resources.MyResourcesProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesEU extends AbstractResourceBundleProvider
     implements MyResourcesProvider
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic/src/eubundles/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic/src/eubundles/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,6 @@
 module eubundles {
     requires test;
 
-    provides jdk.test.resources.MyResourcesProvider
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.eu.MyResourcesEU;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic/src/test/jdk/test/resources/MyResourcesProvider.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.test.resources;
-
-import java.util.spi.ResourceBundleProvider;
-
-public interface MyResourcesProvider extends ResourceBundleProvider {
-}
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic/src/test/jdk/test/resources/MyResourcesProviderImpl.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic/src/test/jdk/test/resources/MyResourcesProviderImpl.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
 import java.util.Locale;
 import java.util.ResourceBundle;
 import java.util.spi.AbstractResourceBundleProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesProviderImpl extends AbstractResourceBundleProvider
     implements MyResourcesProvider
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic/src/test/jdk/test/resources/spi/MyResourcesProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.resources.spi;
+
+import java.util.spi.ResourceBundleProvider;
+
+public interface MyResourcesProvider extends ResourceBundleProvider {
+}
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic/src/test/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic/src/test/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -22,7 +22,7 @@
  */
 
 module test {
-    exports jdk.test.resources to eubundles, asiabundles;
-    uses jdk.test.resources.MyResourcesProvider;
-    provides jdk.test.resources.MyResourcesProvider with jdk.test.resources.MyResourcesProviderImpl;
+    exports jdk.test.resources.spi to eubundles, asiabundles;
+    uses jdk.test.resources.spi.MyResourcesProvider;
+    provides jdk.test.resources.spi.MyResourcesProvider with jdk.test.resources.MyResourcesProviderImpl;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/asiabundles/jdk/test/resources/asia/MyResourcesAsia.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/asiabundles/jdk/test/resources/asia/MyResourcesAsia.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
 package jdk.test.resources.asia;
 
 import java.util.Locale;
-import jdk.test.resources.MyResourcesProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesAsia extends MyResourcesProvider {
     public MyResourcesAsia() {
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/asiabundles/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/asiabundles/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,6 @@
 module asiabundles {
     requires test;
 
-    provides jdk.test.resources.MyResourcesProvider
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.asia.MyResourcesAsia;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/eubundles/jdk/test/resources/eu/MyResourcesEU.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/eubundles/jdk/test/resources/eu/MyResourcesEU.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
 package jdk.test.resources.eu;
 
 import java.util.Locale;
-import jdk.test.resources.MyResourcesProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesEU extends MyResourcesProvider {
     public MyResourcesEU() {
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/eubundles/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/eubundles/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,6 @@
 module eubundles {
     requires test;
 
-    provides jdk.test.resources.MyResourcesProvider
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.eu.MyResourcesEU;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/test/jdk/test/resources/MyResourcesProvider.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.test.resources;
-
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-import java.util.spi.AbstractResourceBundleProvider;
-
-public abstract class MyResourcesProvider extends AbstractResourceBundleProvider {
-    protected MyResourcesProvider(String... formats) {
-        super(formats);
-    }
-
-    @Override
-    public ResourceBundle getBundle(String baseName, Locale locale) {
-        if (isSupportedInModule(locale)) {
-            return super.getBundle(baseName, locale);
-        }
-        return null;
-    }
-
-    protected abstract boolean isSupportedInModule(Locale locale);
-}
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/test/jdk/test/resources/MyResourcesProviderImpl.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/test/jdk/test/resources/MyResourcesProviderImpl.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,7 @@
 package jdk.test.resources;
 
 import java.util.Locale;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesProviderImpl extends MyResourcesProvider {
     public MyResourcesProviderImpl() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/test/jdk/test/resources/spi/MyResourcesProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.resources.spi;
+
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public abstract class MyResourcesProvider extends AbstractResourceBundleProvider {
+    protected MyResourcesProvider(String... formats) {
+        super(formats);
+    }
+
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        if (isSupportedInModule(locale)) {
+            return super.getBundle(baseName, locale);
+        }
+        return null;
+    }
+
+    protected abstract boolean isSupportedInModule(Locale locale);
+}
--- a/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/test/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/appbasic2/src/test/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
  */
 
 module test {
-    exports jdk.test.resources to eubundles, asiabundles;
-    uses jdk.test.resources.MyResourcesProvider;
-    provides jdk.test.resources.MyResourcesProvider with jdk.test.resources.MyResourcesProviderImpl;
+    exports jdk.test.resources.spi to eubundles, asiabundles;
+    uses jdk.test.resources.spi.MyResourcesProvider;
+    provides jdk.test.resources.spi.MyResourcesProvider with jdk.test.resources.MyResourcesProviderImpl;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/basic/src/asiabundles/jdk/test/resources/asia/MyResourcesAsia.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/basic/src/asiabundles/jdk/test/resources/asia/MyResourcesAsia.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
 package jdk.test.resources.asia;
 
 import java.util.Locale;
-import jdk.test.resources.MyResourcesProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 /**
  *
--- a/jdk/test/java/util/ResourceBundle/modules/basic/src/asiabundles/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/basic/src/asiabundles/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,6 @@
 module asiabundles {
     requires mainbundles;
 
-    provides jdk.test.resources.MyResourcesProvider
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.asia.MyResourcesAsia;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/basic/src/eubundles/jdk/test/resources/eu/MyResourcesEU.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/basic/src/eubundles/jdk/test/resources/eu/MyResourcesEU.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
 package jdk.test.resources.eu;
 
 import java.util.Locale;
-import jdk.test.resources.MyResourcesProvider;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 /**
  *
--- a/jdk/test/java/util/ResourceBundle/modules/basic/src/eubundles/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/basic/src/eubundles/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,6 @@
 module eubundles {
     requires mainbundles;
 
-    provides jdk.test.resources.MyResourcesProvider
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.eu.MyResourcesEU;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/basic/src/mainbundles/jdk/test/resources/MyResourcesMain.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/basic/src/mainbundles/jdk/test/resources/MyResourcesMain.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,7 @@
 package jdk.test.resources;
 
 import java.util.Locale;
+import jdk.test.resources.spi.MyResourcesProvider;
 
 public class MyResourcesMain extends MyResourcesProvider {
     public MyResourcesMain() {
--- a/jdk/test/java/util/ResourceBundle/modules/basic/src/mainbundles/jdk/test/resources/MyResourcesProvider.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.test.resources;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.ResourceBundle;
-import java.util.ResourceBundle.Control;
-import java.util.Set;
-import java.util.spi.AbstractResourceBundleProvider;
-
-
-public class MyResourcesProvider extends AbstractResourceBundleProvider {
-    private final String region;
-    private final Set<Locale> supportedLocales;
-    private final List<String> formats;
-
-    protected MyResourcesProvider() {
-        region = "";
-        supportedLocales = null;
-        formats = Collections.emptyList();
-    }
-
-    protected MyResourcesProvider(String format, String region, Locale... locales) {
-        super(format);
-        this.region = region;
-        this.supportedLocales = new HashSet<>(Arrays.asList(locales));
-        this.formats = Collections.singletonList(format);
-    }
-
-    @Override
-    public ResourceBundle getBundle(String baseName, Locale locale) {
-        if (isSupportedInModule(locale)) {
-           return super.getBundle(baseName, locale);
-        }
-        return null;
-    }
-
-    @Override
-    protected String toBundleName(String baseName, Locale locale) {
-        String name = addRegion(baseName);
-        return Control.getControl(Control.FORMAT_DEFAULT).toBundleName(name, locale);
-    }
-
-    private String addRegion(String baseName) {
-        if (region.isEmpty()) {
-            return baseName;
-        }
-        int index = baseName.lastIndexOf('.');
-        return baseName.substring(0, index + 1) + region + baseName.substring(index);
-    }
-
-    protected boolean isSupportedInModule(Locale locale) {
-        return supportedLocales.contains(locale);
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/basic/src/mainbundles/jdk/test/resources/spi/MyResourcesProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.resources.spi;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.ResourceBundle.Control;
+import java.util.Set;
+import java.util.spi.AbstractResourceBundleProvider;
+
+
+public class MyResourcesProvider extends AbstractResourceBundleProvider {
+    private final String region;
+    private final Set<Locale> supportedLocales;
+    private final List<String> formats;
+
+    protected MyResourcesProvider() {
+        region = "";
+        supportedLocales = null;
+        formats = Collections.emptyList();
+    }
+
+    protected MyResourcesProvider(String format, String region, Locale... locales) {
+        super(format);
+        this.region = region;
+        this.supportedLocales = new HashSet<>(Arrays.asList(locales));
+        this.formats = Collections.singletonList(format);
+    }
+
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        if (isSupportedInModule(locale)) {
+           return super.getBundle(baseName, locale);
+        }
+        return null;
+    }
+
+    @Override
+    protected String toBundleName(String baseName, Locale locale) {
+        String name = addRegion(baseName);
+        return Control.getControl(Control.FORMAT_DEFAULT).toBundleName(name, locale);
+    }
+
+    private String addRegion(String baseName) {
+        if (region.isEmpty()) {
+            return baseName;
+        }
+        int index = baseName.lastIndexOf('.');
+        return baseName.substring(0, index + 1) + region + baseName.substring(index);
+    }
+
+    protected boolean isSupportedInModule(Locale locale) {
+        return supportedLocales.contains(locale);
+    }
+}
--- a/jdk/test/java/util/ResourceBundle/modules/basic/src/mainbundles/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/basic/src/mainbundles/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
  */
 
 module mainbundles {
-    exports jdk.test.resources to test, eubundles, asiabundles;
-    provides jdk.test.resources.MyResourcesProvider
+    exports jdk.test.resources.spi to test, eubundles, asiabundles;
+    provides jdk.test.resources.spi.MyResourcesProvider
         with jdk.test.resources.MyResourcesMain;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/basic/src/test/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/basic/src/test/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,5 +23,5 @@
 
 module test {
     requires mainbundles;
-    uses jdk.test.resources.MyResourcesProvider;
+    uses jdk.test.resources.spi.MyResourcesProvider;
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/layer/run.sh	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# @test
+# @bug 8180375
+# @summary Tests resource bundles are correctly loaded from
+#   modules through "<packageName>.spi.<simpleName>Provider" types.
+
+set -e
+
+if [ -z "$TESTJAVA" ]; then
+  if [ $# -lt 1 ]; then exit 1; fi
+  TESTJAVA="$1"; shift
+  COMPILEJAVA="${TESTJAVA}"
+  TESTSRC="`pwd`"
+  TESTCLASSES="`pwd`"
+fi
+
+JAVAC="$COMPILEJAVA/bin/javac"
+JAVA="$TESTJAVA/bin/java"
+
+rm -rf mods
+$JAVAC --module-source-path $TESTSRC/src -d mods --module m1,m2
+
+mkdir -p mods/m1/p/resources mods/m2/p/resources
+cp $TESTSRC/src/m1/p/resources/*.properties mods/m1/p/resources
+cp $TESTSRC/src/m2/p/resources/*.properties mods/m2/p/resources
+
+mkdir classes
+$JAVAC -d classes $TESTSRC/src/Main.java
+
+$JAVA -cp classes Main
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/layer/src/Main.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.lang.module.Configuration;
+import java.lang.module.ModuleFinder;
+import java.lang.reflect.Method;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+public class Main {
+    public static void main(String... args) throws Exception {
+        ModuleFinder afterFinder = ModuleFinder.of(Paths.get("mods"));
+
+        Configuration cf = ModuleLayer.boot().configuration()
+                .resolveAndBind(ModuleFinder.of(), afterFinder,
+                    List.of("m1", "m2"));
+
+        System.out.println("Configuration: " + cf);
+
+        ModuleLayer l = ModuleLayer.defineModulesWithManyLoaders(cf,
+                List.of(ModuleLayer.boot()),
+                        ClassLoader.getPlatformClassLoader())
+                .layer();
+
+        Module m1 = l.findModule("m1").get();
+        ResourceBundle bundle =
+            ResourceBundle.getBundle("p.resources.MyResource",
+                                     Locale.US, m1);
+        ResourceBundle jabundle =
+            ResourceBundle.getBundle("p.resources.MyResource",
+                                     Locale.JAPANESE, m1);
+
+        String enResult = bundle.getString("key");
+        String jaResult = jabundle.getString("key");
+        if (!"hi".equals(enResult) || !"ja".equals(jaResult)) {
+            throw new RuntimeException("Unexpected resources loaded: en: " +
+                                        enResult + ", ja: " + jaResult);
+        }
+
+        Class<?> c = Class.forName(m1, "p.Main");
+        Method m = c.getDeclaredMethod("run");
+        m.invoke(null);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/layer/src/m1/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+module m1 {
+    exports p;
+    exports p.resources.spi;
+    uses p.resources.spi.MyResourceProvider;
+    provides p.resources.spi.MyResourceProvider with p.internal.BundleProvider;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/layer/src/m1/p/Main.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.io.InputStream;
+
+public class Main {
+    public static void main(String... args) {
+        run();
+    }
+
+    public static void run() {
+        ClassLoader loader =
+            Main.class.getModule().getLayer().findLoader("m1");
+        ClassLoader loader2 =
+            Main.class.getModule().getLayer().findLoader("m2");
+
+        ResourceBundle bundle =
+            ResourceBundle.getBundle("p.resources.MyResource", Locale.US);
+        ResourceBundle bundle1 =
+            ResourceBundle.getBundle("p.resources.MyResource", Locale.JAPANESE);
+
+        String enResult = bundle.getString("key");
+        String jaResult = bundle1.getString("key");
+        if (!"hi".equals(enResult) || !"ja".equals(jaResult)) {
+            throw new RuntimeException("Unexpected resources loaded: en: " +
+                                        enResult + ", ja: " + jaResult);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/layer/src/m1/p/internal/BundleProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p.internal;
+
+import p.resources.spi.MyResourceProvider;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UncheckedIOException;
+import java.util.Locale;
+import java.util.PropertyResourceBundle;
+import java.util.ResourceBundle;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public class BundleProvider extends AbstractResourceBundleProvider
+    implements MyResourceProvider {
+    public BundleProvider() {
+        super();
+    }
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        if (locale.equals(Locale.ENGLISH) || locale.equals(Locale.ROOT)) {
+            return super.getBundle(baseName, locale);
+        }
+
+        return null;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/layer/src/m1/p/resources/MyResource.properties	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+key=hi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/layer/src/m1/p/resources/spi/MyResourceProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p.resources.spi;
+
+import java.util.spi.ResourceBundleProvider;
+
+
+public interface MyResourceProvider extends ResourceBundleProvider {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/layer/src/m2/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+module m2 {
+    requires m1;
+    provides p.resources.spi.MyResourceProvider with p.internal.BundleProvider;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/layer/src/m2/p/internal/BundleProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p.internal;
+
+import p.resources.spi.MyResourceProvider;
+
+
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public class BundleProvider extends AbstractResourceBundleProvider
+    implements MyResourceProvider {
+    public BundleProvider() {
+        super();
+    }
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        if (locale.equals(Locale.JAPANESE)) {
+            return super.getBundle(baseName, locale);
+        }
+        return null;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/layer/src/m2/p/resources/MyResource_ja.properties	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+key=ja
--- a/jdk/test/java/util/ResourceBundle/modules/simple/src/bundles/jdk/test/resources/MyResourcesProvider.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.test.resources;
-
-import java.util.Locale;
-import java.util.spi.AbstractResourceBundleProvider;
-
-public class MyResourcesProvider extends AbstractResourceBundleProvider {
-    public MyResourcesProvider() {
-        super("java.class", "java.properties");
-        System.err.println("MyResourcesProvider called " + this);
-    }
-
-    @Override
-    protected String toBundleName(String baseName, Locale locale) {
-        StringBuilder sb = new StringBuilder(baseName);
-        String lang = locale.getLanguage();
-        if (!lang.isEmpty()) {
-            sb.append('_').append(lang);
-            String country = locale.getCountry();
-            if (!country.isEmpty()) {
-                sb.append('_').append(country);
-            }
-        }
-        return sb.toString();
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/simple/src/bundles/jdk/test/resources/spi/MyResourcesProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.resources.spi;
+
+import java.util.Locale;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public class MyResourcesProvider extends AbstractResourceBundleProvider {
+    public MyResourcesProvider() {
+        super("java.class", "java.properties");
+        System.err.println("MyResourcesProvider called " + this);
+    }
+
+    @Override
+    protected String toBundleName(String baseName, Locale locale) {
+        StringBuilder sb = new StringBuilder(baseName);
+        String lang = locale.getLanguage();
+        if (!lang.isEmpty()) {
+            sb.append('_').append(lang);
+            String country = locale.getCountry();
+            if (!country.isEmpty()) {
+                sb.append('_').append(country);
+            }
+        }
+        return sb.toString();
+    }
+}
--- a/jdk/test/java/util/ResourceBundle/modules/simple/src/bundles/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/simple/src/bundles/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,6 +22,6 @@
  */
 
 module bundles {
-    exports jdk.test.resources to test;
-    provides jdk.test.resources.MyResourcesProvider with jdk.test.resources.MyResourcesProvider;
+    exports jdk.test.resources.spi to test;
+    provides jdk.test.resources.spi.MyResourcesProvider with jdk.test.resources.spi.MyResourcesProvider;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/simple/src/test/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/simple/src/test/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,5 +24,5 @@
 module test {
     requires bundles;
 
-    uses jdk.test.resources.MyResourcesProvider;
+    uses jdk.test.resources.spi.MyResourcesProvider;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/visibility/src/exported.named.bundles/jdk/test/resources/exported/classes/MyResourcesProvider.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.test.resources.exported.classes;
-
-import java.util.Locale;
-import java.util.spi.AbstractResourceBundleProvider;
-
-public class MyResourcesProvider extends AbstractResourceBundleProvider {
-    public MyResourcesProvider() {
-        super("java.class", "java.properties");
-        System.err.println("MyResourcesProvider called " + this);
-    }
-
-    @Override
-    protected String toBundleName(String baseName, Locale locale) {
-        StringBuilder sb = new StringBuilder(baseName);
-        String lang = locale.getLanguage();
-        if (!lang.isEmpty()) {
-            sb.append('_').append(lang);
-            String country = locale.getCountry();
-            if (!country.isEmpty()) {
-                sb.append('_').append(country);
-            }
-        }
-        return sb.toString();
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/visibility/src/exported.named.bundles/jdk/test/resources/exported/classes/spi/MyResourcesProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.resources.exported.classes.spi;
+
+import java.util.Locale;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public class MyResourcesProvider extends AbstractResourceBundleProvider {
+    public MyResourcesProvider() {
+        super("java.class", "java.properties");
+        System.err.println("MyResourcesProvider called " + this);
+    }
+
+    @Override
+    protected String toBundleName(String baseName, Locale locale) {
+        StringBuilder sb = new StringBuilder(baseName);
+        String lang = locale.getLanguage();
+        if (!lang.isEmpty()) {
+            sb.append('_').append(lang);
+            String country = locale.getCountry();
+            if (!country.isEmpty()) {
+                sb.append('_').append(country);
+            }
+        }
+        return sb.toString();
+    }
+}
--- a/jdk/test/java/util/ResourceBundle/modules/visibility/src/exported.named.bundles/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/visibility/src/exported.named.bundles/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,6 @@
     // unqualified exports to verify that resource bundles are not picked
     // up by other named modules
     exports jdk.test.resources.exported.classes;
-    provides jdk.test.resources.exported.classes.MyResourcesProvider
-        with jdk.test.resources.exported.classes.MyResourcesProvider;
+    provides jdk.test.resources.exported.classes.spi.MyResourcesProvider
+        with jdk.test.resources.exported.classes.spi.MyResourcesProvider;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/classes/MyResourcesProvider.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.test.resources.classes;
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-import java.util.spi.AbstractResourceBundleProvider;
-
-public class MyResourcesProvider extends AbstractResourceBundleProvider {
-    public MyResourcesProvider() {
-        super("java.class");
-    }
-
-    @Override
-    protected String toBundleName(String baseName, Locale locale) {
-        StringBuilder sb = new StringBuilder(baseName);
-        String lang = locale.getLanguage();
-        if (!lang.isEmpty()) {
-            sb.append('_').append(lang);
-            String country = locale.getCountry();
-            if (!country.isEmpty()) {
-                sb.append('_').append(country);
-            }
-        }
-        return sb.toString();
-    }
-
-    @Override
-    public ResourceBundle getBundle(String baseName, Locale locale) {
-        ResourceBundle rb = super.getBundle(baseName, locale);
-        String tag = locale.toLanguageTag();
-        if (tag.equals("und")) {
-            tag = "ROOT"; // to a human friendly name
-        }
-        System.out.printf("    MyResourcesProvider.getBundle(%s, %s)%n         -> %s%n",
-                          baseName, tag, rb);
-        return rb;
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/classes/spi/MyResourcesProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.resources.classes.spi;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public class MyResourcesProvider extends AbstractResourceBundleProvider {
+    public MyResourcesProvider() {
+        super("java.class");
+    }
+
+    @Override
+    protected String toBundleName(String baseName, Locale locale) {
+        StringBuilder sb = new StringBuilder(baseName);
+        String lang = locale.getLanguage();
+        if (!lang.isEmpty()) {
+            sb.append('_').append(lang);
+            String country = locale.getCountry();
+            if (!country.isEmpty()) {
+                sb.append('_').append(country);
+            }
+        }
+        return sb.toString();
+    }
+
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        ResourceBundle rb = super.getBundle(baseName, locale);
+        String tag = locale.toLanguageTag();
+        if (tag.equals("und")) {
+            tag = "ROOT"; // to a human friendly name
+        }
+        System.out.printf("    MyResourcesProvider.getBundle(%s, %s)%n         -> %s%n",
+                          baseName, tag, rb);
+        return rb;
+    }
+}
--- a/jdk/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/props/MyResourcesProvider.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.test.resources.props;
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-import java.util.spi.AbstractResourceBundleProvider;
-
-public class MyResourcesProvider extends AbstractResourceBundleProvider {
-    public MyResourcesProvider() {
-        super("java.properties");
-    }
-
-    @Override
-    protected String toBundleName(String baseName, Locale locale) {
-        StringBuilder sb = new StringBuilder(baseName);
-        String lang = locale.getLanguage();
-        if (!lang.isEmpty()) {
-            sb.append('_').append(lang);
-            String country = locale.getCountry();
-            if (!country.isEmpty()) {
-                sb.append('_').append(country);
-            }
-        }
-        return sb.toString();
-    }
-
-    @Override
-    public ResourceBundle getBundle(String baseName, Locale locale) {
-        ResourceBundle rb = super.getBundle(baseName, locale);
-        String tag = locale.toLanguageTag();
-        if (tag.equals("und")) {
-            tag = "ROOT"; // to a human friendly name
-        }
-        System.out.printf("    MyResourcesProvider.getBundle(%s, %s)%n         -> %s%n",
-                          baseName, tag, rb);
-        return rb;
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/props/spi/MyResourcesProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.resources.props.spi;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.spi.AbstractResourceBundleProvider;
+
+public class MyResourcesProvider extends AbstractResourceBundleProvider {
+    public MyResourcesProvider() {
+        super("java.properties");
+    }
+
+    @Override
+    protected String toBundleName(String baseName, Locale locale) {
+        StringBuilder sb = new StringBuilder(baseName);
+        String lang = locale.getLanguage();
+        if (!lang.isEmpty()) {
+            sb.append('_').append(lang);
+            String country = locale.getCountry();
+            if (!country.isEmpty()) {
+                sb.append('_').append(country);
+            }
+        }
+        return sb.toString();
+    }
+
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        ResourceBundle rb = super.getBundle(baseName, locale);
+        String tag = locale.toLanguageTag();
+        if (tag.equals("und")) {
+            tag = "ROOT"; // to a human friendly name
+        }
+        System.out.printf("    MyResourcesProvider.getBundle(%s, %s)%n         -> %s%n",
+                          baseName, tag, rb);
+        return rb;
+    }
+}
--- a/jdk/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,10 +22,10 @@
  */
 
 module named.bundles {
-    exports jdk.test.resources.classes to test; // exports only to test
-    exports jdk.test.resources.props to test;   // exports only to test
-    provides jdk.test.resources.classes.MyResourcesProvider
-        with jdk.test.resources.classes.MyResourcesProvider;
-    provides jdk.test.resources.props.MyResourcesProvider
-        with jdk.test.resources.props.MyResourcesProvider;
+    exports jdk.test.resources.classes.spi to test; // exports only to test
+    exports jdk.test.resources.props.spi to test;   // exports only to test
+    provides jdk.test.resources.classes.spi.MyResourcesProvider
+        with jdk.test.resources.classes.spi.MyResourcesProvider;
+    provides jdk.test.resources.props.spi.MyResourcesProvider
+        with jdk.test.resources.props.spi.MyResourcesProvider;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/visibility/src/test/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/visibility/src/test/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,8 +22,8 @@
  */
 
 module test {
-    // jdk.test.resources.classes.MyResourcesProvider is in named.bundles.
+    // jdk.test.resources.classes.spi.MyResourcesProvider is in named.bundles.
     requires named.bundles;
-    uses jdk.test.resources.classes.MyResourcesProvider;
-    uses jdk.test.resources.props.MyResourcesProvider;
+    uses jdk.test.resources.classes.spi.MyResourcesProvider;
+    uses jdk.test.resources.props.spi.MyResourcesProvider;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/xmlformat/src/bundles/jdk/test/resources/MyResourcesProvider.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.test.resources;
-
-import java.io.BufferedInputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.ResourceBundle;
-import java.util.spi.ResourceBundleProvider;
-
-public class MyResourcesProvider implements ResourceBundleProvider {
-    @Override
-    public ResourceBundle getBundle(String baseName, Locale locale) {
-        String xmlName = toXMLName(baseName, locale);
-        try (InputStream is = this.getClass().getModule().getResourceAsStream(xmlName)) {
-            return new XMLResourceBundle(new BufferedInputStream(is));
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private String toXMLName(String baseName, Locale locale) {
-        StringBuilder sb = new StringBuilder(baseName.replace('.', '/'));
-        String lang = locale.getLanguage();
-        if (!lang.isEmpty()) {
-            sb.append('_').append(lang);
-            String country = locale.getCountry();
-            if (!country.isEmpty()) {
-                sb.append('_').append(country);
-            }
-        }
-        return sb.append(".xml").toString();
-    }
-
-    private static class XMLResourceBundle extends ResourceBundle {
-        private Properties props;
-
-        XMLResourceBundle(InputStream stream) throws IOException {
-            props = new Properties();
-            props.loadFromXML(stream);
-        }
-
-        @Override
-        protected Object handleGetObject(String key) {
-            if (key == null) {
-                throw new NullPointerException();
-            }
-            return props.get(key);
-        }
-
-        @Override
-        public Enumeration<String> getKeys() {
-            // Not implemented
-            return null;
-        }
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ResourceBundle/modules/xmlformat/src/bundles/jdk/test/resources/spi/MyResourcesProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.resources.spi;
+
+import java.io.BufferedInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.ResourceBundle;
+import java.util.spi.ResourceBundleProvider;
+
+public class MyResourcesProvider implements ResourceBundleProvider {
+    @Override
+    public ResourceBundle getBundle(String baseName, Locale locale) {
+        String xmlName = toXMLName(baseName, locale);
+        try (InputStream is = this.getClass().getModule().getResourceAsStream(xmlName)) {
+            return new XMLResourceBundle(new BufferedInputStream(is));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private String toXMLName(String baseName, Locale locale) {
+        StringBuilder sb = new StringBuilder(baseName.replace('.', '/'));
+        String lang = locale.getLanguage();
+        if (!lang.isEmpty()) {
+            sb.append('_').append(lang);
+            String country = locale.getCountry();
+            if (!country.isEmpty()) {
+                sb.append('_').append(country);
+            }
+        }
+        return sb.append(".xml").toString();
+    }
+
+    private static class XMLResourceBundle extends ResourceBundle {
+        private Properties props;
+
+        XMLResourceBundle(InputStream stream) throws IOException {
+            props = new Properties();
+            props.loadFromXML(stream);
+        }
+
+        @Override
+        protected Object handleGetObject(String key) {
+            if (key == null) {
+                throw new NullPointerException();
+            }
+            return props.get(key);
+        }
+
+        @Override
+        public Enumeration<String> getKeys() {
+            // Not implemented
+            return null;
+        }
+    }
+}
--- a/jdk/test/java/util/ResourceBundle/modules/xmlformat/src/bundles/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/xmlformat/src/bundles/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,6 +22,6 @@
  */
 
 module bundles {
-    exports jdk.test.resources to test;
-    provides jdk.test.resources.MyResourcesProvider with jdk.test.resources.MyResourcesProvider;
+    exports jdk.test.resources.spi to test;
+    provides jdk.test.resources.spi.MyResourcesProvider with jdk.test.resources.spi.MyResourcesProvider;
 }
--- a/jdk/test/java/util/ResourceBundle/modules/xmlformat/src/test/module-info.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/ResourceBundle/modules/xmlformat/src/test/module-info.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,5 +24,5 @@
 module test {
     requires bundles;
 
-    uses jdk.test.resources.MyResourcesProvider;
+    uses jdk.test.resources.spi.MyResourcesProvider;
 }
--- a/jdk/test/java/util/WeakHashMap/GCDuringIteration.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/WeakHashMap/GCDuringIteration.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,7 @@
  * @test
  * @bug 6499848
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main GCDuringIteration
  * @summary Check that iterators work properly in the presence of
  *          concurrent finalization and removal of elements.
--- a/jdk/test/java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,7 @@
  * @bug 6450200
  * @summary Test proper handling of pool state changes
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main/othervm ConfigChanges
  * @key randomness
  * @author Martin Buchholz
--- a/jdk/test/java/util/jar/JarFile/mrjar/MultiReleaseJarAPI.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/jar/JarFile/mrjar/MultiReleaseJarAPI.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,7 +27,8 @@
  * @summary Test the extended API and the aliasing additions in JarFile that
  *          support multi-release jar files
  * @library /lib/testlibrary/java/util/jar /test/lib
- * @build Compiler JarBuilder CreateMultiReleaseTestJars
+ * @build jdk.test.lib.RandomFactory
+ *        Compiler JarBuilder CreateMultiReleaseTestJars
  * @run testng MultiReleaseJarAPI
  */
 
--- a/jdk/test/java/util/logging/FileHandlerMaxLocksTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/logging/FileHandlerMaxLocksTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,8 @@
  *  "logging.properties" file with default value of 100. This property can be
  *  overriden by specifying this property in the custom config file.
  * @library /test/lib
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
  * @author rpatil
  * @run main/othervm FileHandlerMaxLocksTest
  */
--- a/jdk/test/java/util/regex/RegExTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/regex/RegExTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -38,6 +38,7 @@
  * 8176029
  *
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main RegExTest
  * @key randomness
  */
--- a/jdk/test/java/util/zip/InflaterInputStream/TestAvailable.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/zip/InflaterInputStream/TestAvailable.java	Wed Jul 05 23:40:06 2017 +0200
@@ -23,6 +23,7 @@
 
 /* @test
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main TestAvailable
  * @bug 7031075 8161426
  * @summary Make sure that available() method behaves as expected.
--- a/jdk/test/java/util/zip/ZipFile/MultiThreadedReadTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/zip/ZipFile/MultiThreadedReadTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,8 @@
  * @bug 8038491
  * @summary Crash in ZipFile.read() when ZipFileInputStream is shared between threads
  * @library /test/lib
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
  * @run main MultiThreadedReadTest
  * @key randomness
  */
--- a/jdk/test/java/util/zip/ZipFile/ReadLongZipFileName.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/zip/ZipFile/ReadLongZipFileName.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,9 @@
  * @test
  * @bug 6374379
  * @library /test/lib
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
+ * @run main ReadLongZipFileName
  * @summary Verify that we can read zip file names > 255 chars long
  */
 
--- a/jdk/test/java/util/zip/ZipFile/ZipEntryFreeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/java/util/zip/ZipFile/ZipEntryFreeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,8 @@
  * @bug 6907252
  * @summary ZipFileInputStream Not Thread-Safe
  * @library /test/lib
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
  * @run main ZipEntryFreeTest
  */
 
--- a/jdk/test/javax/imageio/plugins/tiff/MultiPageTest/MultiPageTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/javax/imageio/plugins/tiff/MultiPageTest/MultiPageTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,6 +32,7 @@
  *          (number of pages, sizes, colors). Use -Dseed=X to set
  *          the random generator seed.
  *
+ * @build   jdk.test.lib.RandomFactory
  * @run     main MultiPageTest
  * @key     randomness
  */
--- a/jdk/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  *          java.security.jgss/sun.security.krb5.internal.crypto
  *          java.security.jgss/sun.security.krb5.internal.ktab
  *          java.base/sun.security.util
+ * @build jdk.test.lib.RandomFactory
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      -Dtest.mode=norm DTLSIncorrectAppDataTest
  * @run main/othervm -Dtest.security.protocol=DTLS
--- a/jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  *          java.security.jgss/sun.security.krb5.internal.crypto
  *          java.security.jgss/sun.security.krb5.internal.ktab
  *          java.base/sun.security.util
+ * @build jdk.test.lib.RandomFactory
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      DTLSRehandshakeWithCipherChangeTest
  */
--- a/jdk/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -36,6 +36,7 @@
  *          java.security.jgss/sun.security.krb5.internal.crypto
  *          java.security.jgss/sun.security.krb5.internal.ktab
  *          java.base/sun.security.util
+ * @build jdk.test.lib.RandomFactory
  * @run main/othervm -Dtest.security.protocol=DTLS
  *      -Dtest.mode=norm DTLSSequenceNumberTest
  * @run main/othervm -Dtest.security.protocol=DTLS
--- a/jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  *          java.security.jgss/sun.security.krb5.internal.crypto
  *          java.security.jgss/sun.security.krb5.internal.ktab
  *          java.base/sun.security.util
+ * @build jdk.test.lib.RandomFactory
  * @run main/othervm -Dtest.security.protocol=DTLSv1.0
  *      DTLSv10RehandshakeWithCipherChangeTest
  */
--- a/jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  *          java.security.jgss/sun.security.krb5.internal.crypto
  *          java.security.jgss/sun.security.krb5.internal.ktab
  *          java.base/sun.security.util
+ * @build jdk.test.lib.RandomFactory
  * @run main/othervm -Dtest.security.protocol=TLS TLSRehandshakeWithCipherChangeTest
  */
 
--- a/jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  *          java.security.jgss/sun.security.krb5.internal.crypto
  *          java.security.jgss/sun.security.krb5.internal.ktab
  *          java.base/sun.security.util
+ * @build jdk.test.lib.RandomFactory
  * @run main/othervm -Dtest.security.protocol=TLSv1 TLSRehandshakeWithCipherChangeTest
  */
 
--- a/jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  *          java.security.jgss/sun.security.krb5.internal.crypto
  *          java.security.jgss/sun.security.krb5.internal.ktab
  *          java.base/sun.security.util
+ * @build jdk.test.lib.RandomFactory
  * @run main/othervm -Dtest.security.protocol=TLSv1.1 TLSRehandshakeWithCipherChangeTest
  */
 
--- a/jdk/test/jdk/internal/ref/Cleaner/ExitOnThrow.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/jdk/internal/ref/Cleaner/ExitOnThrow.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,8 +27,12 @@
  * @library /test/lib
  * @modules java.base/jdk.internal.ref
  *          java.base/jdk.internal.misc
- * @build jdk.test.lib.*
- * @build jdk.test.lib.process.*
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run main ExitOnThrow
  * @summary Ensure that if a cleaner throws an exception then the VM exits
  */
--- a/jdk/test/jdk/internal/util/jar/TestVersionedStream.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/jdk/internal/util/jar/TestVersionedStream.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,6 +27,8 @@
  * @summary basic tests for multi-release jar versioned streams
  * @library /test/lib
  * @modules jdk.jartool/sun.tools.jar java.base/jdk.internal.util.jar
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
  * @run testng TestVersionedStream
  */
 
--- a/jdk/test/jdk/modules/incubator/ImageModules.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/jdk/modules/incubator/ImageModules.java	Wed Jul 05 23:40:06 2017 +0200
@@ -28,7 +28,9 @@
  * @library /lib/testlibrary /test/lib
  * @key intermittent
  * @modules jdk.compiler jdk.jartool jdk.jlink
- * @build jdk.test.lib.compiler.CompilerUtils
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.test.lib.compiler.CompilerUtils
  * @run testng/othervm ImageModules
  */
 
--- a/jdk/test/jdk/security/jarsigner/Spec.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/jdk/security/jarsigner/Spec.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,8 @@
  *          java.base/sun.security.provider.certpath
  *          jdk.jartool
  *          jdk.crypto.ec
+ * @build jdk.test.lib.util.JarUtils
+ * @run main Spec
  */
 
 import com.sun.jarsigner.ContentSigner;
--- a/jdk/test/lib/testlibrary/jdk/testlibrary/TimeLimitedRunner.java	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.testlibrary;
-
-import java.util.Objects;
-import java.util.concurrent.Callable;
-
-/**
- * Auxiliary class to run target w/ given timeout.
- */
-public class TimeLimitedRunner implements Callable<Void> {
-    private final long              stoptime;
-    private final long              timeout;
-    private final double            factor;
-    private final Callable<Boolean> target;
-
-    /**
-     * @param timeout   a timeout. zero means no time limitation
-     * @param factor    a multiplier used to estimate next iteration time
-     * @param target    a target to run
-     * @throws NullPointerException     if target is null
-     * @throws IllegalArgumentException if timeout is negative or
-                                        factor isn't positive
-     */
-    public TimeLimitedRunner(long timeout, double factor,
-            Callable<Boolean> target) {
-        Objects.requireNonNull(target, "target must not be null");
-        if (timeout < 0) {
-            throw new IllegalArgumentException("timeout[" + timeout + "] < 0");
-        }
-        if (factor <= 0d) {
-            throw new IllegalArgumentException("factor[" + factor + "] <= 0");
-        }
-        this.stoptime = System.currentTimeMillis() + timeout;
-        this.timeout = timeout;
-        this.factor = factor;
-        this.target = target;
-    }
-
-    /**
-     * Runs @{linkplan target} while it returns true and timeout isn't exceeded
-     */
-    @Override
-    public Void call() throws Exception {
-        long maxDuration = 0L;
-        long iterStart = System.currentTimeMillis();
-        if (timeout != 0 && iterStart > stoptime) {
-            return null;
-        }
-        while (target.call()) {
-            if (timeout != 0) {
-                long iterDuration = System.currentTimeMillis() - iterStart;
-                maxDuration = Math.max(maxDuration, iterDuration);
-                iterStart = System.currentTimeMillis();
-                if (iterStart + (maxDuration * factor) > stoptime) {
-                    System.out.println("Not enough time to continue execution. "
-                            + "Interrupted.");
-                    break;
-                }
-            }
-        }
-        return null;
-    }
-
-}
--- a/jdk/test/sun/misc/SunMiscSignalTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/misc/SunMiscSignalTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -46,7 +46,12 @@
  * @library /test/lib
  * @modules jdk.unsupported
  *          java.base/jdk.internal.misc
- * @build jdk.test.lib.Platform jdk.test.lib.Utils
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run testng/othervm -Xrs -DXrs=true SunMiscSignalTest
  * @run testng/othervm SunMiscSignalTest
  * @summary sun.misc.Signal test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/dns/CNameTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import jdk.test.lib.process.ProcessTools;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+
+/**
+ * @test
+ * @bug 4763315
+ * @modules java.naming
+ * @library /test/lib
+ * @build CanonicalName Lookup jdk.test.lib.process.*
+ * @run main/othervm/timeout=120 CNameTest
+ * @summary Test DNS provider's handling of CNAME records
+ */
+public class CNameTest {
+    private static final String HOST = "www-proxy.us.oracle.com";
+    private static final String POLICY = "grant {" + System.lineSeparator() +
+            " permission java.net .SocketPermission \"${HOST}\", \"resolve\";" +
+            System.lineSeparator() + "};";
+
+    public static void main(String[] args) throws Exception {
+        // Prerequisite check
+        int rc = ProcessTools.executeTestJava("CanonicalName", HOST)
+                             .outputTo(System.out)
+                             .errorTo(System.out)
+                             .getExitValue();
+        if (rc != 0) {
+            System.out.println("DNS not configured or host doesn't" +
+                    " resolve to CNAME record");
+            return;
+        }
+
+        // Tests - with & without security manager
+        Path policy = Paths.get(".", "java.policy");
+        Files.write(policy, POLICY.getBytes(), StandardOpenOption.CREATE_NEW);
+        String[] opts = new String[]{
+                "-Dsun.net.spi.nameservice.provider.1=dns,sun",
+                "-Djava.security.manager -Djava.security.policy=" + policy
+        };
+        for (String opt : opts) {
+            ProcessTools.executeTestJava(opt, "Lookup", HOST)
+                        .outputTo(System.out)
+                        .errorTo(System.err)
+                        .shouldHaveExitValue(0);
+        }
+    }
+}
+
--- a/jdk/test/sun/net/InetAddress/nameservice/dns/cname.sh	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-
-# @test
-# @bug 4763315
-# @modules java.naming
-# @build CanonicalName Lookup
-# @run shell/timeout=120 cname.sh
-# @summary Test DNS provider's handling of CNAME records
-
-
-# The host that we try to resolve
-
-HOST=www-proxy.us.oracle.com
-
-# fail gracefully if DNS is not configured or there
-# isn't a CNAME record.
-
-CLASSPATH=${TESTCLASSES}
-export CLASSPATH
-JAVA="${TESTJAVA}/bin/java"
-
-sh -xc "$JAVA ${TESTVMOPTS} CanonicalName $HOST" 2>&1
-if [ $? != 0 ]; then
-    echo "DNS not configured or host doesn't resolve to CNAME record"
-    exit 0
-fi
-
-failures=0
-
-go() {
-    echo ''
-    sh -xc "$JAVA ${TESTVMOPTS} $1 Lookup $2" 2>&1
-    if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
-}
-
-# Tests - with & without security manager
-
-POLICY=java.policy
-echo "grant {" > ${POLICY}
-echo " permission java.net.SocketPermission \"${HOST}\", \"resolve\";" >> ${POLICY}
-echo "};" >> ${POLICY}
-
-np="-Dsun.net.spi.nameservice.provider.1=dns,sun"
-sm="-Djava.security.manager -Djava.security.policy=${POLICY}"
-
-go "" "$HOST"
-go "$sm" "$HOST"
-
-
-#
-# Results
-#
-echo ''
-if [ $failures -gt 0 ];
-  then echo "$failures test(s) failed";
-  else echo "All test(s) passed"; fi
-exit $failures
--- a/jdk/test/sun/net/ftp/MarkResetTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/net/ftp/MarkResetTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,15 +22,30 @@
  */
 
 /*
- *
- * run from MarkResetTest.sh
+ * @test
+ * @bug 4673103
+ * @run main/othervm/timeout=140 MarkResetTest
+ * @summary URLConnection.getContent() hangs over FTP for DOC, PPT, XLS files
  */
 
-import java.io.*;
-import java.net.*;
-import java.util.regex.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 
 public class MarkResetTest {
+    private static final String FILE_NAME = "EncDec.doc";
 
     /**
      * A class that simulates, on a separate, an FTP server.
@@ -388,7 +403,9 @@
     }
 
     public static void main(String[] args) throws Exception {
-        MarkResetTest test = new MarkResetTest();
+        Files.copy(Paths.get(System.getProperty("test.src"), FILE_NAME),
+                Paths.get(".", FILE_NAME));
+        new MarkResetTest();
     }
 
     public MarkResetTest() {
@@ -402,9 +419,8 @@
                 port = server.getPort();
             }
 
-            String filename = "EncDec.doc";
-            URL url = new URL("ftp://localhost:" + port + "/" +
-                                filename);
+
+            URL url = new URL("ftp://localhost:" + port + "/" + FILE_NAME);
 
             URLConnection con = url.openConnection();
             System.out.println("getContent: " + con.getContent());
@@ -438,7 +454,7 @@
             server.interrupt();
 
             // Did we pass ?
-            if (len != (new File(filename)).length()) {
+            if (len != (new File(FILE_NAME)).length()) {
                 throw new Exception("Failed to read the file correctly");
             }
             System.out.println("PASSED: File read correctly");
--- a/jdk/test/sun/net/ftp/MarkResetTest.sh	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-#
-# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4673103
-# @run shell/timeout=140 MarkResetTest.sh
-# @summary URLConnection.getContent() hangs over FTP for DOC, PPT, XLS files
-
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux | Darwin | AIX )
-    PS=":"
-    FS="/"
-    ;;
-  CYGWIN* )
-    PS=";"
-    FS="/"
-    ;;
-  Windows* )
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}${FS}MarkResetTest.java
-
-# ftp server used by the test requires the file to be present
-# in this directory
-cp ${TESTSRC}${FS}EncDec.doc .
-
-${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} MarkResetTest
--- a/jdk/test/sun/net/www/protocol/file/DirPermissionDenied.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/net/www/protocol/file/DirPermissionDenied.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,14 +21,36 @@
  * questions.
  */
 
+/**
+ * @test
+ * @bug 6977851
+ * @summary NPE from FileURLConnection.connect
+ * @library /test/lib
+ * @build DirPermissionDenied jdk.test.lib.process.*
+ *        jdk.test.lib.util.FileUtils
+ * @run testng DirPermissionDenied
+ */
+
+import java.io.IOException;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
-import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 
+import jdk.test.lib.process.ProcessTools;
+import jdk.test.lib.util.FileUtils;
+import org.testng.annotations.AfterTest;
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeTest;
 public class DirPermissionDenied {
-    public static void main(String[] args) throws Exception {
-        URL url = new URL("file:" + args[0]);
+    private static final Path TEST_DIR = Paths.get(
+            "DirPermissionDeniedDirectory");
 
+    @Test
+    public void doTest() throws MalformedURLException {
+        URL url = new URL(TEST_DIR.toUri().toString());
         try {
             URLConnection uc = url.openConnection();
             uc.connect();
@@ -56,4 +78,20 @@
             throw new RuntimeException("Failed " + e);
         }
     }
+
+    @BeforeTest
+    public void setup() throws Throwable {
+        // mkdir and chmod "333"
+        Files.createDirectories(TEST_DIR);
+        ProcessTools.executeCommand("chmod", "333", TEST_DIR.toString())
+                    .outputTo(System.out)
+                    .errorTo(System.out)
+                    .shouldHaveExitValue(0);
+    }
+
+    @AfterTest
+    public void tearDown() throws IOException {
+        FileUtils.deleteFileIfExistsWithRetry(TEST_DIR);
+    }
 }
+
--- a/jdk/test/sun/net/www/protocol/file/DirPermissionDenied.sh	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#
-# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#
-# @test
-# @bug 6977851
-# @summary NPE from FileURLConnection.connect
-# @build DirPermissionDenied
-# @run shell DirPermissionDenied.sh
-
-TESTDIR="${TESTCLASSES}/DirPermissionDeniedDirectory"
-echo ${TESTDIR}
-
-rm -rf ${TESTDIR}
-mkdir -p ${TESTDIR}
-chmod 333 ${TESTDIR}
-
-$TESTJAVA/bin/java ${TESTVMOPTS} -classpath $TESTCLASSES DirPermissionDenied ${TESTDIR}
-result=$?
-
-# Add back read access for user, otherwise not removable on some systems
-chmod u+r ${TESTDIR}
-
-rm -rf ${TESTDIR}
-exit $result
--- a/jdk/test/sun/net/www/protocol/https/HttpsURLConnection/B6216082.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/net/www/protocol/https/HttpsURLConnection/B6216082.java	Wed Jul 05 23:40:06 2017 +0200
@@ -32,7 +32,9 @@
  * @summary  Redirect problem with HttpsURLConnection using a proxy
  * @modules java.base/sun.net.www
  * @library .. /test/lib
- * @build HttpCallback TestHttpsServer ClosedChannelList
+ * @build jdk.test.lib.NetworkConfiguration
+ *        jdk.test.lib.Platform
+ *        HttpCallback TestHttpsServer ClosedChannelList
  *        HttpTransaction TunnelProxy
  * @key intermittent
  * @run main/othervm B6216082
--- a/jdk/test/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.java	Wed Jul 05 23:40:06 2017 +0200
@@ -39,6 +39,12 @@
  *          that serves http POST method requests in secure channel, and a client
  *          that makes https POST request through a proxy.
  * @library /test/lib
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @compile OriginServer.java ProxyTunnelServer.java
  * @run main/othervm PostThruProxy
  */
--- a/jdk/test/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.java	Wed Jul 05 23:40:06 2017 +0200
@@ -39,6 +39,12 @@
  *          http POST method requests in secure channel, and a client that
  *          makes https POST request through a proxy.
  * @library /test/lib
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @compile OriginServer.java ProxyTunnelServer.java
  * @run main/othervm -Djdk.http.auth.tunneling.disabledSchemes= PostThruProxyWithAuth
  */
--- a/jdk/test/sun/net/www/protocol/jar/GetContentTypeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/net/www/protocol/jar/GetContentTypeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,9 +25,13 @@
  * @test
  * @bug 4274624
  * @library /test/lib
- * @build GetContentType GetContentTypeTest
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
  *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
  *        jdk.test.lib.process.*
+ *        GetContentType GetContentTypeTest
  * @run main/othervm GetContentTypeTest
  * @summary Test JarURLConnection.getContentType would
  *          would return default "content/unknown"
--- a/jdk/test/sun/net/www/protocol/jar/jarbug/TestDriver.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/net/www/protocol/jar/jarbug/TestDriver.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,10 +27,14 @@
  * @library /test/lib
  *          /lib/testlibrary
  * @modules jdk.compiler
- * @build src.test.src.TestDriver JarUtils
- *        jdk.test.lib.compiler.CompilerUtils
+ * @build jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
  *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
  *        jdk.test.lib.process.*
+ *        src.test.src.TestDriver JarUtils
  * @summary various resource and classloading bugs related to jar files
  * @run main/othervm TestDriver
  */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/www/protocol/jrt/OtherResourcesTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import jdk.test.lib.JDKToolFinder;
+import static jdk.test.lib.process.ProcessTools.executeCommand;
+
+/**
+ * @test
+ * @bug 8142968
+ * @summary Access a jrt:/ resource in an observable module that is not in
+ *          the boot layer and hence not known to the built-in class loaders.
+ *          This test is intended to run with --limit-modules.
+ * @library /test/lib
+ * @build OtherResources OtherResourcesTest
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.process.*
+ * @run main OtherResourcesTest
+ */
+public class OtherResourcesTest {
+    public static void main(String[] args) throws Throwable {
+        String classes = System.getProperty("test.classes");
+        executeCommand(JDKToolFinder.getTestJDKTool("java"),
+                       "--limit-modules", "java.base",
+                       "-cp", classes, "OtherResources")
+                      .outputTo(System.out)
+                      .errorTo(System.out)
+                      .shouldHaveExitValue(0);
+    }
+}
+
--- a/jdk/test/sun/net/www/protocol/jrt/other_resources.sh	Thu Jun 15 13:44:42 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#
-# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @build OtherResources
-# @run shell other_resources.sh
-# @summary Access a jrt:/ resource in an observable module that is not in
-#  the boot layer and hence not known to the built-in class loaders. This
-#  test is a shell test because the run tag doesn't support --limit-modules.
-
-set -e
-
-if [ -z "$TESTJAVA" ]; then
-  if [ $# -lt 1 ]; then exit 1; fi
-  TESTJAVA="$1"; shift
-  COMPILEJAVA="${TESTJAVA}"
-  TESTSRC="`pwd`"
-  TESTCLASSES="`pwd`"
-fi
-
-JAVA="$TESTJAVA/bin/java ${TESTVMOPTS}"
-$JAVA --limit-modules java.base -cp $TESTCLASSES OtherResources
-
-exit 0
-
--- a/jdk/test/sun/nio/cs/FindDecoderBugs.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/nio/cs/FindDecoderBugs.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,7 @@
  * @bug 6380723
  * @summary Decode many byte sequences in many ways (use -Dseed=X to set PRNG seed)
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main/timeout=1800 FindDecoderBugs
  * @author Martin Buchholz
  * @key randomness
--- a/jdk/test/sun/nio/cs/FindEncoderBugs.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/nio/cs/FindEncoderBugs.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,7 @@
  * @bug 6233345 6381699 6381702 6381705 6381706
  * @summary Encode many char sequences in many ways
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @run main/timeout=1200 FindEncoderBugs
  * @author Martin Buchholz
  * @key randomness
--- a/jdk/test/sun/security/ec/SignatureOffsets.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/ec/SignatureOffsets.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  *          generation, the test tries to verify signature with the above API
  *          and passing in different signature offset (0, 33, 66, 99).
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @compile ../../../java/security/Signature/Offsets.java
  * @run main SignatureOffsets SunEC NONEwithECDSA
  * @run main SignatureOffsets SunEC SHA1withECDSA
--- a/jdk/test/sun/security/krb5/auto/ModuleName.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/krb5/auto/ModuleName.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,6 +27,12 @@
  * @summary GSSContext type when jdk.security.jgss is not available
  * @library /test/lib
  * @compile -XDignore.symbol.file ModuleName.java
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run main/othervm ModuleName
  */
 
--- a/jdk/test/sun/security/krb5/auto/ReplayCacheTestProc.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/krb5/auto/ReplayCacheTestProc.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,7 @@
  * @bug 7152176 8168518 8172017
  * @summary More krb5 tests
  * @library ../../../../java/security/testlibrary/ /test/lib
+ * @build jdk.test.lib.Platform
  * @run main/othervm/timeout=300 ReplayCacheTestProc
  */
 
--- a/jdk/test/sun/security/krb5/auto/rcache_usemd5.sh	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/krb5/auto/rcache_usemd5.sh	Wed Jul 05 23:40:06 2017 +0200
@@ -24,6 +24,7 @@
 # @test
 # @bug 8168518
 # @library ../../../../java/security/testlibrary/ /test/lib
+# @build jdk.test.lib.Platform
 # @run main/othervm/timeout=300 -Djdk.krb5.rcache.useMD5=true
 #           -Dtest.service=host ReplayCacheTestProc
 # @summary  testing jdk.krb5.rcache.useMD5. This action is put in a separate
--- a/jdk/test/sun/security/mscapi/SignatureOffsets.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/mscapi/SignatureOffsets.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  *          generation, the test tries to verify signature with the above API
  *          and passing in different signature offset (0, 33, 66, 99).
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @compile ../../../java/security/Signature/Offsets.java
  * @requires os.family == "windows"
  * @run main SignatureOffsets SunMSCAPI NONEwithRSA
--- a/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * @library ..
  * @library /test/lib
  * @modules jdk.crypto.cryptoki
+ * @build jdk.test.lib.RandomFactory
  * @run main/othervm -Djava.security.debug=sunpkcs11 TestKeyPairGenerator
  * @run main/othervm -Djava.security.debug=sunpkcs11 TestKeyPairGenerator
  *                                                   sm TestKeyPairGenerator.policy
--- a/jdk/test/sun/security/rsa/SignatureOffsets.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/rsa/SignatureOffsets.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  *          generation, the test tries to verify signature with the above API
  *          and passing in different signature offset (0, 33, 66, 99).
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @compile ../../../java/security/Signature/Offsets.java
  * @run main SignatureOffsets SunRsaSign MD2withRSA
  * @run main SignatureOffsets SunRsaSign MD5withRSA
--- a/jdk/test/sun/security/ssl/CertPathRestrictions/TLSRestrictions.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/ssl/CertPathRestrictions/TLSRestrictions.java	Wed Jul 05 23:40:06 2017 +0200
@@ -48,8 +48,15 @@
 
 /*
  * @test
+ * @bug 8165367
  * @summary Verify the restrictions for certificate path on JSSE with custom trust store.
  * @library /test/lib
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @compile JSSEClient.java
  * @run main/othervm -Djava.security.debug=certpath TLSRestrictions DEFAULT
  * @run main/othervm -Djava.security.debug=certpath TLSRestrictions C1
--- a/jdk/test/sun/security/ssl/rsa/SignatureOffsets.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/ssl/rsa/SignatureOffsets.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,7 @@
  *          generation, the test tries to verify signature with the above API
  *          and passing in different signature offset (0, 33, 66, 99).
  * @library /test/lib
+ * @build jdk.test.lib.RandomFactory
  * @compile ../../../../java/security/Signature/Offsets.java
  * @run main SignatureOffsets SunJSSE MD2withRSA
  * @run main SignatureOffsets SunJSSE MD5withRSA
--- a/jdk/test/sun/security/tools/jarsigner/AltProvider.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/AltProvider.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,6 +27,15 @@
  * @summary -providerPath, -providerClass, -addprovider, and -providerArg
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
+ * @build jdk.test.lib.util.JarUtils
+ *        jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
+ * @run main AltProvider
  */
 
 import jdk.test.lib.JDKToolLauncher;
--- a/jdk/test/sun/security/tools/jarsigner/Options.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/Options.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,8 @@
  *          jdk.jartool/sun.security.tools.jarsigner
  *          java.base/sun.security.pkcs
  *          java.base/sun.security.x509
+ * @build jdk.test.lib.util.JarUtils
+ * @run main Options
  */
 
 import com.sun.jarsigner.ContentSigner;
--- a/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java	Wed Jul 05 23:40:06 2017 +0200
@@ -68,6 +68,14 @@
  *          java.base/sun.security.tools.keytool
  * @library /lib/testlibrary
  * @library /test/lib
+ * @build jdk.test.lib.util.JarUtils
+ *        jdk.test.lib.SecurityTools
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run main/timeout=600 TimestampCheck
  */
 public class TimestampCheck {
--- a/jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -36,6 +36,7 @@
  *          java.base/sun.security.util
  *          java.base/sun.security.x509
  *          java.management
+ * @build jdk.test.lib.util.JarUtils
  * @run main TsacertOptionTest
  */
 public class TsacertOptionTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/Warning.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/Warning.java	Wed Jul 05 23:40:06 2017 +0200
@@ -35,6 +35,8 @@
  * @bug 8024302 8026037 8130132
  * @summary warnings, errors and -strict
  * @library /lib/testlibrary /test/lib
+ * @build jdk.test.lib.util.JarUtils
+ * @run main Warning
  */
 public class Warning {
 
--- a/jdk/test/sun/security/tools/jarsigner/multiRelease/MVJarSigningTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/multiRelease/MVJarSigningTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,13 @@
  * @bug 8047305 8075618
  * @summary Tests jarsigner tool and JarSigner API work with multi-release JAR files.
  * @library /test/lib
+ * @build jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run main MVJarSigningTest
  */
 
--- a/jdk/test/sun/security/tools/jarsigner/warnings/AliasNotInStoreTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/AliasNotInStoreTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * @bug 8024302 8026037
  * @summary Test for aliasNotInStore warning
  * @library /lib/testlibrary /test/lib ../
+ * @build jdk.test.lib.util.JarUtils
  * @run main AliasNotInStoreTest
  */
 public class AliasNotInStoreTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/BadExtendedKeyUsageTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/BadExtendedKeyUsageTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * @bug 8024302 8026037
  * @summary Test for badExtendedKeyUsage warning
  * @library /lib/testlibrary /test/lib ../
+ * @build jdk.test.lib.util.JarUtils
  * @run main BadExtendedKeyUsageTest
  */
 public class BadExtendedKeyUsageTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,7 @@
  * @summary Test for badKeyUsage warning
  * @library /lib/testlibrary /test/lib ../
  * @ignore until 8026393 is fixed
+ * @build jdk.test.lib.util.JarUtils
  * @run main BadKeyUsageTest
  */
 public class BadKeyUsageTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/BadNetscapeCertTypeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/BadNetscapeCertTypeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -33,6 +33,7 @@
  * @bug 8024302 8026037
  * @summary Test for badNetscapeCertType warning
  * @library /lib/testlibrary /test/lib ../
+ * @build jdk.test.lib.util.JarUtils
  * @run main BadNetscapeCertTypeTest
  */
 public class BadNetscapeCertTypeTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/ChainNotValidatedTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/ChainNotValidatedTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,7 @@
  * @bug 8024302 8026037
  * @summary Test for chainNotValidated warning
  * @library /lib/testlibrary /test/lib ../
+ * @build jdk.test.lib.util.JarUtils
  * @run main ChainNotValidatedTest
  */
 public class ChainNotValidatedTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiredCertTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiredCertTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * @bug 8024302 8026037
  * @summary Test for hasExpiredCert warning
  * @library /lib/testlibrary /test/lib ../
+ * @build jdk.test.lib.util.JarUtils
  * @run main HasExpiredCertTest
  */
 public class HasExpiredCertTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiringCertTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiringCertTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * @bug 8024302 8026037
  * @summary Test for hasExpiringCert warning
  * @library /lib/testlibrary /test/lib ../
+ * @build jdk.test.lib.util.JarUtils
  * @run main HasExpiringCertTest
  */
 public class HasExpiringCertTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/HasUnsignedEntryTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/HasUnsignedEntryTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * @bug 8024302 8026037
  * @summary Test for hasUnsignedEntry warning
  * @library /lib/testlibrary /test/lib ../
+ * @build jdk.test.lib.util.JarUtils
  * @run main HasUnsignedEntryTest
  */
 public class HasUnsignedEntryTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/MultipleWarningsTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/MultipleWarningsTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * @bug 8024302 8026037
  * @summary Checks if jarsigner prints appropriate warnings
  * @library /lib/testlibrary /test/lib ../
+ * @build jdk.test.lib.util.JarUtils
  * @run main MultipleWarningsTest
  */
 public class MultipleWarningsTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/NoTimestampTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/NoTimestampTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,7 @@
  * @bug 8024302 8026037
  * @summary Checks warnings if -tsa and -tsacert options are not specified
  * @library /lib/testlibrary /test/lib ../
+ * @build jdk.test.lib.util.JarUtils
  * @run main NoTimestampTest
  */
 public class NoTimestampTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/NotSignedByAliasTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/NotSignedByAliasTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * @bug 8024302 8026037
  * @summary Test for notSignedByAlias warning
  * @library /lib/testlibrary /test/lib ../
+ * @build jdk.test.lib.util.JarUtils
  * @run main NotSignedByAliasTest
  */
 public class NotSignedByAliasTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/NotYetValidCertTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/NotYetValidCertTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,7 @@
  * @bug 8024302 8026037
  * @summary Test for notYetValidCert warning
  * @library /lib/testlibrary /test/lib ../
+ * @build jdk.test.lib.util.JarUtils
  * @run main NotYetValidCertTest
  */
 public class NotYetValidCertTest extends Test {
--- a/jdk/test/sun/security/tools/keytool/ImportPrompt.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/keytool/ImportPrompt.java	Wed Jul 05 23:40:06 2017 +0200
@@ -33,6 +33,14 @@
  * @bug 8172975
  * @summary SecurityTools.keytool() needs to accept user input
  * @library /test/lib
+ * @build jdk.test.lib.SecurityTools
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
+ * @run main ImportPrompt
  */
 
 public class ImportPrompt {
--- a/jdk/test/sun/security/tools/keytool/PrintSSL.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/keytool/PrintSSL.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,13 @@
  * @bug 6480981 8160624
  * @summary keytool should be able to import certificates from remote SSL server
  * @library /test/lib
+ * @build jdk.test.lib.SecurityTools
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run main/othervm PrintSSL
  */
 
--- a/jdk/test/sun/security/tools/keytool/ReadJar.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/keytool/ReadJar.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,15 @@
  * @bug 6890872 8168882
  * @summary keytool -printcert to recognize signed jar files
  * @library /test/lib
+ * @build jdk.test.lib.SecurityTools
+ *        jdk.test.lib.util.JarUtils
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
+ * @run main ReadJar
  */
 
 import java.nio.file.Files;
--- a/jdk/test/sun/security/tools/keytool/WeakAlg.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/tools/keytool/WeakAlg.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,13 @@
  * @modules java.base/sun.security.tools.keytool
  *          java.base/sun.security.tools
  *          java.base/sun.security.util
+ * @build jdk.test.lib.SecurityTools
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run main/othervm/timeout=600 -Duser.language=en -Duser.country=US WeakAlg
  */
 
--- a/jdk/test/sun/security/util/DerInputBuffer/TimeParsing.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/security/util/DerInputBuffer/TimeParsing.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 4558835 4915146
+ * @bug 4558835 4915146 8181841
  * @summary Verify timezone offset and fractional seconds are correctly parsed
  * @modules java.base/sun.security.util
  */
@@ -77,6 +77,10 @@
   private final static byte[] GEN_FRACT3_ZULU =
     {0x18, 0x13, 0x32, 0x30, 0x30, 0x31, 0x30, 0x38, 0x31, 0x30, 0x31, 0x37, 0x34, 0x33, 0x35, 0x31, 0x2e, 0x37, 0x36, 0x35, 0x5a};
 
+  // 20010810174351.7654Z
+  private final static byte[] GEN_FRACT4_ZULU =
+    {0x18, 0x14, 0x32, 0x30, 0x30, 0x31, 0x30, 0x38, 0x31, 0x30, 0x31, 0x37, 0x34, 0x33, 0x35, 0x31, 0x2e, 0x37, 0x36, 0x35, 0x34, 0x5a};
+
   // 20010810184351.7+0100
   private final static byte[] GEN_FRACT1_PLUS1 =
     {0x18, 0x15, 0x32, 0x30, 0x30, 0x31, 0x30, 0x38, 0x31, 0x30, 0x31, 0x38, 0x34, 0x33, 0x35, 0x31, 0x2e, 0x37, 0x2b, 0x30, 0x31, 0x30, 0x30};
@@ -89,10 +93,17 @@
   private final static byte[] GEN_FRACT3_PLUS1 =
     {0x18, 0x17, 0x32, 0x30, 0x30, 0x31, 0x30, 0x38, 0x31, 0x30, 0x31, 0x38, 0x34, 0x33, 0x35, 0x31, 0x2e, 0x37, 0x36, 0x35, 0x2b, 0x30, 0x31, 0x30, 0x30};
 
+  // 20010810184351.7654+0100
+  private final static byte[] GEN_FRACT4_PLUS1 =
+    {0x18, 0x18, 0x32, 0x30, 0x30, 0x31, 0x30, 0x38, 0x31, 0x30, 0x31, 0x38, 0x34, 0x33, 0x35, 0x31, 0x2e, 0x37, 0x36, 0x35, 0x34, 0x2b, 0x30, 0x31, 0x30, 0x30};
+
   // 20010810184351,765+0100
   private final static byte[] GEN_FRACT3_COMMA_PLUS1 =
     {0x18, 0x17, 0x32, 0x30, 0x30, 0x31, 0x30, 0x38, 0x31, 0x30, 0x31, 0x38, 0x34, 0x33, 0x35, 0x31, 0x2c, 0x37, 0x36, 0x35, 0x2b, 0x30, 0x31, 0x30, 0x30};
 
+  // 20010810184351,7654+0100
+  private final static byte[] GEN_FRACT4_COMMA_PLUS1 =
+    {0x18, 0x18, 0x32, 0x30, 0x30, 0x31, 0x30, 0x38, 0x31, 0x30, 0x31, 0x38, 0x34, 0x33, 0x35, 0x31, 0x2c, 0x37, 0x36, 0x35, 0x34, 0x2b, 0x30, 0x31, 0x30, 0x30};
 
   private static Date decodeUTC(byte[] b) throws IOException {
     DerInputStream derin = new DerInputStream(b);
@@ -146,6 +157,8 @@
     checkGeneralized(d3, GEN_FRACT3_ZULU, "fractional seconds (Zulu)");
     checkGeneralized(d3, GEN_FRACT3_PLUS1, "fractional seconds (+0100)");
     checkGeneralized(d3, GEN_FRACT3_COMMA_PLUS1, "fractional seconds (+0100)");
+    checkGeneralized(d3, GEN_FRACT4_ZULU, "fractional seconds (Zulu)");
+    checkGeneralized(d3, GEN_FRACT4_PLUS1, "fractional seconds (+0100)");
+    checkGeneralized(d3, GEN_FRACT4_COMMA_PLUS1, "fractional seconds (+0100)");
   }
-
 }
--- a/jdk/test/sun/text/resources/LocaleData.cldr	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/text/resources/LocaleData.cldr	Wed Jul 05 23:40:06 2017 +0200
@@ -8274,3 +8274,29 @@
 
 # bug #8075173
 FormatData/de/standalone.MonthAbbreviations/2=M\u00e4r
+
+# bug #8178872
+FormatData/pt_PT/latn.NumberElements/0=,
+FormatData/pt_PT/latn.NumberElements/1=\u00a0
+FormatData/pt_AO/latn.NumberElements/0=,
+FormatData/pt_AO/latn.NumberElements/1=\u00a0
+FormatData/pt_CH/latn.NumberElements/0=,
+FormatData/pt_CH/latn.NumberElements/1=\u00a0
+FormatData/pt_CV/latn.NumberElements/0=,
+FormatData/pt_CV/latn.NumberElements/1=\u00a0
+FormatData/pt_GQ/latn.NumberElements/0=,
+FormatData/pt_GQ/latn.NumberElements/1=\u00a0
+FormatData/pt_MO/latn.NumberElements/0=,
+FormatData/pt_MO/latn.NumberElements/1=\u00a0
+FormatData/pt_LU/latn.NumberElements/0=,
+FormatData/pt_LU/latn.NumberElements/1=\u00a0
+FormatData/pt_MZ/latn.NumberElements/0=,
+FormatData/pt_MZ/latn.NumberElements/1=\u00a0
+FormatData/pt_ST/latn.NumberElements/0=,
+FormatData/pt_ST/latn.NumberElements/1=\u00a0
+FormatData/pt_TL/latn.NumberElements/0=,
+FormatData/pt_TL/latn.NumberElements/1=\u00a0
+FormatData/kea/latn.NumberElements/0=,
+FormatData/kea/latn.NumberElements/1=\u00a0
+FormatData/kea_CV/latn.NumberElements/0=,
+FormatData/kea_CV/latn.NumberElements/1=\u00a0
--- a/jdk/test/sun/text/resources/LocaleDataTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/sun/text/resources/LocaleDataTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,7 +37,7 @@
  *      7003124 7085757 7028073 7171028 7189611 8000983 7195759 8004489 8006509
  *      7114053 7074882 7040556 8008577 8013836 8021121 6192407 6931564 8027695
  *      8017142 8037343 8055222 8042126 8074791 8075173 8080774 8129361 8134916
- *      8145136 8145952 8164784 8037111 8081643 7037368
+ *      8145136 8145952 8164784 8037111 8081643 7037368 8178872
  * @summary Verify locale data
  * @modules java.base/sun.util.resources
  * @modules jdk.localedata
@@ -99,8 +99,15 @@
  *        LocaleNames/fr_FR/US=\u00c9tats-Unis
  *        LocaleNames/fr_FR/FR=France</pre>
  *
- *    You can use language tag with '-' in locale field like this:<pre>
- *        LocaleNames/sr-Latn/SR=Surinam
+ *    Second field which designates locale is in the form of:
+ *    1) Legacy locale notation using '_' as a locale component(language/country/variant) separator.
+ *    language is a mandatory component. country and variant are optional, however,
+ *    variant cannot exist without country. So for example, while "ja"/"ja_JP"/"ja_JP_JP" are valid,
+ *    "_JP"/"ja__JP" are invalid.
+ *
+ *    2) BCP47 language tag notation in which we can specify language tag with '-' as a subtag
+ *       separator. Language tag can be specified with '-' in locale field like this:
+ *       <pre>LocaleNames/sr-Latn/SR=Surinam
  *        FormatData/sr-Latn-BA/DayNames/2=utorak</pre>
  *
  *    The command-line syntax of this test is
@@ -276,16 +283,25 @@
             throw new Exception("Malformed input file: \"" + key + "\" is missing locale name");
         localeName = key.substring(oldIndex, index);
         boolean use_tag = localeName.indexOf("-") != -1;
-
         if (use_tag == false && localeName.length() > 0) {
-            language = localeName.substring(0, 2);
-            if (localeName.length() > 3) {
-                country = localeName.substring(3, 5);
-                if (localeName.length() > 5)
-                    variant = localeName.substring(6);
+            String[] locDetails = localeName.split("_");
+            switch (locDetails.length) {
+                case 1:
+                    language = locDetails[0];
+                    break;
+                case 2:
+                    language = locDetails[0];
+                    country = locDetails[1];
+                    break;
+                case 3:
+                    language = locDetails[0];
+                    country = locDetails[1];
+                    variant = locDetails[2];
+                    break;
+                default:
+                    throw new Exception("locale not specified properly " + locDetails);
             }
         }
-
         oldIndex = index + 1;
         index = key.indexOf("/", oldIndex);
         if (index == -1)
--- a/jdk/test/tools/jar/InputFilesTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jar/InputFilesTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,8 @@
  *          demonstrating identical behavior to JDK 8 jar tool.
  * @library /test/lib
  * @modules jdk.jartool
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
  * @run testng InputFilesTest
  */
 
--- a/jdk/test/tools/jar/ReleaseBeforeFiles.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jar/ReleaseBeforeFiles.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,8 @@
  *          not the --release option is preceded by a file name.
  * @library /test/lib
  * @modules jdk.jartool/sun.tools.jar
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
  * @run testng ReleaseBeforeFiles
  */
 
--- a/jdk/test/tools/jar/compat/CLICompatibility.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jar/compat/CLICompatibility.java	Wed Jul 05 23:40:06 2017 +0200
@@ -50,7 +50,9 @@
  * @test
  * @bug 8170952
  * @library /lib/testlibrary /test/lib
- * @build jdk.testlibrary.JDKToolFinder
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.testlibrary.JDKToolFinder
  * @run testng CLICompatibility
  * @summary Basic test for compatibility of CLI options
  */
--- a/jdk/test/tools/jar/mmrjar/Basic.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jar/mmrjar/Basic.java	Wed Jul 05 23:40:06 2017 +0200
@@ -30,6 +30,8 @@
  *          jdk.compiler
  *          jdk.jartool
  * @library /test/lib
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
  * @run testng Basic
  */
 
--- a/jdk/test/tools/jar/modularJar/Basic.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jar/modularJar/Basic.java	Wed Jul 05 23:40:06 2017 +0200
@@ -50,7 +50,9 @@
  * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler
  *          jdk.jartool
- * @build jdk.testlibrary.JDKToolFinder
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.testlibrary.JDKToolFinder
  * @compile Basic.java
  * @run testng Basic
  * @summary Tests for plain Modular jars & Multi-Release Modular jars
--- a/jdk/test/tools/jar/multiRelease/ApiValidatorTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jar/multiRelease/ApiValidatorTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -28,7 +28,14 @@
  * @modules java.base/jdk.internal.misc
  *          jdk.compiler
  *          jdk.jartool
- * @build MRTestBase
+ * @build jdk.test.lib.util.FileUtils
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
+ *        MRTestBase
  * @run testng/timeout=1200 ApiValidatorTest
  */
 
--- a/jdk/test/tools/jar/multiRelease/Basic.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jar/multiRelease/Basic.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,7 +27,14 @@
  * @modules java.base/jdk.internal.misc
  *          jdk.compiler
  *          jdk.jartool
- * @build MRTestBase
+ * @build jdk.test.lib.util.FileUtils
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
+ *        MRTestBase
  * @run testng Basic
  */
 
--- a/jdk/test/tools/jar/multiRelease/Basic1.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jar/multiRelease/Basic1.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,8 +27,13 @@
  * @modules java.base/jdk.internal.misc
  *          jdk.compiler
  *          jdk.jartool
- * @build jdk.test.lib.JDKToolFinder jdk.test.lib.Utils
- * @build MRTestBase
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
+ *        MRTestBase
  * @run testng Basic1
  */
 
--- a/jdk/test/tools/jar/multiRelease/RuntimeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jar/multiRelease/RuntimeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -26,6 +26,13 @@
  * @summary Test Multi-Release jar usage in runtime
  * @library /test/lib
  * @modules jdk.compiler
+ * @build jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run testng RuntimeTest
  */
 
--- a/jdk/test/tools/jlink/multireleasejar/JLinkMultiReleaseJarTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jlink/multireleasejar/JLinkMultiReleaseJarTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,9 +29,14 @@
  * @library /test/lib
  * @modules java.base/jdk.internal.jimage
  *          java.base/jdk.internal.module
- * @build jdk.test.lib.process.*
+ * @build jdk.test.lib.Utils
+ *        jdk.test.lib.Asserts
+ *        jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.JDKToolLauncher
+ *        jdk.test.lib.Platform
+ *        jdk.test.lib.process.*
  * @run testng JLinkMultiReleaseJarTest
-*/
+ */
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
--- a/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/CompiledVersionTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/CompiledVersionTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -42,8 +42,10 @@
  * @test
  * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler jdk.jlink
- * @build CompiledVersionTest jdk.testlibrary.ProcessTools
- *        jdk.test.lib.compiler.CompilerUtils
+ * @build jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.test.lib.Platform
+ *        CompiledVersionTest jdk.testlibrary.ProcessTools
  * @run testng CompiledVersionTest
  */
 
--- a/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/UserModuleTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/UserModuleTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -48,8 +48,10 @@
  * @modules jdk.compiler jdk.jlink
  * @modules java.base/jdk.internal.module
  * @modules java.base/jdk.internal.org.objectweb.asm
- * @build ModuleTargetHelper UserModuleTest jdk.testlibrary.ProcessTools
- *        jdk.test.lib.compiler.CompilerUtils
+ * @build jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.test.lib.Platform
+ *        ModuleTargetHelper UserModuleTest jdk.testlibrary.ProcessTools
  * @run testng UserModuleTest
  */
 
--- a/jdk/test/tools/jmod/JmodNegativeTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jmod/JmodNegativeTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,6 +27,8 @@
  * @modules jdk.compiler
  *          jdk.jlink
  * @build jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.test.lib.Platform
  * @run testng JmodNegativeTest
  * @summary Negative tests for jmod
  */
--- a/jdk/test/tools/jmod/JmodTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jmod/JmodTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -29,6 +29,8 @@
  * @modules jdk.compiler
  *          jdk.jlink
  * @build jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.test.lib.Platform
  * @run testng/othervm -Djava.io.tmpdir=. JmodTest
  */
 
--- a/jdk/test/tools/jmod/hashes/HashesTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/jmod/hashes/HashesTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -31,6 +31,8 @@
  *          jdk.compiler
  *          jdk.jartool
  *          jdk.jlink
+ * @build jdk.test.lib.compiler.ModuleInfoMaker
+ *        jdk.test.lib.compiler.CompilerUtils
  * @run testng HashesTest
  */
 
--- a/jdk/test/tools/launcher/LauncherMessageTest.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/launcher/LauncherMessageTest.java	Wed Jul 05 23:40:06 2017 +0200
@@ -25,6 +25,8 @@
  * @test
  * @bug 8167063
  * @library /test/lib
+ * @build jdk.test.lib.Platform
+ *        jdk.test.lib.util.FileUtils
  * @run main LauncherMessageTest
  * @summary LauncherHelper should not throw JNI error for LinkageError
  */
--- a/jdk/test/tools/launcher/modules/addexports/AddExportsTestWarningError.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/launcher/modules/addexports/AddExportsTestWarningError.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,7 +27,9 @@
  * @summary Basic argument validation for --add-exports
  * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler
- * @build jdk.testlibrary.*
+ * @build jdk.test.lib.compiler.ModuleInfoMaker
+ *        jdk.test.lib.compiler.CompilerUtils
+ *        jdk.testlibrary.*
  * @run testng AddExportsTestWarningError
  */
 
--- a/jdk/test/tools/launcher/modules/addreads/AddReadsTestWarningError.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/launcher/modules/addreads/AddReadsTestWarningError.java	Wed Jul 05 23:40:06 2017 +0200
@@ -27,8 +27,10 @@
  * @summary  Basic argument validation for --add-reads
  * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler
+ * @build jdk.test.lib.compiler.ModuleInfoMaker
+ * @build jdk.test.lib.compiler.CompilerUtils
+ * @build jdk.testlibrary.*
  * @build AddReadsTestWarningError
- * @build jdk.testlibrary.*
  * @run testng AddReadsTestWarningError
  */
 
--- a/jdk/test/tools/launcher/modules/patch/systemmodules/PatchSystemModules.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/jdk/test/tools/launcher/modules/patch/systemmodules/PatchSystemModules.java	Wed Jul 05 23:40:06 2017 +0200
@@ -28,6 +28,8 @@
  * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler
  * @build jdk.test.lib.compiler.CompilerUtils
+ *        jdk.test.lib.util.FileUtils
+ *        jdk.test.lib.Platform
  * @run testng PatchSystemModules
  */
 
--- a/make/CompileJavaModules.gmk	Thu Jun 15 13:44:42 2017 +0200
+++ b/make/CompileJavaModules.gmk	Wed Jul 05 23:40:06 2017 +0200
@@ -42,8 +42,7 @@
 
 ################################################################################
 
-java.base_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*' -XDstringConcat=inline \
-    --doclint-format html4
+java.base_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*' -XDstringConcat=inline
 java.base_COPY := .icu .dat .spp content-types.properties hijrah-config-islamic-umalqura.properties
 java.base_CLEAN := intrinsic.properties
 
--- a/nashorn/.hgtags	Thu Jun 15 13:44:42 2017 +0200
+++ b/nashorn/.hgtags	Wed Jul 05 23:40:06 2017 +0200
@@ -417,3 +417,5 @@
 fc416270a776409b74006262dd0a9f5f5ff31555 jdk-9+171
 f381e171bec90afee95dc2920793754b58b6f705 jdk-10+10
 c8d6b740f0f7ec834b4157bf0d4523e8bbddb3f0 jdk-9+172
+ae0c4f1560e41e94a843e9933558d0223575869d jdk-10+11
+fa8e4de50e821eed876388c84f7129a6739268be jdk-9+173
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeDataView.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeDataView.java	Wed Jul 05 23:40:06 2017 +0200
@@ -416,7 +416,7 @@
      * @return 32-bit unsigned int value at the byteOffset
      */
     @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 1)
-    public static long getUint32(final Object self, final Object byteOffset, final Object littleEndian) {
+    public static double getUint32(final Object self, final Object byteOffset, final Object littleEndian) {
         try {
             return 0xFFFFFFFFL & getBuffer(self, littleEndian).getInt(JSType.toInt32(byteOffset));
         } catch (final IllegalArgumentException iae) {
@@ -432,7 +432,7 @@
      * @return 32-bit unsigned int value at the byteOffset
      */
     @SpecializedFunction
-    public static long getUint32(final Object self, final int byteOffset) {
+    public static double getUint32(final Object self, final int byteOffset) {
         try {
             return JSType.toUint32(getBuffer(self, false).getInt(JSType.toInt32(byteOffset)));
         } catch (final IllegalArgumentException iae) {
@@ -449,7 +449,7 @@
      * @return 32-bit unsigned int value at the byteOffset
      */
     @SpecializedFunction
-    public static long getUint32(final Object self, final int byteOffset, final boolean littleEndian) {
+    public static double getUint32(final Object self, final int byteOffset, final boolean littleEndian) {
         try {
             return JSType.toUint32(getBuffer(self, littleEndian).getInt(JSType.toInt32(byteOffset)));
         } catch (final IllegalArgumentException iae) {
@@ -837,9 +837,9 @@
      * @return undefined
      */
     @SpecializedFunction
-    public static Object setUint32(final Object self, final int byteOffset, final long value) {
+    public static Object setUint32(final Object self, final int byteOffset, final double value) {
         try {
-            getBuffer(self, false).putInt(byteOffset, (int)value);
+            getBuffer(self, false).putInt(byteOffset, (int) JSType.toUint32(value));
             return UNDEFINED;
         } catch (final IllegalArgumentException iae) {
             throw rangeError(iae, "dataview.offset");
@@ -856,9 +856,9 @@
      * @return undefined
      */
     @SpecializedFunction
-    public static Object setUint32(final Object self, final int byteOffset, final long value, final boolean littleEndian) {
+    public static Object setUint32(final Object self, final int byteOffset, final double value, final boolean littleEndian) {
         try {
-            getBuffer(self, littleEndian).putInt(byteOffset, (int)value);
+            getBuffer(self, littleEndian).putInt(byteOffset, (int) JSType.toUint32(value));
             return UNDEFINED;
         } catch (final IllegalArgumentException iae) {
             throw rangeError(iae, "dataview.offset");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8181191.js	Wed Jul 05 23:40:06 2017 +0200
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * 
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ * 
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ * 
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ * 
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8181191: getUint32 returning Long
+ *
+ * @test
+ * @run
+ */
+
+
+function uint32(x) {
+    var buffer = new ArrayBuffer(16);
+    var dataview = new DataView(buffer);
+    dataview.setUint32(0, x);
+    return dataview.getUint32(0);
+}
+
+Assert.assertTrue(typeof uint32(0x7f) === 'number');
+Assert.assertTrue(typeof uint32(0x80) === 'number');
+Assert.assertTrue(typeof uint32(0xffffffff) === 'number');
+Assert.assertTrue(typeof uint32(0x100000000) === 'number');
+
+Assert.assertTrue(uint32(0x7f) === 0x7f);
+Assert.assertTrue(uint32(0x80) === 0x80);
+Assert.assertTrue(uint32(0xffffffff) === 0xffffffff);
+Assert.assertTrue(uint32(0x100000000) === 0x0);
+
+Assert.assertTrue(uint32(0x7f) === uint32(0x7f));
+Assert.assertTrue(uint32(0x80) === uint32(0x80));
+Assert.assertTrue(uint32(0xffffffff) === uint32(0xffffffff));
+Assert.assertTrue(uint32(0x100000000) === uint32(0x100000000));
--- a/test/lib/jdk/test/lib/Platform.java	Thu Jun 15 13:44:42 2017 +0200
+++ b/test/lib/jdk/test/lib/Platform.java	Wed Jul 05 23:40:06 2017 +0200
@@ -23,6 +23,10 @@
 
 package jdk.test.lib;
 
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.regex.Pattern;
 
 public class Platform {
@@ -228,7 +232,7 @@
     public static boolean canPtraceAttachLinux() throws Exception {
 
         // SELinux deny_ptrace:
-        String deny_ptrace = Utils.fileAsString("/sys/fs/selinux/booleans/deny_ptrace");
+        String deny_ptrace = fileAsString("/sys/fs/selinux/booleans/deny_ptrace");
         if (deny_ptrace != null && deny_ptrace.contains("1")) {
             // ptrace will be denied:
             return false;
@@ -239,7 +243,7 @@
         // 1 - restricted ptrace: a process must be a children of the inferior or user is root
         // 2 - only processes with CAP_SYS_PTRACE may use ptrace or user is root
         // 3 - no attach: no processes may use ptrace with PTRACE_ATTACH
-        String ptrace_scope = Utils.fileAsString("/proc/sys/kernel/yama/ptrace_scope");
+        String ptrace_scope = fileAsString("/proc/sys/kernel/yama/ptrace_scope");
         if (ptrace_scope != null) {
             if (ptrace_scope.startsWith("3")) {
                 return false;
@@ -265,4 +269,10 @@
                       .matcher(osArch)
                       .matches();
     }
+
+    private static String fileAsString(String filename) throws IOException {
+        Path filePath = Paths.get(filename);
+        if (!Files.exists(filePath)) return null;
+        return new String(Files.readAllBytes(filePath));
+    }
 }