--- a/.hgtags Mon Jul 17 09:13:49 2017 -0700
+++ b/.hgtags Thu Jul 20 09:38:13 2017 -0700
@@ -436,3 +436,4 @@
e6d70017f5b9adbb2ec82d826973d0251800a3c3 jdk-10+12
9927a9f16738e240ab7014f0118f41e314ef8f99 jdk-10+13
9ef5029b247b4d940080417a287440bbdbab995b jdk-10+14
+878e216039322cb3f0ecbd0944642a2b4e2593f3 jdk-10+15
--- a/common/autoconf/flags.m4 Mon Jul 17 09:13:49 2017 -0700
+++ b/common/autoconf/flags.m4 Thu Jul 20 09:38:13 2017 -0700
@@ -999,10 +999,15 @@
-fno-omit-frame-pointer"
elif test "x$OPENJDK_$1_OS" = xaix; then
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -DAIX"
- # We may need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows.
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -qtune=balanced \
-qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \
-qlanglvl=noredefmac -qnortti -qnoeh -qignerrno"
+ # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows.
+ # Hotspot now overflows its 64K TOC (currently only for slowdebug),
+ # so for slowdebug we build with '-qpic=large -bbigtoc'.
+ if test "x$DEBUG_LEVEL" = xslowdebug; then
+ $2JVM_CFLAGS="[$]$2JVM_CFLAGS -qpic=large"
+ fi
elif test "x$OPENJDK_$1_OS" = xbsd; then
$2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE"
elif test "x$OPENJDK_$1_OS" = xwindows; then
@@ -1249,6 +1254,12 @@
LDFLAGS_XLC="-b64 -brtl -bnolibpath -bexpall -bernotok"
$2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_XLC"
$2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_XLC"
+ # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows.
+ # Hotspot now overflows its 64K TOC (currently only for slowdebug),
+ # so for slowdebug we build with '-qpic=large -bbigtoc'.
+ if test "x$DEBUG_LEVEL" = xslowdebug; then
+ $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -bbigtoc"
+ fi
fi
# Customize LDFLAGS for executables
--- a/common/autoconf/generated-configure.sh Mon Jul 17 09:13:49 2017 -0700
+++ b/common/autoconf/generated-configure.sh Thu Jul 20 09:38:13 2017 -0700
@@ -5014,7 +5014,7 @@
# Minimum supported versions, empty means unspecified
TOOLCHAIN_MINIMUM_VERSION_clang="3.2"
-TOOLCHAIN_MINIMUM_VERSION_gcc="4.3"
+TOOLCHAIN_MINIMUM_VERSION_gcc="4.7"
TOOLCHAIN_MINIMUM_VERSION_microsoft="16.00.30319.01" # VS2010
TOOLCHAIN_MINIMUM_VERSION_solstudio="5.13"
TOOLCHAIN_MINIMUM_VERSION_xlc=""
@@ -5193,7 +5193,7 @@
#CUSTOM_AUTOCONF_INCLUDE
# Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1500048914
+DATE_WHEN_GENERATED=1500423205
###############################################################################
#
@@ -51468,10 +51468,15 @@
-fno-omit-frame-pointer"
elif test "x$OPENJDK_TARGET_OS" = xaix; then
JVM_CFLAGS="$JVM_CFLAGS -DAIX"
- # We may need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows.
JVM_CFLAGS="$JVM_CFLAGS -qtune=balanced \
-qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \
-qlanglvl=noredefmac -qnortti -qnoeh -qignerrno"
+ # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows.
+ # Hotspot now overflows its 64K TOC (currently only for slowdebug),
+ # so for slowdebug we build with '-qpic=large -bbigtoc'.
+ if test "x$DEBUG_LEVEL" = xslowdebug; then
+ JVM_CFLAGS="$JVM_CFLAGS -qpic=large"
+ fi
elif test "x$OPENJDK_TARGET_OS" = xbsd; then
COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE"
elif test "x$OPENJDK_TARGET_OS" = xwindows; then
@@ -51811,6 +51816,12 @@
LDFLAGS_XLC="-b64 -brtl -bnolibpath -bexpall -bernotok"
LDFLAGS_JDK="${LDFLAGS_JDK} $LDFLAGS_XLC"
JVM_LDFLAGS="$JVM_LDFLAGS $LDFLAGS_XLC"
+ # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows.
+ # Hotspot now overflows its 64K TOC (currently only for slowdebug),
+ # so for slowdebug we build with '-qpic=large -bbigtoc'.
+ if test "x$DEBUG_LEVEL" = xslowdebug; then
+ JVM_LDFLAGS="$JVM_LDFLAGS -bbigtoc"
+ fi
fi
# Customize LDFLAGS for executables
@@ -52321,10 +52332,15 @@
-fno-omit-frame-pointer"
elif test "x$OPENJDK_BUILD_OS" = xaix; then
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -DAIX"
- # We may need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows.
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -qtune=balanced \
-qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \
-qlanglvl=noredefmac -qnortti -qnoeh -qignerrno"
+ # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows.
+ # Hotspot now overflows its 64K TOC (currently only for slowdebug),
+ # so for slowdebug we build with '-qpic=large -bbigtoc'.
+ if test "x$DEBUG_LEVEL" = xslowdebug; then
+ OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -qpic=large"
+ fi
elif test "x$OPENJDK_BUILD_OS" = xbsd; then
OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK="$OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE"
elif test "x$OPENJDK_BUILD_OS" = xwindows; then
@@ -52664,6 +52680,12 @@
LDFLAGS_XLC="-b64 -brtl -bnolibpath -bexpall -bernotok"
OPENJDK_BUILD_LDFLAGS_JDK="${OPENJDK_BUILD_LDFLAGS_JDK} $LDFLAGS_XLC"
OPENJDK_BUILD_JVM_LDFLAGS="$OPENJDK_BUILD_JVM_LDFLAGS $LDFLAGS_XLC"
+ # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows.
+ # Hotspot now overflows its 64K TOC (currently only for slowdebug),
+ # so for slowdebug we build with '-qpic=large -bbigtoc'.
+ if test "x$DEBUG_LEVEL" = xslowdebug; then
+ OPENJDK_BUILD_JVM_LDFLAGS="$OPENJDK_BUILD_JVM_LDFLAGS -bbigtoc"
+ fi
fi
# Customize LDFLAGS for executables
--- a/common/autoconf/toolchain.m4 Mon Jul 17 09:13:49 2017 -0700
+++ b/common/autoconf/toolchain.m4 Thu Jul 20 09:38:13 2017 -0700
@@ -52,7 +52,7 @@
# Minimum supported versions, empty means unspecified
TOOLCHAIN_MINIMUM_VERSION_clang="3.2"
-TOOLCHAIN_MINIMUM_VERSION_gcc="4.3"
+TOOLCHAIN_MINIMUM_VERSION_gcc="4.7"
TOOLCHAIN_MINIMUM_VERSION_microsoft="16.00.30319.01" # VS2010
TOOLCHAIN_MINIMUM_VERSION_solstudio="5.13"
TOOLCHAIN_MINIMUM_VERSION_xlc=""
--- a/common/doc/building.md Mon Jul 17 09:13:49 2017 -0700
+++ b/common/doc/building.md Thu Jul 20 09:38:13 2017 -0700
@@ -392,11 +392,8 @@
### gcc
-The minimum accepted version of gcc is 4.3. Older versions will not be accepted
-by `configure`.
-
-However, gcc 4.3 is quite old and OpenJDK is not regularly tested on this
-version, so it is recommended to use a more modern gcc.
+The minimum accepted version of gcc is 4.7. Older versions will generate a warning
+by `configure` and are unlikely to work.
OpenJDK 9 includes patches that should allow gcc 6 to compile, but this should
be considered experimental.
--- a/corba/.hgtags Mon Jul 17 09:13:49 2017 -0700
+++ b/corba/.hgtags Thu Jul 20 09:38:13 2017 -0700
@@ -435,3 +435,4 @@
25d991a67cba240eeaf15c19c5857b40fdd71561 jdk-10+14
40fb9f229471ef357d493813d34b15afcce9f32b jdk-9+176
c72e9d3823f04cb3ef3166646dfea9e4c2769133 jdk-9+177
+15f59cfc6fbe9387423fb173e962265c7b5d357e jdk-10+15
--- a/hotspot/.hgtags Mon Jul 17 09:13:49 2017 -0700
+++ b/hotspot/.hgtags Thu Jul 20 09:38:13 2017 -0700
@@ -595,3 +595,4 @@
e920b4d008d914f3414bd4630b58837cf0b7f08d jdk-10+14
2ab74e5dbdc2b6a962c865500cafd23cf387dc60 jdk-9+176
1ca8f038fceb88c640badf9bd18905205bc63b43 jdk-9+177
+c1f3649a3a42f124b418a5a916dbad13d059b757 jdk-10+15
--- a/jaxp/.hgtags Mon Jul 17 09:13:49 2017 -0700
+++ b/jaxp/.hgtags Thu Jul 20 09:38:13 2017 -0700
@@ -435,3 +435,4 @@
4d05f673cf773f1c20e8f5a879d64115d2f741d9 jdk-10+14
38cf34e2328070cc691c4f136e6dde1a44c04171 jdk-9+176
332ad9f92632f56f337b8c40edef9a95a42b26bc jdk-9+177
+02a876781a3a6193140591d92db7b95ca743eac2 jdk-10+15
--- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLEventFactory.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLEventFactory.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -125,10 +125,6 @@
* <p>
* Once an application has obtained a reference to a XMLEventFactory it
* can use the factory to configure and obtain stream instances.
- * <p>
- * Note that this is a new method that replaces the deprecated newInstance() method.
- * No changes in behavior are defined by this replacement method relative to
- * the deprecated method.
*
* @throws FactoryConfigurationError in case of {@linkplain
* java.util.ServiceConfigurationError service configuration error} or if
--- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLInputFactory.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLInputFactory.java Thu Jul 20 09:38:13 2017 -0700
@@ -209,16 +209,11 @@
* <p>
* Once an application has obtained a reference to a XMLInputFactory it
* can use the factory to configure and obtain stream instances.
- * <p>
- * Note that this is a new method that replaces the deprecated newInstance() method.
- * No changes in behavior are defined by this replacement method relative to
- * the deprecated method.
*
* @throws FactoryConfigurationError in case of {@linkplain
* java.util.ServiceConfigurationError service configuration error} or if
* the implementation is not available or cannot be instantiated.
*/
- @Deprecated(since="1.7")
public static XMLInputFactory newFactory()
throws FactoryConfigurationError
{
--- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLOutputFactory.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLOutputFactory.java Thu Jul 20 09:38:13 2017 -0700
@@ -189,10 +189,6 @@
* <p>
* Once an application has obtained a reference to a XMLOutputFactory it
* can use the factory to configure and obtain stream instances.
- * <p>
- * Note that this is a new method that replaces the deprecated newInstance() method.
- * No changes in behavior are defined by this replacement method relative to the
- * deprecated method.
*
* @throws FactoryConfigurationError in case of {@linkplain
* java.util.ServiceConfigurationError service configuration error} or if
--- a/jaxp/src/java.xml/share/classes/javax/xml/validation/Validator.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jaxp/src/java.xml/share/classes/javax/xml/validation/Validator.java Thu Jul 20 09:38:13 2017 -0700
@@ -135,7 +135,7 @@
* <caption>{@code Source} / {@code Result} Accepted</caption>
* <thead>
* <tr>
- * <td></td>>
+ * <td></td>
* <th scope="col">{@link javax.xml.transform.stream.StreamSource}</th>
* <th scope="col">{@link javax.xml.transform.sax.SAXSource}</th>
* <th scope="col">{@link javax.xml.transform.dom.DOMSource}</th>
--- a/jaxws/.hgtags Mon Jul 17 09:13:49 2017 -0700
+++ b/jaxws/.hgtags Thu Jul 20 09:38:13 2017 -0700
@@ -438,3 +438,4 @@
bddeaa49ffd55567ad232548c38aa270e1a1420a jdk-10+14
ea819b6009d33a72e6672bab6c101d51db0cfb4c jdk-9+176
b44a721aee3d3b2537754e559fe9ecccadea548b jdk-9+177
+6d17fd0a5133a0dd916c77a9a24ae7f0ca402876 jdk-10+15
--- a/jdk/.hgtags Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/.hgtags Thu Jul 20 09:38:13 2017 -0700
@@ -435,3 +435,4 @@
7a2bc0a80087b63c909df2af6ec7d9ef44e6d7f7 jdk-10+14
9f27d513658d5375b0e26846857d92563f279073 jdk-9+176
80acf577b7d0b886fb555c9916552844f6cc72af jdk-9+177
+e069834e2c518a7bc2ffadc8c7e3cd7ec69fa8a0 jdk-10+15
--- a/jdk/make/mapfiles/libsunec/mapfile-vers Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/make/mapfiles/libsunec/mapfile-vers Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
SUNWprivate_1.1 {
global:
+ Java_sun_security_ec_ECKeyPairGenerator_isCurveSupported;
Java_sun_security_ec_ECKeyPairGenerator_generateECKeyPair;
Java_sun_security_ec_ECDSASignature_signDigest;
Java_sun_security_ec_ECDSASignature_verifySignedDigest;
--- a/jdk/src/java.base/share/classes/java/io/ObjectStreamField.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/io/ObjectStreamField.java Thu Jul 20 09:38:13 2017 -0700
@@ -45,16 +45,18 @@
/** field name */
private final String name;
- /** canonical JVM signature of field type */
+ /** canonical JVM signature of field type, if given */
private final String signature;
/** field type (Object.class if unknown non-primitive type) */
private final Class<?> type;
+ /** lazily constructed signature for the type, if no explicit signature */
+ private String typeSignature;
/** whether or not to (de)serialize field values as unshared */
private final boolean unshared;
/** corresponding reflective field object, if any */
private final Field field;
/** offset of field value in enclosing field group */
- private int offset = 0;
+ private int offset;
/**
* Create a Serializable field with the specified type. This field should
@@ -91,8 +93,8 @@
this.name = name;
this.type = type;
this.unshared = unshared;
- signature = getClassSignature(type).intern();
- field = null;
+ this.field = null;
+ this.signature = null;
}
/**
@@ -106,7 +108,7 @@
this.name = name;
this.signature = signature.intern();
this.unshared = unshared;
- field = null;
+ this.field = null;
switch (signature.charAt(0)) {
case 'Z': type = Boolean.TYPE; break;
@@ -242,7 +244,7 @@
*/
// REMIND: deprecate?
public char getTypeCode() {
- return signature.charAt(0);
+ return getSignature().charAt(0);
}
/**
@@ -252,7 +254,7 @@
*/
// REMIND: deprecate?
public String getTypeString() {
- return isPrimitive() ? null : signature;
+ return isPrimitive() ? null : getSignature();
}
/**
@@ -284,7 +286,7 @@
*/
// REMIND: deprecate?
public boolean isPrimitive() {
- char tcode = signature.charAt(0);
+ char tcode = getTypeCode();
return ((tcode != 'L') && (tcode != '['));
}
@@ -320,7 +322,7 @@
* Return a string that describes this field.
*/
public String toString() {
- return signature + ' ' + name;
+ return getSignature() + ' ' + name;
}
/**
@@ -336,6 +338,17 @@
* that signature strings are returned for primitive fields as well).
*/
String getSignature() {
- return signature;
+ if (signature != null) {
+ return signature;
+ }
+
+ String sig = typeSignature;
+ // This lazy calculation is safe since signature can be null iff one
+ // of the public constructors are used, in which case type is always
+ // initialized to the exact type we want the signature to represent.
+ if (sig == null) {
+ typeSignature = sig = getClassSignature(type).intern();
+ }
+ return sig;
}
}
--- a/jdk/src/java.base/share/classes/java/io/RandomAccessFile.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/io/RandomAccessFile.java Thu Jul 20 09:38:13 2017 -0700
@@ -139,21 +139,21 @@
* <table class="striped">
* <caption style="display:none">Access mode permitted values and meanings</caption>
* <thead>
- * <tr><th style="text-align:left">Value</th><th style="text-align:left">Meaning</th></tr>
+ * <tr><th scope="col" style="text-align:left">Value</th><th scope="col" style="text-align:left">Meaning</th></tr>
* </thead>
* <tbody>
- * <tr><td style="vertical-align:top">{@code "r"}</td>
+ * <tr><th scope="row" style="vertical-align:top">{@code "r"}</th>
* <td> Open for reading only. Invoking any of the {@code write}
* methods of the resulting object will cause an
* {@link java.io.IOException} to be thrown.</td></tr>
- * <tr><td style="vertical-align:top">{@code "rw"}</td>
+ * <tr><th scope="row" style="vertical-align:top">{@code "rw"}</th>
* <td> Open for reading and writing. If the file does not already
* exist then an attempt will be made to create it.</td></tr>
- * <tr><td style="vertical-align:top">{@code "rws"}</td>
+ * <tr><th scope="row" style="vertical-align:top">{@code "rws"}</th>
* <td> Open for reading and writing, as with {@code "rw"}, and also
* require that every update to the file's content or metadata be
* written synchronously to the underlying storage device.</td></tr>
- * <tr><td style="vertical-align:top">{@code "rwd"}</td>
+ * <tr><th scope="row" style="vertical-align:top">{@code "rwd"}</th>
* <td> Open for reading and writing, as with {@code "rw"}, and also
* require that every update to the file's content be written
* synchronously to the underlying storage device.</td></tr>
--- a/jdk/src/java.base/share/classes/java/io/SerializablePermission.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/io/SerializablePermission.java Thu Jul 20 09:38:13 2017 -0700
@@ -48,15 +48,15 @@
* <caption style="display:none">Permission target name, what the permission allows, and associated risks</caption>
* <thead>
* <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
+ * <th scope="col">Permission Target Name</th>
+ * <th scope="col">What the Permission Allows</th>
+ * <th scope="col">Risks of Allowing this Permission</th>
* </tr>
* </thead>
* <tbody>
*
* <tr>
- * <td>enableSubclassImplementation</td>
+ * <th scope="row">enableSubclassImplementation</th>
* <td>Subclass implementation of ObjectOutputStream or ObjectInputStream
* to override the default serialization or deserialization, respectively,
* of objects</td>
@@ -69,7 +69,7 @@
* </tr>
*
* <tr>
- * <td>enableSubstitution</td>
+ * <th scope="row">enableSubstitution</th>
* <td>Substitution of one object for another during
* serialization or deserialization</td>
* <td>This is dangerous because malicious code
@@ -78,7 +78,7 @@
* </tr>
*
* <tr>
- * <td>serialFilter</td>
+ * <th scope="row">serialFilter</th>
* <td>Setting a filter for ObjectInputStreams.</td>
* <td>Code could remove a configured filter and remove protections
* already established.</td>
--- a/jdk/src/java.base/share/classes/java/lang/RuntimePermission.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/RuntimePermission.java Thu Jul 20 09:38:13 2017 -0700
@@ -48,15 +48,15 @@
* what the target allows, and associated risks</caption>
* <thead>
* <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
+ * <th scope="col">Permission Target Name</th>
+ * <th scope="col">What the Permission Allows</th>
+ * <th scope="col">Risks of Allowing this Permission</th>
* </tr>
* </thead>
* <tbody>
*
* <tr>
- * <td>createClassLoader</td>
+ * <th scope="row">createClassLoader</th>
* <td>Creation of a class loader</td>
* <td>This is an extremely dangerous permission to grant.
* Malicious applications that can instantiate their own class
@@ -67,7 +67,7 @@
* </tr>
*
* <tr>
- * <td>getClassLoader</td>
+ * <th scope="row">getClassLoader</th>
* <td>Retrieval of a class loader (e.g., the class loader for the calling
* class)</td>
* <td>This would grant an attacker permission to get the
@@ -78,7 +78,7 @@
* </tr>
*
* <tr>
- * <td>setContextClassLoader</td>
+ * <th scope="row">setContextClassLoader</th>
* <td>Setting of the context class loader used by a thread</td>
* <td>The context class loader is used by system code and extensions
* when they need to lookup resources that might not exist in the system
@@ -88,7 +88,7 @@
* </tr>
*
* <tr>
- * <td>enableContextClassLoaderOverride</td>
+ * <th scope="row">enableContextClassLoaderOverride</th>
* <td>Subclass implementation of the thread context class loader methods</td>
* <td>The context class loader is used by system code and extensions
* when they need to lookup resources that might not exist in the system
@@ -98,14 +98,14 @@
* </tr>
*
* <tr>
- * <td>closeClassLoader</td>
+ * <th scope="row">closeClassLoader</th>
* <td>Closing of a ClassLoader</td>
* <td>Granting this permission allows code to close any URLClassLoader
* that it has a reference to.</td>
* </tr>
*
* <tr>
- * <td>setSecurityManager</td>
+ * <th scope="row">setSecurityManager</th>
* <td>Setting of the security manager (possibly replacing an existing one)
* </td>
* <td>The security manager is a class that allows
@@ -117,14 +117,14 @@
* </tr>
*
* <tr>
- * <td>createSecurityManager</td>
+ * <th scope="row">createSecurityManager</th>
* <td>Creation of a new security manager</td>
* <td>This gives code access to protected, sensitive methods that may
* disclose information about other classes or the execution stack.</td>
* </tr>
*
* <tr>
- * <td>getenv.{variable name}</td>
+ * <th scope="row">getenv.{variable name}</th>
* <td>Reading of the value of the specified environment variable</td>
* <td>This would allow code to read the value, or determine the
* existence, of a particular environment variable. This is
@@ -132,7 +132,7 @@
* </tr>
*
* <tr>
- * <td>exitVM.{exit status}</td>
+ * <th scope="row">exitVM.{exit status}</th>
* <td>Halting of the Java Virtual Machine with the specified exit status</td>
* <td>This allows an attacker to mount a denial-of-service attack
* by automatically forcing the virtual machine to halt.
@@ -143,14 +143,14 @@
* </tr>
*
* <tr>
- * <td>shutdownHooks</td>
+ * <th scope="row">shutdownHooks</th>
* <td>Registration and cancellation of virtual-machine shutdown hooks</td>
* <td>This allows an attacker to register a malicious shutdown
* hook that interferes with the clean shutdown of the virtual machine.</td>
* </tr>
*
* <tr>
- * <td>setFactory</td>
+ * <th scope="row">setFactory</th>
* <td>Setting of the socket factory used by ServerSocket or Socket,
* or of the stream handler factory used by URL</td>
* <td>This allows code to set the actual implementation
@@ -160,7 +160,7 @@
* </tr>
*
* <tr>
- * <td>setIO</td>
+ * <th scope="row">setIO</th>
* <td>Setting of System.out, System.in, and System.err</td>
* <td>This allows changing the value of the standard system streams.
* An attacker may change System.in to monitor and
@@ -169,7 +169,7 @@
* </tr>
*
* <tr>
- * <td>modifyThread</td>
+ * <th scope="row">modifyThread</th>
* <td>Modification of threads, e.g., via calls to Thread
* {@code interrupt, stop, suspend, resume, setDaemon, setPriority,
* setName} and {@code setUncaughtExceptionHandler}
@@ -179,7 +179,7 @@
* </tr>
*
* <tr>
- * <td>stopThread</td>
+ * <th scope="row">stopThread</th>
* <td>Stopping of threads via calls to the Thread <code>stop</code>
* method</td>
* <td>This allows code to stop any thread in the system provided that it is
@@ -189,7 +189,7 @@
* </tr>
*
* <tr>
- * <td>modifyThreadGroup</td>
+ * <th scope="row">modifyThreadGroup</th>
* <td>modification of thread groups, e.g., via calls to ThreadGroup
* <code>destroy</code>, <code>getParent</code>, <code>resume</code>,
* <code>setDaemon</code>, <code>setMaxPriority</code>, <code>stop</code>,
@@ -199,7 +199,7 @@
* </tr>
*
* <tr>
- * <td>getProtectionDomain</td>
+ * <th scope="row">getProtectionDomain</th>
* <td>Retrieval of the ProtectionDomain for a class</td>
* <td>This allows code to obtain policy information
* for a particular code source. While obtaining policy information
@@ -209,7 +209,7 @@
* </tr>
*
* <tr>
- * <td>getFileSystemAttributes</td>
+ * <th scope="row">getFileSystemAttributes</th>
* <td>Retrieval of file system attributes</td>
* <td>This allows code to obtain file system information such as disk usage
* or disk space available to the caller. This is potentially dangerous
@@ -219,7 +219,7 @@
* </tr>
*
* <tr>
- * <td>readFileDescriptor</td>
+ * <th scope="row">readFileDescriptor</th>
* <td>Reading of file descriptors</td>
* <td>This would allow code to read the particular file associated
* with the file descriptor read. This is dangerous if the file
@@ -227,7 +227,7 @@
* </tr>
*
* <tr>
- * <td>writeFileDescriptor</td>
+ * <th scope="row">writeFileDescriptor</th>
* <td>Writing to file descriptors</td>
* <td>This allows code to write to a particular file associated
* with the descriptor. This is dangerous because it may allow
@@ -236,7 +236,7 @@
* </tr>
*
* <tr>
- * <td>loadLibrary.{library name}</td>
+ * <th scope="row">loadLibrary.{library name}</th>
* <td>Dynamic linking of the specified library</td>
* <td>It is dangerous to allow an applet permission to load native code
* libraries, because the Java security architecture is not designed to and
@@ -244,7 +244,7 @@
* </tr>
*
* <tr>
- * <td>accessClassInPackage.{package name}</td>
+ * <th scope="row">accessClassInPackage.{package name}</th>
* <td>Access to the specified package via a class loader's
* <code>loadClass</code> method when that class loader calls
* the SecurityManager <code>checkPackageAccess</code> method</td>
@@ -255,7 +255,7 @@
* </tr>
*
* <tr>
- * <td>defineClassInPackage.{package name}</td>
+ * <th scope="row">defineClassInPackage.{package name}</th>
* <td>Definition of classes in the specified package, via a class
* loader's <code>defineClass</code> method when that class loader calls
* the SecurityManager <code>checkPackageDefinition</code> method.</td>
@@ -267,7 +267,7 @@
* </tr>
*
* <tr>
- * <td>defineClass</td>
+ * <th scope="row">defineClass</th>
* <td>Define a class with
* {@link java.lang.invoke.MethodHandles.Lookup#defineClass(byte[])
* Lookup.defineClass}.</td>
@@ -277,7 +277,7 @@
* </tr>
*
* <tr>
- * <td>accessDeclaredMembers</td>
+ * <th scope="row">accessDeclaredMembers</th>
* <td>Access to the declared members of a class</td>
* <td>This grants code permission to query a class for its public,
* protected, default (package) access, and private fields and/or
@@ -295,14 +295,14 @@
</td>
* </tr>
* <tr>
- * <td>queuePrintJob</td>
+ * <th scope="row">queuePrintJob</th>
* <td>Initiation of a print job request</td>
* <td>This could print sensitive information to a printer,
* or simply waste paper.</td>
* </tr>
*
* <tr>
- * <td>getStackTrace</td>
+ * <th scope="row">getStackTrace</th>
* <td>Retrieval of the stack trace information of another thread.</td>
* <td>This allows retrieval of the stack trace information of
* another thread. This might allow malicious code to monitor the
@@ -310,7 +310,7 @@
* </tr>
*
* <tr>
- * <td>getStackWalkerWithClassReference</td>
+ * <th scope="row">getStackWalkerWithClassReference</th>
* <td>Get a stack walker that can retrieve stack frames with class reference.</td>
* <td>This allows retrieval of Class objects from stack walking.
* This might allow malicious code to access Class objects on the stack
@@ -318,7 +318,7 @@
* </tr>
*
* <tr>
- * <td>setDefaultUncaughtExceptionHandler</td>
+ * <th scope="row">setDefaultUncaughtExceptionHandler</th>
* <td>Setting the default handler to be used when a thread
* terminates abruptly due to an uncaught exception</td>
* <td>This allows an attacker to register a malicious
@@ -327,7 +327,7 @@
* </tr>
*
* <tr>
- * <td>preferences</td>
+ * <th scope="row">preferences</th>
* <td>Represents the permission required to get access to the
* java.util.prefs.Preferences implementations user or system root
* which in turn allows retrieval or update operations within the
@@ -340,14 +340,14 @@
* </tr>
*
* <tr>
- * <td>manageProcess</td>
+ * <th scope="row">manageProcess</th>
* <td>Native process termination and information about processes
* {@link ProcessHandle}.</td>
* <td>Allows code to identify and terminate processes that it did not create.</td>
* </tr>
*
* <tr>
- * <td>localeServiceProvider</td>
+ * <th scope="row">localeServiceProvider</th>
* <td>This {@code RuntimePermission} is required to be granted to
* classes which subclass and implement
* {@code java.util.spi.LocaleServiceProvider}. The permission is
@@ -360,7 +360,7 @@
* </tr>
*
* <tr>
- * <td>loggerFinder</td>
+ * <th scope="row">loggerFinder</th>
* <td>This {@code RuntimePermission} is required to be granted to
* classes which subclass or call methods on
* {@code java.lang.System.LoggerFinder}. The permission is
@@ -373,7 +373,7 @@
* </tr>
*
* <tr>
- * <td>accessSystemModules</td>
+ * <th scope="row">accessSystemModules</th>
* <td>Access system modules in the runtime image.</td>
* <td>This grants the permission to access resources in the
* {@linkplain ModuleFinder#ofSystem system modules} in the runtime image.</td>
--- a/jdk/src/java.base/share/classes/java/lang/System.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/System.java Thu Jul 20 09:38:13 2017 -0700
@@ -582,67 +582,67 @@
* <table class="striped">
* <caption style="display:none">Shows property keys and associated values</caption>
* <thead>
- * <tr><th>Key</th>
- * <th>Description of Associated Value</th></tr>
+ * <tr><th scope="col">Key</th>
+ * <th scope="col">Description of Associated Value</th></tr>
* </thead>
* <tbody>
- * <tr><td><code>java.version</code></td>
+ * <tr><th scope="row"><code>java.version</code></th>
* <td>Java Runtime Environment version which may be interpreted
* as a {@link Runtime.Version}</td></tr>
- * <tr><td><code>java.vendor</code></td>
+ * <tr><th scope="row"><code>java.vendor</code></th>
* <td>Java Runtime Environment vendor</td></tr>
- * <tr><td><code>java.vendor.url</code></td>
+ * <tr><th scope="row"><code>java.vendor.url</code></th>
* <td>Java vendor URL</td></tr>
- * <tr><td><code>java.home</code></td>
+ * <tr><th scope="row"><code>java.home</code></th>
* <td>Java installation directory</td></tr>
- * <tr><td><code>java.vm.specification.version</code></td>
+ * <tr><th scope="row"><code>java.vm.specification.version</code></th>
* <td>Java Virtual Machine specification version which may be
* interpreted as a {@link Runtime.Version}</td></tr>
- * <tr><td><code>java.vm.specification.vendor</code></td>
+ * <tr><th scope="row"><code>java.vm.specification.vendor</code></th>
* <td>Java Virtual Machine specification vendor</td></tr>
- * <tr><td><code>java.vm.specification.name</code></td>
+ * <tr><th scope="row"><code>java.vm.specification.name</code></th>
* <td>Java Virtual Machine specification name</td></tr>
- * <tr><td><code>java.vm.version</code></td>
+ * <tr><th scope="row"><code>java.vm.version</code></th>
* <td>Java Virtual Machine implementation version which may be
* interpreted as a {@link Runtime.Version}</td></tr>
- * <tr><td><code>java.vm.vendor</code></td>
+ * <tr><th scope="row"><code>java.vm.vendor</code></th>
* <td>Java Virtual Machine implementation vendor</td></tr>
- * <tr><td><code>java.vm.name</code></td>
+ * <tr><th scope="row"><code>java.vm.name</code></th>
* <td>Java Virtual Machine implementation name</td></tr>
- * <tr><td><code>java.specification.version</code></td>
+ * <tr><th scope="row"><code>java.specification.version</code></th>
* <td>Java Runtime Environment specification version which may be
* interpreted as a {@link Runtime.Version}</td></tr>
- * <tr><td><code>java.specification.vendor</code></td>
+ * <tr><th scope="row"><code>java.specification.vendor</code></th>
* <td>Java Runtime Environment specification vendor</td></tr>
- * <tr><td><code>java.specification.name</code></td>
+ * <tr><th scope="row"><code>java.specification.name</code></th>
* <td>Java Runtime Environment specification name</td></tr>
- * <tr><td><code>java.class.version</code></td>
+ * <tr><th scope="row"><code>java.class.version</code></th>
* <td>Java class format version number</td></tr>
- * <tr><td><code>java.class.path</code></td>
+ * <tr><th scope="row"><code>java.class.path</code></th>
* <td>Java class path</td></tr>
- * <tr><td><code>java.library.path</code></td>
+ * <tr><th scope="row"><code>java.library.path</code></th>
* <td>List of paths to search when loading libraries</td></tr>
- * <tr><td><code>java.io.tmpdir</code></td>
+ * <tr><th scope="row"><code>java.io.tmpdir</code></th>
* <td>Default temp file path</td></tr>
- * <tr><td><code>java.compiler</code></td>
+ * <tr><th scope="row"><code>java.compiler</code></th>
* <td>Name of JIT compiler to use</td></tr>
- * <tr><td><code>os.name</code></td>
+ * <tr><th scope="row"><code>os.name</code></th>
* <td>Operating system name</td></tr>
- * <tr><td><code>os.arch</code></td>
+ * <tr><th scope="row"><code>os.arch</code></th>
* <td>Operating system architecture</td></tr>
- * <tr><td><code>os.version</code></td>
+ * <tr><th scope="row"><code>os.version</code></th>
* <td>Operating system version</td></tr>
- * <tr><td><code>file.separator</code></td>
+ * <tr><th scope="row"><code>file.separator</code></th>
* <td>File separator ("/" on UNIX)</td></tr>
- * <tr><td><code>path.separator</code></td>
+ * <tr><th scope="row"><code>path.separator</code></th>
* <td>Path separator (":" on UNIX)</td></tr>
- * <tr><td><code>line.separator</code></td>
+ * <tr><th scope="row"><code>line.separator</code></th>
* <td>Line separator ("\n" on UNIX)</td></tr>
- * <tr><td><code>user.name</code></td>
+ * <tr><th scope="row"><code>user.name</code></th>
* <td>User's account name</td></tr>
- * <tr><td><code>user.home</code></td>
+ * <tr><th scope="row"><code>user.home</code></th>
* <td>User's home directory</td></tr>
- * <tr><td><code>user.dir</code></td>
+ * <tr><th scope="row"><code>user.dir</code></th>
* <td>User's current working directory</td></tr>
* </tbody>
* </table>
@@ -659,17 +659,17 @@
* <table class="striped">
* <caption style="display:none">Shows property keys and associated values</caption>
* <thead>
- * <tr><th>Key</th>
- * <th>Description of Associated Value</th></tr>
+ * <tr><th scope="col">Key</th>
+ * <th scope="col">Description of Associated Value</th></tr>
* </thead>
* <tbody>
- * <tr><td>{@code jdk.module.path}</td>
+ * <tr><th scope="row">{@code jdk.module.path}</th>
* <td>The application module path</td></tr>
- * <tr><td>{@code jdk.module.upgrade.path}</td>
+ * <tr><th scope="row">{@code jdk.module.upgrade.path}</th>
* <td>The upgrade module path</td></tr>
- * <tr><td>{@code jdk.module.main}</td>
+ * <tr><th scope="row">{@code jdk.module.main}</th>
* <td>The module name of the initial/main module</td></tr>
- * <tr><td>{@code jdk.module.main.class}</td>
+ * <tr><th scope="row">{@code jdk.module.main.class}</th>
* <td>The main class name of the initial module</td></tr>
* </tbody>
* </table>
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleInfo.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleInfo.java Thu Jul 20 09:38:13 2017 -0700
@@ -84,43 +84,43 @@
* <table class="striped">
* <caption style="display:none">reference kinds</caption>
* <thead>
- * <tr><th>reference kind</th><th>descriptive name</th><th>scope</th><th>member</th><th>behavior</th></tr>
+ * <tr><th scope="col">reference kind</th><th scope="col">descriptive name</th><th scope="col">scope</th><th scope="col">member</th><th scope="col">behavior</th></tr>
* </thead>
* <tbody>
* <tr>
- * <td>{@code 1}</td><td>{@code REF_getField}</td><td>{@code class}</td>
+ * <th scope="row">{@code 1}</th><td>{@code REF_getField}</td><td>{@code class}</td>
* <td>{@code FT f;}</td><td>{@code (T) this.f;}</td>
* </tr>
* <tr>
- * <td>{@code 2}</td><td>{@code REF_getStatic}</td><td>{@code class} or {@code interface}</td>
+ * <th scope="row">{@code 2}</th><td>{@code REF_getStatic}</td><td>{@code class} or {@code interface}</td>
* <td>{@code static}<br>{@code FT f;}</td><td>{@code (T) C.f;}</td>
* </tr>
* <tr>
- * <td>{@code 3}</td><td>{@code REF_putField}</td><td>{@code class}</td>
+ * <th scope="row">{@code 3}</th><td>{@code REF_putField}</td><td>{@code class}</td>
* <td>{@code FT f;}</td><td>{@code this.f = x;}</td>
* </tr>
* <tr>
- * <td>{@code 4}</td><td>{@code REF_putStatic}</td><td>{@code class}</td>
+ * <th scope="row">{@code 4}</th><td>{@code REF_putStatic}</td><td>{@code class}</td>
* <td>{@code static}<br>{@code FT f;}</td><td>{@code C.f = arg;}</td>
* </tr>
* <tr>
- * <td>{@code 5}</td><td>{@code REF_invokeVirtual}</td><td>{@code class}</td>
+ * <th scope="row">{@code 5}</th><td>{@code REF_invokeVirtual}</td><td>{@code class}</td>
* <td>{@code T m(A*);}</td><td>{@code (T) this.m(arg*);}</td>
* </tr>
* <tr>
- * <td>{@code 6}</td><td>{@code REF_invokeStatic}</td><td>{@code class} or {@code interface}</td>
+ * <th scope="row">{@code 6}</th><td>{@code REF_invokeStatic}</td><td>{@code class} or {@code interface}</td>
* <td>{@code static}<br>{@code T m(A*);}</td><td>{@code (T) C.m(arg*);}</td>
* </tr>
* <tr>
- * <td>{@code 7}</td><td>{@code REF_invokeSpecial}</td><td>{@code class} or {@code interface}</td>
+ * <th scope="row">{@code 7}</th><td>{@code REF_invokeSpecial}</td><td>{@code class} or {@code interface}</td>
* <td>{@code T m(A*);}</td><td>{@code (T) super.m(arg*);}</td>
* </tr>
* <tr>
- * <td>{@code 8}</td><td>{@code REF_newInvokeSpecial}</td><td>{@code class}</td>
+ * <th scope="row">{@code 8}</th><td>{@code REF_newInvokeSpecial}</td><td>{@code class}</td>
* <td>{@code C(A*);}</td><td>{@code new C(arg*);}</td>
* </tr>
* <tr>
- * <td>{@code 9}</td><td>{@code REF_invokeInterface}</td><td>{@code interface}</td>
+ * <th scope="row">{@code 9}</th><td>{@code REF_invokeInterface}</td><td>{@code interface}</td>
* <td>{@code T m(A*);}</td><td>{@code (T) this.m(arg*);}</td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Thu Jul 20 09:38:13 2017 -0700
@@ -282,66 +282,66 @@
* <caption style="display:none">lookup method behaviors</caption>
* <thead>
* <tr>
- * <th><a id="equiv"></a>lookup expression</th>
- * <th>member</th>
- * <th>bytecode behavior</th>
+ * <th scope="col"><a id="equiv"></a>lookup expression</th>
+ * <th scope="col">member</th>
+ * <th scope="col">bytecode behavior</th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#findGetter lookup.findGetter(C.class,"f",FT.class)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#findGetter lookup.findGetter(C.class,"f",FT.class)}</th>
* <td>{@code FT f;}</td><td>{@code (T) this.f;}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#findStaticGetter lookup.findStaticGetter(C.class,"f",FT.class)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#findStaticGetter lookup.findStaticGetter(C.class,"f",FT.class)}</th>
* <td>{@code static}<br>{@code FT f;}</td><td>{@code (T) C.f;}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#findSetter lookup.findSetter(C.class,"f",FT.class)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#findSetter lookup.findSetter(C.class,"f",FT.class)}</th>
* <td>{@code FT f;}</td><td>{@code this.f = x;}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#findStaticSetter lookup.findStaticSetter(C.class,"f",FT.class)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#findStaticSetter lookup.findStaticSetter(C.class,"f",FT.class)}</th>
* <td>{@code static}<br>{@code FT f;}</td><td>{@code C.f = arg;}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#findVirtual lookup.findVirtual(C.class,"m",MT)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#findVirtual lookup.findVirtual(C.class,"m",MT)}</th>
* <td>{@code T m(A*);}</td><td>{@code (T) this.m(arg*);}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#findStatic lookup.findStatic(C.class,"m",MT)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#findStatic lookup.findStatic(C.class,"m",MT)}</th>
* <td>{@code static}<br>{@code T m(A*);}</td><td>{@code (T) C.m(arg*);}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#findSpecial lookup.findSpecial(C.class,"m",MT,this.class)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#findSpecial lookup.findSpecial(C.class,"m",MT,this.class)}</th>
* <td>{@code T m(A*);}</td><td>{@code (T) super.m(arg*);}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#findConstructor lookup.findConstructor(C.class,MT)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#findConstructor lookup.findConstructor(C.class,MT)}</th>
* <td>{@code C(A*);}</td><td>{@code new C(arg*);}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#unreflectGetter lookup.unreflectGetter(aField)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#unreflectGetter lookup.unreflectGetter(aField)}</th>
* <td>({@code static})?<br>{@code FT f;}</td><td>{@code (FT) aField.get(thisOrNull);}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#unreflectSetter lookup.unreflectSetter(aField)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#unreflectSetter lookup.unreflectSetter(aField)}</th>
* <td>({@code static})?<br>{@code FT f;}</td><td>{@code aField.set(thisOrNull, arg);}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)}</th>
* <td>({@code static})?<br>{@code T m(A*);}</td><td>{@code (T) aMethod.invoke(thisOrNull, arg*);}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#unreflectConstructor lookup.unreflectConstructor(aConstructor)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#unreflectConstructor lookup.unreflectConstructor(aConstructor)}</th>
* <td>{@code C(A*);}</td><td>{@code (C) aConstructor.newInstance(arg*);}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)}</th>
* <td>({@code static})?<br>{@code T m(A*);}</td><td>{@code (T) aMethod.invoke(thisOrNull, arg*);}</td>
* </tr>
* <tr>
- * <td>{@link java.lang.invoke.MethodHandles.Lookup#findClass lookup.findClass("C")}</td>
+ * <th scope="row">{@link java.lang.invoke.MethodHandles.Lookup#findClass lookup.findClass("C")}</th>
* <td>{@code class C { ... }}</td><td>{@code C.class;}</td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/lang/reflect/ReflectPermission.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/ReflectPermission.java Thu Jul 20 09:38:13 2017 -0700
@@ -36,15 +36,15 @@
* <caption style="display:none">Table shows permission target name, what the permission allows, and associated risks</caption>
* <thead>
* <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
+ * <th scope="col">Permission Target Name</th>
+ * <th scope="col">What the Permission Allows</th>
+ * <th scope="col">Risks of Allowing this Permission</th>
* </tr>
* </thead>
* <tbody>
*
* <tr>
- * <td>suppressAccessChecks</td>
+ * <th scope="row">suppressAccessChecks</th>
* <td>ability to suppress the standard Java language access checks
* on fields and methods in a class; allow access not only public members
* but also allow access to default (package) access, protected,
@@ -53,7 +53,7 @@
* methods normally unavailable would be accessible to malicious code.</td>
* </tr>
* <tr>
- * <td>newProxyInPackage.{package name}</td>
+ * <th scope="row">newProxyInPackage.{package name}</th>
* <td>ability to create a proxy instance in the specified package of which
* the non-public interface that the proxy class implements.</td>
* <td>This gives code access to classes in packages to which it normally
--- a/jdk/src/java.base/share/classes/java/net/NetPermission.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/net/NetPermission.java Thu Jul 20 09:38:13 2017 -0700
@@ -51,14 +51,14 @@
* <caption style="display:none">Permission target name, what the permission allows, and associated risks</caption>
* <thead>
* <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
+ * <th scope="col">Permission Target Name</th>
+ * <th scope="col">What the Permission Allows</th>
+ * <th scope="col">Risks of Allowing this Permission</th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td>allowHttpTrace</td>
+ * <th scope="row">allowHttpTrace</th>
* <td>The ability to use the HTTP TRACE method in HttpURLConnection.</td>
* <td>Malicious code using HTTP TRACE could get access to security sensitive
* information in the HTTP headers (such as cookies) that it might not
@@ -66,7 +66,7 @@
* </tr>
*
* <tr>
- * <td>getCookieHandler</td>
+ * <th scope="row">getCookieHandler</th>
* <td>The ability to get the cookie handler that processes highly
* security sensitive cookie information for an Http session.</td>
* <td>Malicious code can get a cookie handler to obtain access to
@@ -76,14 +76,14 @@
* </tr>
*
* <tr>
- * <td>getNetworkInformation</td>
+ * <th scope="row">getNetworkInformation</th>
* <td>The ability to retrieve all information about local network interfaces.</td>
* <td>Malicious code can read information about network hardware such as
* MAC addresses, which could be used to construct local IPv6 addresses.</td>
* </tr>
*
* <tr>
- * <td>getProxySelector</td>
+ * <th scope="row">getProxySelector</th>
* <td>The ability to get the proxy selector used to make decisions
* on which proxies to use when making network connections.</td>
* <td>Malicious code can get a ProxySelector to discover proxy
@@ -92,7 +92,7 @@
* </tr>
*
* <tr>
- * <td>getResponseCache</td>
+ * <th scope="row">getResponseCache</th>
* <td>The ability to get the response cache that provides
* access to a local response cache.</td>
* <td>Malicious code getting access to the local response cache
@@ -100,7 +100,7 @@
* </tr>
*
* <tr>
- * <td>requestPasswordAuthentication</td>
+ * <th scope="row">requestPasswordAuthentication</th>
* <td>The ability
* to ask the authenticator registered with the system for
* a password</td>
@@ -108,7 +108,7 @@
* </tr>
*
* <tr>
- * <td>setCookieHandler</td>
+ * <th scope="row">setCookieHandler</th>
* <td>The ability to set the cookie handler that processes highly
* security sensitive cookie information for an Http session.</td>
* <td>Malicious code can set a cookie handler to obtain access to
@@ -118,7 +118,7 @@
* </tr>
*
* <tr>
- * <td>setDefaultAuthenticator</td>
+ * <th scope="row">setDefaultAuthenticator</th>
* <td>The ability to set the
* way authentication information is retrieved when
* a proxy or HTTP server asks for authentication</td>
@@ -128,7 +128,7 @@
* </tr>
*
* <tr>
- * <td>setProxySelector</td>
+ * <th scope="row">setProxySelector</th>
* <td>The ability to set the proxy selector used to make decisions
* on which proxies to use when making network connections.</td>
* <td>Malicious code can set a ProxySelector that directs network
@@ -136,7 +136,7 @@
* </tr>
*
* <tr>
- * <td>setResponseCache</td>
+ * <th scope="row">setResponseCache</th>
* <td>The ability to set the response cache that provides access to
* a local response cache.</td>
* <td>Malicious code getting access to the local response cache
@@ -145,7 +145,7 @@
* </tr>
*
* <tr>
- * <td>specifyStreamHandler</td>
+ * <th scope="row">specifyStreamHandler</th>
* <td>The ability
* to specify a stream handler when constructing a URL</td>
* <td>Malicious code may create a URL with resources that it would
--- a/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousChannelGroup.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousChannelGroup.java Thu Jul 20 09:38:13 2017 -0700
@@ -64,13 +64,13 @@
* <caption style="display:none:">System properties</caption>
* <thead>
* <tr>
- * <th>System property</th>
- * <th>Description</th>
+ * <th scope="col">System property</th>
+ * <th scope="col">Description</th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td> {@code java.nio.channels.DefaultThreadPool.threadFactory} </td>
+ * <th scope="row"> {@code java.nio.channels.DefaultThreadPool.threadFactory} </th>
* <td> The value of this property is taken to be the fully-qualified name
* of a concrete {@link java.util.concurrent.ThreadFactory ThreadFactory}
* class. The class is loaded using the system class loader and instantiated.
@@ -81,7 +81,7 @@
* construction of the default group. </td>
* </tr>
* <tr>
- * <td> {@code java.nio.channels.DefaultThreadPool.initialSize} </td>
+ * <th scope="row"> {@code java.nio.channels.DefaultThreadPool.initialSize} </th>
* <td> The value of the {@code initialSize} parameter for the default
* group (see {@link #withCachedThreadPool withCachedThreadPool}).
* The value of the property is taken to be the {@code String}
--- a/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousFileChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousFileChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -136,17 +136,17 @@
* <table class="striped">
* <caption style="display:none">additional options</caption>
* <thead>
- * <tr> <th>Option</th> <th>Description</th> </tr>
+ * <tr> <th scope="col">Option</th> <th scope="col">Description</th> </tr>
* </thead>
* <tbody>
* <tr>
- * <td> {@link StandardOpenOption#TRUNCATE_EXISTING TRUNCATE_EXISTING} </td>
+ * <th scope="row"> {@link StandardOpenOption#TRUNCATE_EXISTING TRUNCATE_EXISTING} </th>
* <td> When opening an existing file, the file is first truncated to a
* size of 0 bytes. This option is ignored when the file is opened only
* for reading.</td>
* </tr>
* <tr>
- * <td> {@link StandardOpenOption#CREATE_NEW CREATE_NEW} </td>
+ * <th scope="row"> {@link StandardOpenOption#CREATE_NEW CREATE_NEW} </th>
* <td> If this option is present then a new file is created, failing if
* the file already exists. When creating a file the check for the
* existence of the file and the creation of the file if it does not exist
@@ -154,7 +154,7 @@
* ignored when the file is opened only for reading. </td>
* </tr>
* <tr>
- * <td > {@link StandardOpenOption#CREATE CREATE} </td>
+ * <th scope="row" > {@link StandardOpenOption#CREATE CREATE} </th>
* <td> If this option is present then an existing file is opened if it
* exists, otherwise a new file is created. When creating a file the check
* for the existence of the file and the creation of the file if it does
@@ -163,7 +163,7 @@
* the file is opened only for reading. </td>
* </tr>
* <tr>
- * <td > {@link StandardOpenOption#DELETE_ON_CLOSE DELETE_ON_CLOSE} </td>
+ * <th scope="row" > {@link StandardOpenOption#DELETE_ON_CLOSE DELETE_ON_CLOSE} </th>
* <td> When this option is present then the implementation makes a
* <em>best effort</em> attempt to delete the file when closed by the
* the {@link #close close} method. If the {@code close} method is not
@@ -171,20 +171,20 @@
* when the Java virtual machine terminates. </td>
* </tr>
* <tr>
- * <td>{@link StandardOpenOption#SPARSE SPARSE} </td>
+ * <th scope="row">{@link StandardOpenOption#SPARSE SPARSE} </th>
* <td> When creating a new file this option is a <em>hint</em> that the
* new file will be sparse. This option is ignored when not creating
* a new file. </td>
* </tr>
* <tr>
- * <td> {@link StandardOpenOption#SYNC SYNC} </td>
+ * <th scope="row"> {@link StandardOpenOption#SYNC SYNC} </th>
* <td> Requires that every update to the file's content or metadata be
* written synchronously to the underlying storage device. (see <a
* href="../file/package-summary.html#integrity"> Synchronized I/O file
* integrity</a>). </td>
* </tr>
* <tr>
- * <td> {@link StandardOpenOption#DSYNC DSYNC} </td>
+ * <th scope="row"> {@link StandardOpenOption#DSYNC DSYNC} </th>
* <td> Requires that every update to the file's content be written
* synchronously to the underlying storage device. (see <a
* href="../file/package-summary.html#integrity"> Synchronized I/O file
--- a/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousServerSocketChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousServerSocketChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -56,17 +56,17 @@
* <caption style="display:none">Socket options</caption>
* <thead>
* <tr>
- * <th>Option Name</th>
- * <th>Description</th>
+ * <th scope="col">Option Name</th>
+ * <th scope="col">Description</th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </th>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </th>
* <td> Re-use address </td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousSocketChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousSocketChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -66,29 +66,29 @@
* <caption style="display:none">Socket options</caption>
* <thead>
* <tr>
- * <th>Option Name</th>
- * <th>Description</th>
+ * <th scope="col">Option Name</th>
+ * <th scope="col">Description</th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </th>
* <td> The size of the socket send buffer </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </th>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_KEEPALIVE SO_KEEPALIVE} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_KEEPALIVE SO_KEEPALIVE} </th>
* <td> Keep connection alive </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </th>
* <td> Re-use address </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAY} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAY} </th>
* <td> Disable the Nagle algorithm </td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/nio/channels/DatagramChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/DatagramChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -61,44 +61,44 @@
* <caption style="display:none">Socket options</caption>
* <thead>
* <tr>
- * <th>Option Name</th>
- * <th>Description</th>
+ * <th scope="col">Option Name</th>
+ * <th scope="col">Description</th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </th>
* <td> The size of the socket send buffer </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </th>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </th>
* <td> Re-use address </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_BROADCAST SO_BROADCAST} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_BROADCAST SO_BROADCAST} </th>
* <td> Allow transmission of broadcast datagrams </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#IP_TOS IP_TOS} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#IP_TOS IP_TOS} </th>
* <td> The Type of Service (ToS) octet in the Internet Protocol (IP) header </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#IP_MULTICAST_IF IP_MULTICAST_IF} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#IP_MULTICAST_IF IP_MULTICAST_IF} </th>
* <td> The network interface for Internet Protocol (IP) multicast datagrams </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#IP_MULTICAST_TTL
- * IP_MULTICAST_TTL} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#IP_MULTICAST_TTL
+ * IP_MULTICAST_TTL} </th>
* <td> The <em>time-to-live</em> for Internet Protocol (IP) multicast
* datagrams </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#IP_MULTICAST_LOOP
- * IP_MULTICAST_LOOP} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#IP_MULTICAST_LOOP
+ * IP_MULTICAST_LOOP} </th>
* <td> Loopback for Internet Protocol (IP) multicast datagrams </td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/nio/channels/FileChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/FileChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -177,11 +177,11 @@
* <table class="striped">
* <caption style="display:none">additional options</caption>
* <thead>
- * <tr> <th>Option</th> <th>Description</th> </tr>
+ * <tr> <th scope="col">Option</th> <th scope="col">Description</th> </tr>
* </thead>
* <tbody>
* <tr>
- * <td> {@link StandardOpenOption#APPEND APPEND} </td>
+ * <th scope="row"> {@link StandardOpenOption#APPEND APPEND} </th>
* <td> If this option is present then the file is opened for writing and
* each invocation of the channel's {@code write} method first advances
* the position to the end of the file and then writes the requested
@@ -191,13 +191,13 @@
* with the {@code READ} or {@code TRUNCATE_EXISTING} options. </td>
* </tr>
* <tr>
- * <td> {@link StandardOpenOption#TRUNCATE_EXISTING TRUNCATE_EXISTING} </td>
+ * <th scope="row"> {@link StandardOpenOption#TRUNCATE_EXISTING TRUNCATE_EXISTING} </th>
* <td> If this option is present then the existing file is truncated to
* a size of 0 bytes. This option is ignored when the file is opened only
* for reading. </td>
* </tr>
* <tr>
- * <td> {@link StandardOpenOption#CREATE_NEW CREATE_NEW} </td>
+ * <th scope="row"> {@link StandardOpenOption#CREATE_NEW CREATE_NEW} </th>
* <td> If this option is present then a new file is created, failing if
* the file already exists. When creating a file the check for the
* existence of the file and the creation of the file if it does not exist
@@ -205,7 +205,7 @@
* ignored when the file is opened only for reading. </td>
* </tr>
* <tr>
- * <td > {@link StandardOpenOption#CREATE CREATE} </td>
+ * <th scope="row" > {@link StandardOpenOption#CREATE CREATE} </th>
* <td> If this option is present then an existing file is opened if it
* exists, otherwise a new file is created. When creating a file the check
* for the existence of the file and the creation of the file if it does
@@ -214,7 +214,7 @@
* the file is opened only for reading. </td>
* </tr>
* <tr>
- * <td > {@link StandardOpenOption#DELETE_ON_CLOSE DELETE_ON_CLOSE} </td>
+ * <th scope="row" > {@link StandardOpenOption#DELETE_ON_CLOSE DELETE_ON_CLOSE} </th>
* <td> When this option is present then the implementation makes a
* <em>best effort</em> attempt to delete the file when closed by the
* the {@link #close close} method. If the {@code close} method is not
@@ -222,20 +222,20 @@
* when the Java virtual machine terminates. </td>
* </tr>
* <tr>
- * <td>{@link StandardOpenOption#SPARSE SPARSE} </td>
+ * <th scope="row">{@link StandardOpenOption#SPARSE SPARSE} </th>
* <td> When creating a new file this option is a <em>hint</em> that the
* new file will be sparse. This option is ignored when not creating
* a new file. </td>
* </tr>
* <tr>
- * <td> {@link StandardOpenOption#SYNC SYNC} </td>
+ * <th scope="row"> {@link StandardOpenOption#SYNC SYNC} </th>
* <td> Requires that every update to the file's content or metadata be
* written synchronously to the underlying storage device. (see <a
* href="../file/package-summary.html#integrity"> Synchronized I/O file
* integrity</a>). </td>
* </tr>
* <tr>
- * <td> {@link StandardOpenOption#DSYNC DSYNC} </td>
+ * <th scope="row"> {@link StandardOpenOption#DSYNC DSYNC} </th>
* <td> Requires that every update to the file's content be written
* synchronously to the underlying storage device. (see <a
* href="../file/package-summary.html#integrity"> Synchronized I/O file
--- a/jdk/src/java.base/share/classes/java/nio/channels/ServerSocketChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/ServerSocketChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -50,17 +50,17 @@
* <caption style="display:none">Socket options</caption>
* <thead>
* <tr>
- * <th>Option Name</th>
- * <th>Description</th>
+ * <th scope="col">Option Name</th>
+ * <th scope="col">Description</th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </th>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </th>
* <td> Re-use address </td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/nio/channels/SocketChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/SocketChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -70,34 +70,34 @@
* <caption style="display:none">Socket options</caption>
* <thead>
* <tr>
- * <th>Option Name</th>
- * <th>Description</th>
+ * <th scope="col">Option Name</th>
+ * <th scope="col">Description</th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </th>
* <td> The size of the socket send buffer </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </th>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_KEEPALIVE SO_KEEPALIVE} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_KEEPALIVE SO_KEEPALIVE} </th>
* <td> Keep connection alive </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </th>
* <td> Re-use address </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#SO_LINGER SO_LINGER} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#SO_LINGER SO_LINGER} </th>
* <td> Linger on close if data is present (when configured in blocking mode
* only) </td>
* </tr>
* <tr>
- * <td> {@link java.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAY} </td>
+ * <th scope="row"> {@link java.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAY} </th>
* <td> Disable the Nagle algorithm </td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/nio/charset/Charset.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/charset/Charset.java Thu Jul 20 09:38:13 2017 -0700
@@ -25,6 +25,11 @@
package java.nio.charset;
+import jdk.internal.misc.VM;
+import sun.nio.cs.StandardCharsets;
+import sun.nio.cs.ThreadLocalCoders;
+import sun.security.action.GetPropertyAction;
+
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.spi.CharsetProvider;
@@ -38,15 +43,11 @@
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Objects;
-import java.util.Set;
+import java.util.ServiceConfigurationError;
import java.util.ServiceLoader;
-import java.util.ServiceConfigurationError;
+import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
-import jdk.internal.misc.VM;
-import sun.nio.cs.StandardCharsets;
-import sun.nio.cs.ThreadLocalCoders;
-import sun.security.action.GetPropertyAction;
/**
@@ -150,23 +151,23 @@
* <blockquote><table class="striped" style="width:80%">
* <caption style="display:none">Description of standard charsets</caption>
* <thead>
- * <tr><th style="text-align:left">Charset</th><th style="text-align:left">Description</th></tr>
+ * <tr><th scope="col" style="text-align:left">Charset</th><th scope="col" style="text-align:left">Description</th></tr>
* </thead>
* <tbody>
- * <tr><td style="vertical-align:top">{@code US-ASCII}</td>
+ * <tr><th scope="row" style="vertical-align:top">{@code US-ASCII}</th>
* <td>Seven-bit ASCII, a.k.a. {@code ISO646-US},
* a.k.a. the Basic Latin block of the Unicode character set</td></tr>
- * <tr><td style="vertical-align:top"><code>ISO-8859-1 </code></td>
+ * <tr><th scope="row" style="vertical-align:top"><code>ISO-8859-1 </code></th>
* <td>ISO Latin Alphabet No. 1, a.k.a. {@code ISO-LATIN-1}</td></tr>
- * <tr><td style="vertical-align:top">{@code UTF-8}</td>
+ * <tr><th scope="row" style="vertical-align:top">{@code UTF-8}</th>
* <td>Eight-bit UCS Transformation Format</td></tr>
- * <tr><td style="vertical-align:top">{@code UTF-16BE}</td>
+ * <tr><th scope="row" style="vertical-align:top">{@code UTF-16BE}</th>
* <td>Sixteen-bit UCS Transformation Format,
* big-endian byte order</td></tr>
- * <tr><td style="vertical-align:top">{@code UTF-16LE}</td>
+ * <tr><th scope="row" style="vertical-align:top">{@code UTF-16LE}</th>
* <td>Sixteen-bit UCS Transformation Format,
* little-endian byte order</td></tr>
- * <tr><td style="vertical-align:top">{@code UTF-16}</td>
+ * <tr><th scope="row" style="vertical-align:top">{@code UTF-16}</th>
* <td>Sixteen-bit UCS Transformation Format,
* byte order identified by an optional byte-order mark</td></tr>
* </tbody>
@@ -635,10 +636,19 @@
* If the canonical name or any of the aliases are illegal
*/
protected Charset(String canonicalName, String[] aliases) {
- checkName(canonicalName);
String[] as = Objects.requireNonNullElse(aliases, zeroAliases);
- for (int i = 0; i < as.length; i++)
- checkName(as[i]);
+
+ // Skip checks for the standard, built-in Charsets we always load
+ // during initialization. Use of identity is intentional to be
+ // consistent with sun.nio.cs.StandardCharsets
+ if (canonicalName != StandardCharsets.ISO_8859_1
+ && canonicalName != StandardCharsets.US_ASCII
+ && canonicalName != StandardCharsets.UTF_8) {
+ checkName(canonicalName);
+ for (int i = 0; i < as.length; i++) {
+ checkName(as[i]);
+ }
+ }
this.name = canonicalName;
this.aliases = as;
}
--- a/jdk/src/java.base/share/classes/java/nio/file/Files.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/file/Files.java Thu Jul 20 09:38:13 2017 -0700
@@ -236,11 +236,11 @@
* <table class="striped">
* <caption style="display:none">Options</caption>
* <thead>
- * <tr> <th>Option</th> <th>Description</th> </tr>
+ * <tr> <th scope="col">Option</th> <th scope="col">Description</th> </tr>
* </thead>
* <tbody>
* <tr>
- * <td> {@link StandardOpenOption#APPEND APPEND} </td>
+ * <th scope="row"> {@link StandardOpenOption#APPEND APPEND} </th>
* <td> If this option is present then the file is opened for writing and
* each invocation of the channel's {@code write} method first advances
* the position to the end of the file and then writes the requested
@@ -250,13 +250,13 @@
* with the {@code READ} or {@code TRUNCATE_EXISTING} options. </td>
* </tr>
* <tr>
- * <td> {@link StandardOpenOption#TRUNCATE_EXISTING TRUNCATE_EXISTING} </td>
+ * <th scope="row"> {@link StandardOpenOption#TRUNCATE_EXISTING TRUNCATE_EXISTING} </th>
* <td> If this option is present then the existing file is truncated to
* a size of 0 bytes. This option is ignored when the file is opened only
* for reading. </td>
* </tr>
* <tr>
- * <td> {@link StandardOpenOption#CREATE_NEW CREATE_NEW} </td>
+ * <th scope="row"> {@link StandardOpenOption#CREATE_NEW CREATE_NEW} </th>
* <td> If this option is present then a new file is created, failing if
* the file already exists or is a symbolic link. When creating a file the
* check for the existence of the file and the creation of the file if it
@@ -264,14 +264,14 @@
* This option is ignored when the file is opened only for reading. </td>
* </tr>
* <tr>
- * <td > {@link StandardOpenOption#CREATE CREATE} </td>
+ * <th scope="row" > {@link StandardOpenOption#CREATE CREATE} </th>
* <td> If this option is present then an existing file is opened if it
* exists, otherwise a new file is created. This option is ignored if the
* {@code CREATE_NEW} option is also present or the file is opened only
* for reading. </td>
* </tr>
* <tr>
- * <td > {@link StandardOpenOption#DELETE_ON_CLOSE DELETE_ON_CLOSE} </td>
+ * <th scope="row" > {@link StandardOpenOption#DELETE_ON_CLOSE DELETE_ON_CLOSE} </th>
* <td> When this option is present then the implementation makes a
* <em>best effort</em> attempt to delete the file when closed by the
* {@link SeekableByteChannel#close close} method. If the {@code close}
@@ -279,20 +279,20 @@
* delete the file when the Java virtual machine terminates. </td>
* </tr>
* <tr>
- * <td>{@link StandardOpenOption#SPARSE SPARSE} </td>
+ * <th scope="row">{@link StandardOpenOption#SPARSE SPARSE} </th>
* <td> When creating a new file this option is a <em>hint</em> that the
* new file will be sparse. This option is ignored when not creating
* a new file. </td>
* </tr>
* <tr>
- * <td> {@link StandardOpenOption#SYNC SYNC} </td>
+ * <th scope="row"> {@link StandardOpenOption#SYNC SYNC} </th>
* <td> Requires that every update to the file's content or metadata be
* written synchronously to the underlying storage device. (see <a
* href="package-summary.html#integrity"> Synchronized I/O file
* integrity</a>). </td>
* </tr>
* <tr>
- * <td> {@link StandardOpenOption#DSYNC DSYNC} </td>
+ * <th scope="row"> {@link StandardOpenOption#DSYNC DSYNC} </th>
* <td> Requires that every update to the file's content be written
* synchronously to the underlying storage device. (see <a
* href="package-summary.html#integrity"> Synchronized I/O file
@@ -1196,18 +1196,18 @@
* <table class="striped">
* <caption style="display:none">Options</caption>
* <thead>
- * <tr> <th>Option</th> <th>Description</th> </tr>
+ * <tr> <th scope="col">Option</th> <th scope="col">Description</th> </tr>
* </thead>
* <tbody>
* <tr>
- * <td> {@link StandardCopyOption#REPLACE_EXISTING REPLACE_EXISTING} </td>
+ * <th scope="row"> {@link StandardCopyOption#REPLACE_EXISTING REPLACE_EXISTING} </th>
* <td> If the target file exists, then the target file is replaced if it
* is not a non-empty directory. If the target file exists and is a
* symbolic link, then the symbolic link itself, not the target of
* the link, is replaced. </td>
* </tr>
* <tr>
- * <td> {@link StandardCopyOption#COPY_ATTRIBUTES COPY_ATTRIBUTES} </td>
+ * <th scope="row"> {@link StandardCopyOption#COPY_ATTRIBUTES COPY_ATTRIBUTES} </th>
* <td> Attempts to copy the file attributes associated with this file to
* the target file. The exact file attributes that are copied is platform
* and file system dependent and therefore unspecified. Minimally, the
@@ -1217,7 +1217,7 @@
* loss. </td>
* </tr>
* <tr>
- * <td> {@link LinkOption#NOFOLLOW_LINKS NOFOLLOW_LINKS} </td>
+ * <th scope="row"> {@link LinkOption#NOFOLLOW_LINKS NOFOLLOW_LINKS} </th>
* <td> Symbolic links are not followed. If the file is a symbolic link,
* then the symbolic link itself, not the target of the link, is copied.
* It is implementation specific if file attributes can be copied to the
@@ -1319,18 +1319,18 @@
* <table class="striped">
* <caption style="display:none">Options</caption>
* <thead>
- * <tr> <th>Option</th> <th>Description</th> </tr>
+ * <tr> <th scope="col">Option</th> <th scope="col">Description</th> </tr>
* </thead>
* <tbody>
* <tr>
- * <td> {@link StandardCopyOption#REPLACE_EXISTING REPLACE_EXISTING} </td>
+ * <th scope="row"> {@link StandardCopyOption#REPLACE_EXISTING REPLACE_EXISTING} </th>
* <td> If the target file exists, then the target file is replaced if it
* is not a non-empty directory. If the target file exists and is a
* symbolic link, then the symbolic link itself, not the target of
* the link, is replaced. </td>
* </tr>
* <tr>
- * <td> {@link StandardCopyOption#ATOMIC_MOVE ATOMIC_MOVE} </td>
+ * <th scope="row"> {@link StandardCopyOption#ATOMIC_MOVE ATOMIC_MOVE} </th>
* <td> The move is performed as an atomic file system operation and all
* other options are ignored. If the target file exists then it is
* implementation specific if the existing file is replaced or this method
--- a/jdk/src/java.base/share/classes/java/nio/file/LinkPermission.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/file/LinkPermission.java Thu Jul 20 09:38:13 2017 -0700
@@ -37,14 +37,14 @@
* <caption style="display:none">Table shows permission target name, what the permission allows, and associated risks</caption>
* <thead>
* <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
+ * <th scope="col">Permission Target Name</th>
+ * <th scope="col">What the Permission Allows</th>
+ * <th scope="col">Risks of Allowing this Permission</th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td>hard</td>
+ * <th scope="row">hard</th>
* <td> Ability to add an existing file to a directory. This is sometimes
* known as creating a link, or hard link. </td>
* <td> Extreme care should be taken when granting this permission. It allows
@@ -52,7 +52,7 @@
* attacker access to all files. </td>
* </tr>
* <tr>
- * <td>symbolic</td>
+ * <th scope="row">symbolic</th>
* <td> Ability to create symbolic links. </td>
* <td> Extreme care should be taken when granting this permission. It allows
* linking to any file or directory in the file system thus allowing the
--- a/jdk/src/java.base/share/classes/java/nio/file/attribute/AclFileAttributeView.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/file/attribute/AclFileAttributeView.java Thu Jul 20 09:38:13 2017 -0700
@@ -98,17 +98,17 @@
* <caption style="display:none">Supported attributes</caption>
* <thead>
* <tr>
- * <th> Name </th>
- * <th> Type </th>
+ * <th scope="col"> Name </th>
+ * <th scope="col"> Type </th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td> "acl" </td>
+ * <th scope="row"> "acl" </th>
* <td> {@link List}<{@link AclEntry}> </td>
* </tr>
* <tr>
- * <td> "owner" </td>
+ * <th scope="row"> "owner" </th>
* <td> {@link UserPrincipal} </td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/nio/file/attribute/BasicFileAttributeView.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/file/attribute/BasicFileAttributeView.java Thu Jul 20 09:38:13 2017 -0700
@@ -45,45 +45,45 @@
* <caption style="display:none">Supported attributes</caption>
* <thead>
* <tr>
- * <th> Name </th>
- * <th> Type </th>
+ * <th scope="col"> Name </th>
+ * <th scope="col"> Type </th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td> "lastModifiedTime" </td>
+ * <th scope="row"> "lastModifiedTime" </th>
* <td> {@link FileTime} </td>
* </tr>
* <tr>
- * <td> "lastAccessTime" </td>
+ * <th scope="row"> "lastAccessTime" </th>
* <td> {@link FileTime} </td>
* </tr>
* <tr>
- * <td> "creationTime" </td>
+ * <th scope="row"> "creationTime" </th>
* <td> {@link FileTime} </td>
* </tr>
* <tr>
- * <td> "size" </td>
+ * <th scope="row"> "size" </th>
* <td> {@link Long} </td>
* </tr>
* <tr>
- * <td> "isRegularFile" </td>
+ * <th scope="row"> "isRegularFile" </th>
* <td> {@link Boolean} </td>
* </tr>
* <tr>
- * <td> "isDirectory" </td>
+ * <th scope="row"> "isDirectory" </th>
* <td> {@link Boolean} </td>
* </tr>
* <tr>
- * <td> "isSymbolicLink" </td>
+ * <th scope="row"> "isSymbolicLink" </th>
* <td> {@link Boolean} </td>
* </tr>
* <tr>
- * <td> "isOther" </td>
+ * <th scope="row"> "isOther" </th>
* <td> {@link Boolean} </td>
* </tr>
* <tr>
- * <td> "fileKey" </td>
+ * <th scope="row"> "fileKey" </th>
* <td> {@link Object} </td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/nio/file/attribute/DosFileAttributeView.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/file/attribute/DosFileAttributeView.java Thu Jul 20 09:38:13 2017 -0700
@@ -45,25 +45,25 @@
* <caption style="display:none">Supported attributes</caption>
* <thead>
* <tr>
- * <th> Name </th>
- * <th> Type </th>
+ * <th scope="col"> Name </th>
+ * <th scope="col"> Type </th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td> readonly </td>
+ * <th scope="row"> readonly </th>
* <td> {@link Boolean} </td>
* </tr>
* <tr>
- * <td> hidden </td>
+ * <th scope="row"> hidden </th>
* <td> {@link Boolean} </td>
* </tr>
* <tr>
- * <td> system </td>
+ * <th scope="row"> system </th>
* <td> {@link Boolean} </td>
* </tr>
* <tr>
- * <td> archive </td>
+ * <th scope="row"> archive </th>
* <td> {@link Boolean} </td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/nio/file/attribute/PosixFileAttributeView.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/file/attribute/PosixFileAttributeView.java Thu Jul 20 09:38:13 2017 -0700
@@ -78,17 +78,17 @@
* <caption style="display:none">Supported attributes</caption>
* <thead>
* <tr>
- * <th> Name </th>
- * <th> Type </th>
+ * <th scope="col"> Name </th>
+ * <th scope="col"> Type </th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td> "permissions" </td>
+ * <th scope="row"> "permissions" </th>
* <td> {@link Set}<{@link PosixFilePermission}> </td>
* </tr>
* <tr>
- * <td> "group" </td>
+ * <th scope="row"> "group" </th>
* <td> {@link GroupPrincipal} </td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/nio/file/spi/FileSystemProvider.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/file/spi/FileSystemProvider.java Thu Jul 20 09:38:13 2017 -0700
@@ -922,21 +922,21 @@
* <table class="striped">
* <caption style="display:none">Access Modes</caption>
* <thead>
- * <tr> <th>Value</th> <th>Description</th> </tr>
+ * <tr> <th scope="col">Value</th> <th scope="col">Description</th> </tr>
* </thead>
* <tbody>
* <tr>
- * <td> {@link AccessMode#READ READ} </td>
+ * <th scope="row"> {@link AccessMode#READ READ} </th>
* <td> Checks that the file exists and that the Java virtual machine has
* permission to read the file. </td>
* </tr>
* <tr>
- * <td> {@link AccessMode#WRITE WRITE} </td>
+ * <th scope="row"> {@link AccessMode#WRITE WRITE} </th>
* <td> Checks that the file exists and that the Java virtual machine has
* permission to write to the file, </td>
* </tr>
* <tr>
- * <td> {@link AccessMode#EXECUTE EXECUTE} </td>
+ * <th scope="row"> {@link AccessMode#EXECUTE EXECUTE} </th>
* <td> Checks that the file exists and that the Java virtual machine has
* permission to {@link Runtime#exec execute} the file. The semantics
* may differ when checking access to a directory. For example, on UNIX
--- a/jdk/src/java.base/share/classes/java/security/SecurityPermission.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/security/SecurityPermission.java Thu Jul 20 09:38:13 2017 -0700
@@ -49,15 +49,15 @@
* <caption style="display:none">target name, what the permission allows, and associated risks</caption>
* <thead>
* <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
+ * <th scope="col">Permission Target Name</th>
+ * <th scope="col">What the Permission Allows</th>
+ * <th scope="col">Risks of Allowing this Permission</th>
* </tr>
* </thead>
* <tbody>
*
* <tr>
- * <td>authProvider.{provider name}</td>
+ * <th scope="row">authProvider.{provider name}</th>
* <td>Allow the named provider to be an AuthProvider for login and
* logout operations. </td>
* <td>This allows the named provider to perform login and logout
@@ -68,7 +68,7 @@
* </tr>
*
* <tr>
- * <td>createAccessControlContext</td>
+ * <th scope="row">createAccessControlContext</th>
* <td>Creation of an AccessControlContext</td>
* <td>This allows someone to instantiate an AccessControlContext
* with a {@code DomainCombiner}. Extreme care must be taken when
@@ -78,7 +78,7 @@
* </tr>
*
* <tr>
- * <td>getDomainCombiner</td>
+ * <th scope="row">getDomainCombiner</th>
* <td>Retrieval of an AccessControlContext's DomainCombiner</td>
* <td>This allows someone to retrieve an AccessControlContext's
* {@code DomainCombiner}. Since DomainCombiners may contain
@@ -86,7 +86,7 @@
* </tr>
*
* <tr>
- * <td>getPolicy</td>
+ * <th scope="row">getPolicy</th>
* <td>Retrieval of the system-wide security policy (specifically, of the
* currently-installed Policy object)</td>
* <td>This allows someone to query the policy via the
@@ -99,7 +99,7 @@
* </tr>
*
* <tr>
- * <td>setPolicy</td>
+ * <th scope="row">setPolicy</th>
* <td>Setting of the system-wide security policy (specifically,
* the Policy object)</td>
* <td>Granting this permission is extremely dangerous, as malicious
@@ -108,7 +108,7 @@
* </tr>
*
* <tr>
- * <td>createPolicy.{policy type}</td>
+ * <th scope="row">createPolicy.{policy type}</th>
* <td>Getting an instance of a Policy implementation from a provider</td>
* <td>Granting this permission enables code to obtain a Policy object.
* Malicious code may query the Policy object to determine what permissions
@@ -116,7 +116,7 @@
* </tr>
*
* <tr>
- * <td>getProperty.{key}</td>
+ * <th scope="row">getProperty.{key}</th>
* <td>Retrieval of the security property with the specified key</td>
* <td>Depending on the particular key for which access has
* been granted, the code may have access to the list of security
@@ -129,7 +129,7 @@
* </tr>
*
* <tr>
- * <td>setProperty.{key}</td>
+ * <th scope="row">setProperty.{key}</th>
* <td>Setting of the security property with the specified key</td>
* <td>This could include setting a security provider or defining
* the location of the system-wide security policy. Malicious
@@ -144,7 +144,7 @@
* </tr>
*
* <tr>
- * <td>insertProvider</td>
+ * <th scope="row">insertProvider</th>
* <td>Addition of a new provider</td>
* <td>This would allow somebody to introduce a possibly
* malicious provider (e.g., one that discloses the private keys passed
@@ -158,7 +158,7 @@
* </tr>
*
* <tr>
- * <td>removeProvider.{provider name}</td>
+ * <th scope="row">removeProvider.{provider name}</th>
* <td>Removal of the specified provider</td>
* <td>This may change the behavior or disable execution of other
* parts of the program. If a provider subsequently requested by the
@@ -171,7 +171,7 @@
* </tr>
*
* <tr>
- * <td>clearProviderProperties.{provider name}</td>
+ * <th scope="row">clearProviderProperties.{provider name}</th>
* <td>"Clearing" of a Provider so that it no longer contains the properties
* used to look up services implemented by the provider</td>
* <td>This disables the lookup of services implemented by the provider.
@@ -181,7 +181,7 @@
* </tr>
*
* <tr>
- * <td>putProviderProperty.{provider name}</td>
+ * <th scope="row">putProviderProperty.{provider name}</th>
* <td>Setting of properties for the specified Provider</td>
* <td>The provider properties each specify the name and location
* of a particular service implemented by the provider. By granting
@@ -190,7 +190,7 @@
* </tr>
*
* <tr>
- * <td>removeProviderProperty.{provider name}</td>
+ * <th scope="row">removeProviderProperty.{provider name}</th>
* <td>Removal of properties from the specified Provider</td>
* <td>This disables the lookup of services implemented by the
* provider. They are no longer accessible due to removal of the properties
@@ -213,15 +213,15 @@
* <caption style="display:none">target name, what the permission allows, and associated risks</caption>
* <thead>
* <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
+ * <th scope="col">Permission Target Name</th>
+ * <th scope="col">What the Permission Allows</th>
+ * <th scope="col">Risks of Allowing this Permission</th>
* </tr>
* </thead>
*
* <tbody>
* <tr>
- * <td>insertProvider.{provider name}</td>
+ * <th scope="row">insertProvider.{provider name}</th>
* <td>Addition of a new provider, with the specified name</td>
* <td>Use of this permission is discouraged from further use because it is
* possible to circumvent the name restrictions by overriding the
@@ -238,7 +238,7 @@
* </tr>
*
* <tr>
- * <td>setSystemScope</td>
+ * <th scope="row">setSystemScope</th>
* <td>Setting of the system identity scope</td>
* <td>This would allow an attacker to configure the system identity scope with
* certificates that should not be trusted, thereby granting applet or
@@ -247,7 +247,7 @@
* </tr>
*
* <tr>
- * <td>setIdentityPublicKey</td>
+ * <th scope="row">setIdentityPublicKey</th>
* <td>Setting of the public key for an Identity</td>
* <td>If the identity is marked as "trusted", this allows an attacker to
* introduce a different public key (e.g., its own) that is not trusted
@@ -257,7 +257,7 @@
* </tr>
*
* <tr>
- * <td>setIdentityInfo</td>
+ * <th scope="row">setIdentityInfo</th>
* <td>Setting of a general information string for an Identity</td>
* <td>This allows attackers to set the general description for
* an identity. This may trick applications into using a different
@@ -266,7 +266,7 @@
* </tr>
*
* <tr>
- * <td>addIdentityCertificate</td>
+ * <th scope="row">addIdentityCertificate</th>
* <td>Addition of a certificate for an Identity</td>
* <td>This allows attackers to set a certificate for
* an identity's public key. This is dangerous because it affects
@@ -275,7 +275,7 @@
* </tr>
*
* <tr>
- * <td>removeIdentityCertificate</td>
+ * <th scope="row">removeIdentityCertificate</th>
* <td>Removal of a certificate for an Identity</td>
* <td>This allows attackers to remove a certificate for
* an identity's public key. This is dangerous because it affects
@@ -284,7 +284,7 @@
* </tr>
*
* <tr>
- * <td>printIdentity</td>
+ * <th scope="row">printIdentity</th>
* <td>Viewing the name of a principal
* and optionally the scope in which it is used, and whether
* or not it is considered "trusted" in that scope</td>
@@ -296,7 +296,7 @@
*</tr>
*
* <tr>
- * <td>getSignerPrivateKey</td>
+ * <th scope="row">getSignerPrivateKey</th>
* <td>Retrieval of a Signer's private key</td>
* <td>It is very dangerous to allow access to a private key; private
* keys are supposed to be kept secret. Otherwise, code can use the
@@ -305,7 +305,7 @@
* </tr>
*
* <tr>
- * <td>setSignerKeyPair</td>
+ * <th scope="row">setSignerKeyPair</th>
* <td>Setting of the key pair (public key and private key) for a Signer</td>
* <td>This would allow an attacker to replace somebody else's (the "target's")
* keypair with a possibly weaker keypair (e.g., a keypair of a smaller
--- a/jdk/src/java.base/share/classes/java/text/DecimalFormat.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/text/DecimalFormat.java Thu Jul 20 09:38:13 2017 -0700
@@ -176,60 +176,60 @@
* <caption style="display:none">Chart showing symbol, location, localized, and meaning.</caption>
* <thead>
* <tr>
- * <th style="text-align:left">Symbol
- * <th style="text-align:left">Location
- * <th style="text-align:left">Localized?
- * <th style="text-align:left">Meaning
+ * <th scope="col" style="text-align:left">Symbol
+ * <th scope="col" style="text-align:left">Location
+ * <th scope="col" style="text-align:left">Localized?
+ * <th scope="col" style="text-align:left">Meaning
* </thead>
* <tbody>
* <tr style="vertical-align:top">
- * <td><code>0</code>
+ * <th scope="row"><code>0</code>
* <td>Number
* <td>Yes
* <td>Digit
* <tr style="vertical-align: top">
- * <td><code>#</code>
+ * <th scope="row"><code>#</code>
* <td>Number
* <td>Yes
* <td>Digit, zero shows as absent
* <tr style="vertical-align:top">
- * <td><code>.</code>
+ * <th scope="row"><code>.</code>
* <td>Number
* <td>Yes
* <td>Decimal separator or monetary decimal separator
* <tr style="vertical-align: top">
- * <td><code>-</code>
+ * <th scope="row"><code>-</code>
* <td>Number
* <td>Yes
* <td>Minus sign
* <tr style="vertical-align:top">
- * <td><code>,</code>
+ * <th scope="row"><code>,</code>
* <td>Number
* <td>Yes
* <td>Grouping separator
* <tr style="vertical-align: top">
- * <td><code>E</code>
+ * <th scope="row"><code>E</code>
* <td>Number
* <td>Yes
* <td>Separates mantissa and exponent in scientific notation.
* <em>Need not be quoted in prefix or suffix.</em>
* <tr style="vertical-align:top">
- * <td><code>;</code>
+ * <th scope="row"><code>;</code>
* <td>Subpattern boundary
* <td>Yes
* <td>Separates positive and negative subpatterns
* <tr style="vertical-align: top">
- * <td><code>%</code>
+ * <th scope="row"><code>%</code>
* <td>Prefix or suffix
* <td>Yes
* <td>Multiply by 100 and show as percentage
* <tr style="vertical-align:top">
- * <td><code>\u2030</code>
+ * <th scope="row"><code>\u2030</code>
* <td>Prefix or suffix
* <td>Yes
* <td>Multiply by 1000 and show as per mille value
* <tr style="vertical-align: top">
- * <td><code>¤</code> (<code>\u00A4</code>)
+ * <th scope="row"><code>¤</code> (<code>\u00A4</code>)
* <td>Prefix or suffix
* <td>No
* <td>Currency sign, replaced by currency symbol. If
@@ -237,7 +237,7 @@
* If present in a pattern, the monetary decimal separator
* is used instead of the decimal separator.
* <tr style="vertical-align:top">
- * <td><code>'</code>
+ * <th scope="row"><code>'</code>
* <td>Prefix or suffix
* <td>No
* <td>Used to quote special characters in a prefix or suffix,
--- a/jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java Thu Jul 20 09:38:13 2017 -0700
@@ -96,124 +96,124 @@
* <caption style="display:none">Chart shows pattern letters, date/time component, presentation, and examples.</caption>
* <thead>
* <tr>
- * <th style="text-align:left">Letter
- * <th style="text-align:left">Date or Time Component
- * <th style="text-align:left">Presentation
- * <th style="text-align:left">Examples
+ * <th scope="col" style="text-align:left">Letter
+ * <th scope="col" style="text-align:left">Date or Time Component
+ * <th scope="col" style="text-align:left">Presentation
+ * <th scope="col" style="text-align:left">Examples
* </thead>
* <tbody>
* <tr>
- * <td><code>G</code>
+ * <th scope="row"><code>G</code>
* <td>Era designator
* <td><a href="#text">Text</a>
* <td><code>AD</code>
* <tr>
- * <td><code>y</code>
+ * <th scope="row"><code>y</code>
* <td>Year
* <td><a href="#year">Year</a>
* <td><code>1996</code>; <code>96</code>
* <tr>
- * <td><code>Y</code>
+ * <th scope="row"><code>Y</code>
* <td>Week year
* <td><a href="#year">Year</a>
* <td><code>2009</code>; <code>09</code>
* <tr>
- * <td><code>M</code>
+ * <th scope="row"><code>M</code>
* <td>Month in year (context sensitive)
* <td><a href="#month">Month</a>
* <td><code>July</code>; <code>Jul</code>; <code>07</code>
* <tr>
- * <td><code>L</code>
+ * <th scope="row"><code>L</code>
* <td>Month in year (standalone form)
* <td><a href="#month">Month</a>
* <td><code>July</code>; <code>Jul</code>; <code>07</code>
* <tr>
- * <td><code>w</code>
+ * <th scope="row"><code>w</code>
* <td>Week in year
* <td><a href="#number">Number</a>
* <td><code>27</code>
* <tr>
- * <td><code>W</code>
+ * <th scope="row"><code>W</code>
* <td>Week in month
* <td><a href="#number">Number</a>
* <td><code>2</code>
* <tr>
- * <td><code>D</code>
+ * <th scope="row"><code>D</code>
* <td>Day in year
* <td><a href="#number">Number</a>
* <td><code>189</code>
* <tr>
- * <td><code>d</code>
+ * <th scope="row"><code>d</code>
* <td>Day in month
* <td><a href="#number">Number</a>
* <td><code>10</code>
* <tr>
- * <td><code>F</code>
+ * <th scope="row"><code>F</code>
* <td>Day of week in month
* <td><a href="#number">Number</a>
* <td><code>2</code>
* <tr>
- * <td><code>E</code>
+ * <th scope="row"><code>E</code>
* <td>Day name in week
* <td><a href="#text">Text</a>
* <td><code>Tuesday</code>; <code>Tue</code>
* <tr>
- * <td><code>u</code>
+ * <th scope="row"><code>u</code>
* <td>Day number of week (1 = Monday, ..., 7 = Sunday)
* <td><a href="#number">Number</a>
* <td><code>1</code>
* <tr>
- * <td><code>a</code>
+ * <th scope="row"><code>a</code>
* <td>Am/pm marker
* <td><a href="#text">Text</a>
* <td><code>PM</code>
* <tr>
- * <td><code>H</code>
+ * <th scope="row"><code>H</code>
* <td>Hour in day (0-23)
* <td><a href="#number">Number</a>
* <td><code>0</code>
* <tr>
- * <td><code>k</code>
+ * <th scope="row"><code>k</code>
* <td>Hour in day (1-24)
* <td><a href="#number">Number</a>
* <td><code>24</code>
* <tr>
- * <td><code>K</code>
+ * <th scope="row"><code>K</code>
* <td>Hour in am/pm (0-11)
* <td><a href="#number">Number</a>
* <td><code>0</code>
* <tr>
- * <td><code>h</code>
+ * <th scope="row"><code>h</code>
* <td>Hour in am/pm (1-12)
* <td><a href="#number">Number</a>
* <td><code>12</code>
* <tr>
- * <td><code>m</code>
+ * <th scope="row"><code>m</code>
* <td>Minute in hour
* <td><a href="#number">Number</a>
* <td><code>30</code>
* <tr>
- * <td><code>s</code>
+ * <th scope="row"><code>s</code>
* <td>Second in minute
* <td><a href="#number">Number</a>
* <td><code>55</code>
* <tr>
- * <td><code>S</code>
+ * <th scope="row"><code>S</code>
* <td>Millisecond
* <td><a href="#number">Number</a>
* <td><code>978</code>
* <tr>
- * <td><code>z</code>
+ * <th scope="row"><code>z</code>
* <td>Time zone
* <td><a href="#timezone">General time zone</a>
* <td><code>Pacific Standard Time</code>; <code>PST</code>; <code>GMT-08:00</code>
* <tr>
- * <td><code>Z</code>
+ * <th scope="row"><code>Z</code>
* <td>Time zone
* <td><a href="#rfc822timezone">RFC 822 time zone</a>
* <td><code>-0800</code>
* <tr>
- * <td><code>X</code>
+ * <th scope="row"><code>X</code>
* <td>Time zone
* <td><a href="#iso8601timezone">ISO 8601 time zone</a>
* <td><code>-08</code>; <code>-0800</code>; <code>-08:00</code>
@@ -379,42 +379,42 @@
* <caption style="display:none">Examples of date and time patterns interpreted in the U.S. locale</caption>
* <thead>
* <tr>
- * <th style="text-align:left">Date and Time Pattern
- * <th style="text-align:left">Result
+ * <th scope="col" style="text-align:left">Date and Time Pattern
+ * <th scope="col" style="text-align:left">Result
* </thead>
* <tbody>
* <tr>
- * <td><code>"yyyy.MM.dd G 'at' HH:mm:ss z"</code>
+ * <th scope="row"><code>"yyyy.MM.dd G 'at' HH:mm:ss z"</code>
* <td><code>2001.07.04 AD at 12:08:56 PDT</code>
* <tr>
- * <td><code>"EEE, MMM d, ''yy"</code>
+ * <th scope="row"><code>"EEE, MMM d, ''yy"</code>
* <td><code>Wed, Jul 4, '01</code>
* <tr>
- * <td><code>"h:mm a"</code>
+ * <th scope="row"><code>"h:mm a"</code>
* <td><code>12:08 PM</code>
* <tr>
- * <td><code>"hh 'o''clock' a, zzzz"</code>
+ * <th scope="row"><code>"hh 'o''clock' a, zzzz"</code>
* <td><code>12 o'clock PM, Pacific Daylight Time</code>
* <tr>
- * <td><code>"K:mm a, z"</code>
+ * <th scope="row"><code>"K:mm a, z"</code>
* <td><code>0:08 PM, PDT</code>
* <tr>
- * <td><code>"yyyyy.MMMMM.dd GGG hh:mm aaa"</code>
+ * <th scope="row"><code>"yyyyy.MMMMM.dd GGG hh:mm aaa"</code>
* <td><code>02001.July.04 AD 12:08 PM</code>
* <tr>
- * <td><code>"EEE, d MMM yyyy HH:mm:ss Z"</code>
+ * <th scope="row"><code>"EEE, d MMM yyyy HH:mm:ss Z"</code>
* <td><code>Wed, 4 Jul 2001 12:08:56 -0700</code>
* <tr>
- * <td><code>"yyMMddHHmmssZ"</code>
+ * <th scope="row"><code>"yyMMddHHmmssZ"</code>
* <td><code>010704120856-0700</code>
* <tr>
- * <td><code>"yyyy-MM-dd'T'HH:mm:ss.SSSZ"</code>
+ * <th scope="row"><code>"yyyy-MM-dd'T'HH:mm:ss.SSSZ"</code>
* <td><code>2001-07-04T12:08:56.235-0700</code>
* <tr>
- * <td><code>"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"</code>
+ * <th scope="row"><code>"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"</code>
* <td><code>2001-07-04T12:08:56.235-07:00</code>
* <tr>
- * <td><code>"YYYY-'W'ww-u"</code>
+ * <th scope="row"><code>"YYYY-'W'ww-u"</code>
* <td><code>2001-W27-3</code>
* </tbody>
* </table>
--- a/jdk/src/java.base/share/classes/java/time/OffsetDateTime.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/time/OffsetDateTime.java Thu Jul 20 09:38:13 2017 -0700
@@ -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
@@ -100,7 +100,7 @@
* {@code OffsetDateTime} is an immutable representation of a date-time with an offset.
* This class stores all date and time fields, to a precision of nanoseconds,
* as well as the offset from UTC/Greenwich. For example, the value
- * "2nd October 2007 at 13:45.30.123456789 +02:00" can be stored in an {@code OffsetDateTime}.
+ * "2nd October 2007 at 13:45:30.123456789 +02:00" can be stored in an {@code OffsetDateTime}.
* <p>
* {@code OffsetDateTime}, {@link java.time.ZonedDateTime} and {@link java.time.Instant} all store an instant
* on the time-line to nanosecond precision.
--- a/jdk/src/java.base/share/classes/java/time/OffsetTime.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/time/OffsetTime.java Thu Jul 20 09:38:13 2017 -0700
@@ -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
@@ -100,7 +100,7 @@
* viewed as hour-minute-second-offset.
* This class stores all time fields, to a precision of nanoseconds,
* as well as a zone offset.
- * For example, the value "13:45.30.123456789+02:00" can be stored
+ * For example, the value "13:45:30.123456789+02:00" can be stored
* in an {@code OffsetTime}.
*
* <p>
--- a/jdk/src/java.base/share/classes/java/time/format/DateTimeFormatter.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/time/format/DateTimeFormatter.java Thu Jul 20 09:38:13 2017 -0700
@@ -154,103 +154,103 @@
* <caption>Predefined Formatters</caption>
* <thead>
* <tr>
- * <th style="text-align:left">Formatter</th>
- * <th style="text-align:left">Description</th>
- * <th style="text-align:left">Example</th>
+ * <th scope="col" style="text-align:left">Formatter</th>
+ * <th scope="col" style="text-align:left">Description</th>
+ * <th scope="col" style="text-align:left">Example</th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td>{@link #ofLocalizedDate ofLocalizedDate(dateStyle)} </td>
+ * <th scope="row">{@link #ofLocalizedDate ofLocalizedDate(dateStyle)} </th>
* <td> Formatter with date style from the locale </td>
* <td> '2011-12-03'</td>
* </tr>
* <tr>
- * <td> {@link #ofLocalizedTime ofLocalizedTime(timeStyle)} </td>
+ * <th scope="row"> {@link #ofLocalizedTime ofLocalizedTime(timeStyle)} </th>
* <td> Formatter with time style from the locale </td>
* <td> '10:15:30'</td>
* </tr>
* <tr>
- * <td> {@link #ofLocalizedDateTime ofLocalizedDateTime(dateTimeStyle)} </td>
+ * <th scope="row"> {@link #ofLocalizedDateTime ofLocalizedDateTime(dateTimeStyle)} </th>
* <td> Formatter with a style for date and time from the locale</td>
* <td> '3 Jun 2008 11:05:30'</td>
* </tr>
* <tr>
- * <td> {@link #ofLocalizedDateTime ofLocalizedDateTime(dateStyle,timeStyle)}
- * </td>
+ * <th scope="row"> {@link #ofLocalizedDateTime ofLocalizedDateTime(dateStyle,timeStyle)}
+ * </th>
* <td> Formatter with date and time styles from the locale </td>
* <td> '3 Jun 2008 11:05'</td>
* </tr>
* <tr>
- * <td> {@link #BASIC_ISO_DATE}</td>
+ * <th scope="row"> {@link #BASIC_ISO_DATE}</th>
* <td>Basic ISO date </td> <td>'20111203'</td>
* </tr>
* <tr>
- * <td> {@link #ISO_LOCAL_DATE}</td>
+ * <th scope="row"> {@link #ISO_LOCAL_DATE}</th>
* <td> ISO Local Date </td>
* <td>'2011-12-03'</td>
* </tr>
* <tr>
- * <td> {@link #ISO_OFFSET_DATE}</td>
+ * <th scope="row"> {@link #ISO_OFFSET_DATE}</th>
* <td> ISO Date with offset </td>
* <td>'2011-12-03+01:00'</td>
* </tr>
* <tr>
- * <td> {@link #ISO_DATE}</td>
+ * <th scope="row"> {@link #ISO_DATE}</th>
* <td> ISO Date with or without offset </td>
* <td> '2011-12-03+01:00'; '2011-12-03'</td>
* </tr>
* <tr>
- * <td> {@link #ISO_LOCAL_TIME}</td>
+ * <th scope="row"> {@link #ISO_LOCAL_TIME}</th>
* <td> Time without offset </td>
* <td>'10:15:30'</td>
* </tr>
* <tr>
- * <td> {@link #ISO_OFFSET_TIME}</td>
+ * <th scope="row"> {@link #ISO_OFFSET_TIME}</th>
* <td> Time with offset </td>
* <td>'10:15:30+01:00'</td>
* </tr>
* <tr>
- * <td> {@link #ISO_TIME}</td>
+ * <th scope="row"> {@link #ISO_TIME}</th>
* <td> Time with or without offset </td>
* <td>'10:15:30+01:00'; '10:15:30'</td>
* </tr>
* <tr>
- * <td> {@link #ISO_LOCAL_DATE_TIME}</td>
+ * <th scope="row"> {@link #ISO_LOCAL_DATE_TIME}</th>
* <td> ISO Local Date and Time </td>
* <td>'2011-12-03T10:15:30'</td>
* </tr>
* <tr>
- * <td> {@link #ISO_OFFSET_DATE_TIME}</td>
+ * <th scope="row"> {@link #ISO_OFFSET_DATE_TIME}</th>
* <td> Date Time with Offset
* </td><td>2011-12-03T10:15:30+01:00'</td>
* </tr>
* <tr>
- * <td> {@link #ISO_ZONED_DATE_TIME}</td>
+ * <th scope="row"> {@link #ISO_ZONED_DATE_TIME}</th>
* <td> Zoned Date Time </td>
* <td>'2011-12-03T10:15:30+01:00[Europe/Paris]'</td>
* </tr>
* <tr>
- * <td> {@link #ISO_DATE_TIME}</td>
+ * <th scope="row"> {@link #ISO_DATE_TIME}</th>
* <td> Date and time with ZoneId </td>
* <td>'2011-12-03T10:15:30+01:00[Europe/Paris]'</td>
* </tr>
* <tr>
- * <td> {@link #ISO_ORDINAL_DATE}</td>
+ * <th scope="row"> {@link #ISO_ORDINAL_DATE}</th>
* <td> Year and day of year </td>
* <td>'2012-337'</td>
* </tr>
* <tr>
- * <td> {@link #ISO_WEEK_DATE}</td>
+ * <th scope="row"> {@link #ISO_WEEK_DATE}</th>
* <td> Year and Week </td>
* <td>2012-W48-6'</td></tr>
* <tr>
- * <td> {@link #ISO_INSTANT}</td>
+ * <th scope="row"> {@link #ISO_INSTANT}</th>
* <td> Date and Time of an Instant </td>
* <td>'2011-12-03T10:15:30Z' </td>
* </tr>
* <tr>
- * <td> {@link #RFC_1123_DATE_TIME}</td>
+ * <th scope="row"> {@link #RFC_1123_DATE_TIME}</th>
* <td> RFC 1123 / RFC 822 </td>
* <td>'Tue, 3 Jun 2008 11:05:30 GMT'</td>
* </tr>
--- a/jdk/src/java.base/share/classes/java/util/Formatter.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Formatter.java Thu Jul 20 09:38:13 2017 -0700
@@ -293,12 +293,12 @@
* <table class="striped">
* <caption style="display:none">genConv</caption>
* <thead>
- * <tr><th style="vertical-align:bottom"> Conversion
- * <th style="vertical-align:bottom"> Argument Category
- * <th style="vertical-align:bottom"> Description
+ * <tr><th scope="col" style="vertical-align:bottom"> Conversion
+ * <th scope="col" style="vertical-align:bottom"> Argument Category
+ * <th scope="col" style="vertical-align:bottom"> Description
* </thead>
* <tbody>
- * <tr><td style="vertical-align:top"> {@code 'b'}, {@code 'B'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'b'}, {@code 'B'}
* <td style="vertical-align:top"> general
* <td> If the argument <i>arg</i> is {@code null}, then the result is
* "{@code false}". If <i>arg</i> is a {@code boolean} or {@link
@@ -306,64 +306,64 @@
* String#valueOf(boolean) String.valueOf(arg)}. Otherwise, the result is
* "true".
*
- * <tr><td style="vertical-align:top"> {@code 'h'}, {@code 'H'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'h'}, {@code 'H'}
* <td style="vertical-align:top"> general
* <td> The result is obtained by invoking
* {@code Integer.toHexString(arg.hashCode())}.
*
- * <tr><td style="vertical-align:top"> {@code 's'}, {@code 'S'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 's'}, {@code 'S'}
* <td style="vertical-align:top"> general
* <td> If <i>arg</i> implements {@link Formattable}, then
* {@link Formattable#formatTo arg.formatTo} is invoked. Otherwise, the
* result is obtained by invoking {@code arg.toString()}.
*
- * <tr><td style="vertical-align:top">{@code 'c'}, {@code 'C'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'c'}, {@code 'C'}
* <td style="vertical-align:top"> character
* <td> The result is a Unicode character
*
- * <tr><td style="vertical-align:top">{@code 'd'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'd'}
* <td style="vertical-align:top"> integral
* <td> The result is formatted as a decimal integer
*
- * <tr><td style="vertical-align:top">{@code 'o'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'o'}
* <td style="vertical-align:top"> integral
* <td> The result is formatted as an octal integer
*
- * <tr><td style="vertical-align:top">{@code 'x'}, {@code 'X'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'x'}, {@code 'X'}
* <td style="vertical-align:top"> integral
* <td> The result is formatted as a hexadecimal integer
*
- * <tr><td style="vertical-align:top">{@code 'e'}, {@code 'E'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'e'}, {@code 'E'}
* <td style="vertical-align:top"> floating point
* <td> The result is formatted as a decimal number in computerized
* scientific notation
*
- * <tr><td style="vertical-align:top">{@code 'f'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'f'}
* <td style="vertical-align:top"> floating point
* <td> The result is formatted as a decimal number
*
- * <tr><td style="vertical-align:top">{@code 'g'}, {@code 'G'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'g'}, {@code 'G'}
* <td style="vertical-align:top"> floating point
* <td> The result is formatted using computerized scientific notation or
* decimal format, depending on the precision and the value after rounding.
*
- * <tr><td style="vertical-align:top">{@code 'a'}, {@code 'A'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'a'}, {@code 'A'}
* <td style="vertical-align:top"> floating point
* <td> The result is formatted as a hexadecimal floating-point number with
* a significand and an exponent. This conversion is <b>not</b> supported
* for the {@code BigDecimal} type despite the latter's being in the
* <i>floating point</i> argument category.
*
- * <tr><td style="vertical-align:top">{@code 't'}, {@code 'T'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 't'}, {@code 'T'}
* <td style="vertical-align:top"> date/time
* <td> Prefix for date and time conversion characters. See <a
* href="#dt">Date/Time Conversions</a>.
*
- * <tr><td style="vertical-align:top">{@code '%'}
+ * <tr><th scope="row" style="vertical-align:top">{@code '%'}
* <td style="vertical-align:top"> percent
* <td> The result is a literal {@code '%'} (<code>'\u0025'</code>)
*
- * <tr><td style="vertical-align:top">{@code 'n'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'n'}
* <td style="vertical-align:top"> line separator
* <td> The result is the platform-specific line separator
*
@@ -387,44 +387,44 @@
* <table class="striped">
* <caption style="display:none">time</caption>
* <tbody>
- * <tr><td style="vertical-align:top"> {@code 'H'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'H'}
* <td> Hour of the day for the 24-hour clock, formatted as two digits with
* a leading zero as necessary i.e. {@code 00 - 23}.
*
- * <tr><td style="vertical-align:top">{@code 'I'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'I'}
* <td> Hour for the 12-hour clock, formatted as two digits with a leading
* zero as necessary, i.e. {@code 01 - 12}.
*
- * <tr><td style="vertical-align:top">{@code 'k'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'k'}
* <td> Hour of the day for the 24-hour clock, i.e. {@code 0 - 23}.
*
- * <tr><td style="vertical-align:top">{@code 'l'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'l'}
* <td> Hour for the 12-hour clock, i.e. {@code 1 - 12}.
*
- * <tr><td style="vertical-align:top">{@code 'M'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'M'}
* <td> Minute within the hour formatted as two digits with a leading zero
* as necessary, i.e. {@code 00 - 59}.
*
- * <tr><td style="vertical-align:top">{@code 'S'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'S'}
* <td> Seconds within the minute, formatted as two digits with a leading
* zero as necessary, i.e. {@code 00 - 60} ("{@code 60}" is a special
* value required to support leap seconds).
*
- * <tr><td style="vertical-align:top">{@code 'L'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'L'}
* <td> Millisecond within the second formatted as three digits with
* leading zeros as necessary, i.e. {@code 000 - 999}.
*
- * <tr><td style="vertical-align:top">{@code 'N'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'N'}
* <td> Nanosecond within the second, formatted as nine digits with leading
* zeros as necessary, i.e. {@code 000000000 - 999999999}.
*
- * <tr><td style="vertical-align:top">{@code 'p'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'p'}
* <td> Locale-specific {@linkplain
* java.text.DateFormatSymbols#getAmPmStrings morning or afternoon} marker
* in lower case, e.g."{@code am}" or "{@code pm}". Use of the conversion
* prefix {@code 'T'} forces this output to upper case.
*
- * <tr><td style="vertical-align:top">{@code 'z'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'z'}
* <td> <a href="http://www.ietf.org/rfc/rfc0822.txt">RFC 822</a>
* style numeric time zone offset from GMT, e.g. {@code -0800}. This
* value will be adjusted as necessary for Daylight Saving Time. For
@@ -432,7 +432,7 @@
* the {@linkplain TimeZone#getDefault() default time zone} for this
* instance of the Java virtual machine.
*
- * <tr><td style="vertical-align:top">{@code 'Z'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'Z'}
* <td> A string representing the abbreviation for the time zone. This
* value will be adjusted as necessary for Daylight Saving Time. For
* {@code long}, {@link Long}, and {@link Date} the time zone used is
@@ -440,12 +440,12 @@
* instance of the Java virtual machine. The Formatter's locale will
* supersede the locale of the argument (if any).
*
- * <tr><td style="vertical-align:top">{@code 's'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 's'}
* <td> Seconds since the beginning of the epoch starting at 1 January 1970
* {@code 00:00:00} UTC, i.e. {@code Long.MIN_VALUE/1000} to
* {@code Long.MAX_VALUE/1000}.
*
- * <tr><td style="vertical-align:top">{@code 'Q'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'Q'}
* <td> Milliseconds since the beginning of the epoch starting at 1 January
* 1970 {@code 00:00:00} UTC, i.e. {@code Long.MIN_VALUE} to
* {@code Long.MAX_VALUE}.
@@ -459,54 +459,54 @@
* <caption style="display:none">date</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top">{@code 'B'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'B'}
* <td> Locale-specific {@linkplain java.text.DateFormatSymbols#getMonths
* full month name}, e.g. {@code "January"}, {@code "February"}.
*
- * <tr><td style="vertical-align:top">{@code 'b'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'b'}
* <td> Locale-specific {@linkplain
* java.text.DateFormatSymbols#getShortMonths abbreviated month name},
* e.g. {@code "Jan"}, {@code "Feb"}.
*
- * <tr><td style="vertical-align:top">{@code 'h'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'h'}
* <td> Same as {@code 'b'}.
*
- * <tr><td style="vertical-align:top">{@code 'A'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'A'}
* <td> Locale-specific full name of the {@linkplain
* java.text.DateFormatSymbols#getWeekdays day of the week},
* e.g. {@code "Sunday"}, {@code "Monday"}
*
- * <tr><td style="vertical-align:top">{@code 'a'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'a'}
* <td> Locale-specific short name of the {@linkplain
* java.text.DateFormatSymbols#getShortWeekdays day of the week},
* e.g. {@code "Sun"}, {@code "Mon"}
*
- * <tr><td style="vertical-align:top">{@code 'C'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'C'}
* <td> Four-digit year divided by {@code 100}, formatted as two digits
* with leading zero as necessary, i.e. {@code 00 - 99}
*
- * <tr><td style="vertical-align:top">{@code 'Y'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'Y'}
* <td> Year, formatted as at least four digits with leading zeros as
* necessary, e.g. {@code 0092} equals {@code 92} CE for the Gregorian
* calendar.
*
- * <tr><td style="vertical-align:top">{@code 'y'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'y'}
* <td> Last two digits of the year, formatted with leading zeros as
* necessary, i.e. {@code 00 - 99}.
*
- * <tr><td style="vertical-align:top">{@code 'j'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'j'}
* <td> Day of year, formatted as three digits with leading zeros as
* necessary, e.g. {@code 001 - 366} for the Gregorian calendar.
*
- * <tr><td style="vertical-align:top">{@code 'm'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'm'}
* <td> Month, formatted as two digits with leading zeros as necessary,
* i.e. {@code 01 - 13}.
*
- * <tr><td style="vertical-align:top">{@code 'd'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'd'}
* <td> Day of month, formatted as two digits with leading zeros as
* necessary, i.e. {@code 01 - 31}
*
- * <tr><td style="vertical-align:top">{@code 'e'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'e'}
* <td> Day of month, formatted as two digits, i.e. {@code 1 - 31}.
*
* </tbody>
@@ -519,25 +519,25 @@
* <caption style="display:none">composites</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top">{@code 'R'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'R'}
* <td> Time formatted for the 24-hour clock as {@code "%tH:%tM"}
*
- * <tr><td style="vertical-align:top">{@code 'T'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'T'}
* <td> Time formatted for the 24-hour clock as {@code "%tH:%tM:%tS"}.
*
- * <tr><td style="vertical-align:top">{@code 'r'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'r'}
* <td> Time formatted for the 12-hour clock as {@code "%tI:%tM:%tS %Tp"}.
* The location of the morning or afternoon marker ({@code '%Tp'}) may be
* locale-dependent.
*
- * <tr><td style="vertical-align:top">{@code 'D'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'D'}
* <td> Date formatted as {@code "%tm/%td/%ty"}.
*
- * <tr><td style="vertical-align:top">{@code 'F'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'F'}
* <td> <a href="http://www.w3.org/TR/NOTE-datetime">ISO 8601</a>
* complete date formatted as {@code "%tY-%tm-%td"}.
*
- * <tr><td style="vertical-align:top">{@code 'c'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'c'}
* <td> Date and time formatted as {@code "%ta %tb %td %tT %tZ %tY"},
* e.g. {@code "Sun Jul 20 16:17:00 EDT 1969"}.
*
@@ -555,49 +555,49 @@
* <table class="striped">
* <caption style="display:none">genConv</caption>
* <thead>
- * <tr><th style="vertical-align:bottom"> Flag <th style="vertical-align:bottom"> General
- * <th style="vertical-align:bottom"> Character <th style="vertical-align:bottom"> Integral
- * <th style="vertical-align:bottom"> Floating Point
- * <th style="vertical-align:bottom"> Date/Time
- * <th style="vertical-align:bottom"> Description
+ * <tr><th scope="col" style="vertical-align:bottom"> Flag <th scope="col" style="vertical-align:bottom"> General
+ * <th scope="col" style="vertical-align:bottom"> Character <th scope="col" style="vertical-align:bottom"> Integral
+ * <th scope="col" style="vertical-align:bottom"> Floating Point
+ * <th scope="col" style="vertical-align:bottom"> Date/Time
+ * <th scope="col" style="vertical-align:bottom"> Description
* </thead>
* <tbody>
- * <tr><td> '-' <td style="text-align:center; vertical-align:top"> y
+ * <tr><th scope="row"> '-' <td style="text-align:center; vertical-align:top"> y
* <td style="text-align:center; vertical-align:top"> y
* <td style="text-align:center; vertical-align:top"> y
* <td style="text-align:center; vertical-align:top"> y
* <td style="text-align:center; vertical-align:top"> y
* <td> The result will be left-justified.
*
- * <tr><td> '#' <td style="text-align:center; vertical-align:top"> y<sup>1</sup>
+ * <tr><th scope="row"> '#' <td style="text-align:center; vertical-align:top"> y<sup>1</sup>
* <td style="text-align:center; vertical-align:top"> -
* <td style="text-align:center; vertical-align:top"> y<sup>3</sup>
* <td style="text-align:center; vertical-align:top"> y
* <td style="text-align:center; vertical-align:top"> -
* <td> The result should use a conversion-dependent alternate form
*
- * <tr><td> '+' <td style="text-align:center; vertical-align:top"> -
+ * <tr><th scope="row"> '+' <td style="text-align:center; vertical-align:top"> -
* <td style="text-align:center; vertical-align:top"> -
* <td style="text-align:center; vertical-align:top"> y<sup>4</sup>
* <td style="text-align:center; vertical-align:top"> y
* <td style="text-align:center; vertical-align:top"> -
* <td> The result will always include a sign
*
- * <tr><td> ' ' <td style="text-align:center; vertical-align:top"> -
+ * <tr><th scope="row"> ' ' <td style="text-align:center; vertical-align:top"> -
* <td style="text-align:center; vertical-align:top"> -
* <td style="text-align:center; vertical-align:top"> y<sup>4</sup>
* <td style="text-align:center; vertical-align:top"> y
* <td style="text-align:center; vertical-align:top"> -
* <td> The result will include a leading space for positive values
*
- * <tr><td> '0' <td style="text-align:center; vertical-align:top"> -
+ * <tr><th scope="row"> '0' <td style="text-align:center; vertical-align:top"> -
* <td style="text-align:center; vertical-align:top"> -
* <td style="text-align:center; vertical-align:top"> y
* <td style="text-align:center; vertical-align:top"> y
* <td style="text-align:center; vertical-align:top"> -
* <td> The result will be zero-padded
*
- * <tr><td> ',' <td style="text-align:center; vertical-align:top"> -
+ * <tr><th scope="row"> ',' <td style="text-align:center; vertical-align:top"> -
* <td style="text-align:center; vertical-align:top"> -
* <td style="text-align:center; vertical-align:top"> y<sup>2</sup>
* <td style="text-align:center; vertical-align:top"> y<sup>5</sup>
@@ -605,7 +605,7 @@
* <td> The result will include locale-specific {@linkplain
* java.text.DecimalFormatSymbols#getGroupingSeparator grouping separators}
*
- * <tr><td> '(' <td style="text-align:center; vertical-align:top"> -
+ * <tr><th scope="row"> '(' <td style="text-align:center; vertical-align:top"> -
* <td style="text-align:center; vertical-align:top"> -
* <td style="text-align:center; vertical-align:top"> y<sup>4</sup>
* <td style="text-align:center; vertical-align:top"> y<sup>5</sup>
@@ -723,7 +723,7 @@
* <caption style="display:none">dgConv</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top"> {@code 'b'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'b'}
* <td style="vertical-align:top"> <code>'\u0062'</code>
* <td> Produces either "{@code true}" or "{@code false}" as returned by
* {@link Boolean#toString(boolean)}.
@@ -737,11 +737,11 @@
* <p> If the {@code '#'} flag is given, then a {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'B'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'B'}
* <td style="vertical-align:top"> <code>'\u0042'</code>
* <td> The upper-case variant of {@code 'b'}.
*
- * <tr><td style="vertical-align:top"> {@code 'h'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'h'}
* <td style="vertical-align:top"> <code>'\u0068'</code>
* <td> Produces a string representing the hash code value of the object.
*
@@ -751,11 +751,11 @@
* <p> If the {@code '#'} flag is given, then a {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'H'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'H'}
* <td style="vertical-align:top"> <code>'\u0048'</code>
* <td> The upper-case variant of {@code 'h'}.
*
- * <tr><td style="vertical-align:top"> {@code 's'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 's'}
* <td style="vertical-align:top"> <code>'\u0073'</code>
* <td> Produces a string.
*
@@ -768,7 +768,7 @@
* Formattable} , then a {@link FormatFlagsConversionMismatchException}
* will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'S'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'S'}
* <td style="vertical-align:top"> <code>'\u0053'</code>
* <td> The upper-case variant of {@code 's'}.
*
@@ -781,7 +781,7 @@
* <caption style="display:none">dFlags</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top"> {@code '-'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code '-'}
* <td style="vertical-align:top"> <code>'\u002d'</code>
* <td> Left justifies the output. Spaces (<code>'\u0020'</code>) will be
* added at the end of the converted value as required to fill the minimum
@@ -789,7 +789,7 @@
* MissingFormatWidthException} will be thrown. If this flag is not given
* then the output will be right-justified.
*
- * <tr><td style="vertical-align:top"> {@code '#'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code '#'}
* <td style="vertical-align:top"> <code>'\u0023'</code>
* <td> Requires the output use an alternate form. The definition of the
* form is specified by the conversion.
@@ -825,7 +825,7 @@
* <caption style="display:none">charConv</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top"> {@code 'c'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'c'}
* <td style="vertical-align:top"> <code>'\u0063'</code>
* <td> Formats the argument as a Unicode character as described in <a
* href="../lang/Character.html#unicode">Unicode Character
@@ -835,7 +835,7 @@
* <p> If the {@code '#'} flag is given, then a {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'C'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'C'}
* <td style="vertical-align:top"> <code>'\u0043'</code>
* <td> The upper-case variant of {@code 'c'}.
*
@@ -929,7 +929,7 @@
* <caption style="display:none">IntConv</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top"> {@code 'd'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'd'}
* <td style="vertical-align:top"> <code>'\u0064'</code>
* <td> Formats the argument as a decimal integer. The <a
* href="#L10nAlgorithm">localization algorithm</a> is applied.
@@ -940,7 +940,7 @@
* <p> If the {@code '#'} flag is given then a {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'o'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'o'}
* <td style="vertical-align:top"> <code>'\u006f'</code>
* <td> Formats the argument as an integer in base eight. No localization
* is applied.
@@ -962,7 +962,7 @@
* are given then a {@link FormatFlagsConversionMismatchException} will be
* thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'x'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'x'}
* <td style="vertical-align:top"> <code>'\u0078'</code>
* <td> Formats the argument as an integer in base sixteen. No
* localization is applied.
@@ -985,7 +985,7 @@
* {@code ','} flags are given then a {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'X'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'X'}
* <td style="vertical-align:top"> <code>'\u0058'</code>
* <td> The upper-case variant of {@code 'x'}. The entire string
* representing the number will be converted to {@linkplain
@@ -1012,7 +1012,7 @@
* <caption style="display:none">intFlags</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top"> {@code '+'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code '+'}
* <td style="vertical-align:top"> <code>'\u002b'</code>
* <td> Requires the output to include a positive sign for all positive
* numbers. If this flag is not given then only negative values will
@@ -1021,7 +1021,7 @@
* <p> If both the {@code '+'} and <code>' '</code> flags are given
* then an {@link IllegalFormatFlagsException} will be thrown.
*
- * <tr><td style="vertical-align:top"> <code>' '</code>
+ * <tr><th scope="row" style="vertical-align:top"> <code>' '</code>
* <td style="vertical-align:top"> <code>'\u0020'</code>
* <td> Requires the output to include a single extra space
* (<code>'\u0020'</code>) for non-negative values.
@@ -1029,7 +1029,7 @@
* <p> If both the {@code '+'} and <code>' '</code> flags are given
* then an {@link IllegalFormatFlagsException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code '0'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code '0'}
* <td style="vertical-align:top"> <code>'\u0030'</code>
* <td> Requires the output to be padded with leading {@linkplain
* java.text.DecimalFormatSymbols#getZeroDigit zeros} to the minimum field
@@ -1040,14 +1040,14 @@
* <p> If both the {@code '-'} and {@code '0'} flags are given then an
* {@link IllegalFormatFlagsException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code ','}
+ * <tr><th scope="row" style="vertical-align:top"> {@code ','}
* <td style="vertical-align:top"> <code>'\u002c'</code>
* <td> Requires the output to include the locale-specific {@linkplain
* java.text.DecimalFormatSymbols#getGroupingSeparator group separators} as
* described in the <a href="#L10nGroup">"group" section</a> of the
* localization algorithm.
*
- * <tr><td style="vertical-align:top"> {@code '('}
+ * <tr><th scope="row" style="vertical-align:top"> {@code '('}
* <td style="vertical-align:top"> <code>'\u0028'</code>
* <td> Requires the output to prepend a {@code '('}
* (<code>'\u0028'</code>) and append a {@code ')'}
@@ -1093,7 +1093,7 @@
* <caption style="display:none">bIntConv</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top"> {@code 'd'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'd'}
* <td style="vertical-align:top"> <code>'\u0064'</code>
* <td> Requires the output to be formatted as a decimal integer. The <a
* href="#L10nAlgorithm">localization algorithm</a> is applied.
@@ -1101,7 +1101,7 @@
* <p> If the {@code '#'} flag is given {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'o'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'o'}
* <td style="vertical-align:top"> <code>'\u006f'</code>
* <td> Requires the output to be formatted as an integer in base eight.
* No localization is applied.
@@ -1124,7 +1124,7 @@
* <p> If the {@code ','} flag is given then a {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'x'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'x'}
* <td style="vertical-align:top"> <code>'\u0078'</code>
* <td> Requires the output to be formatted as an integer in base
* sixteen. No localization is applied.
@@ -1148,7 +1148,7 @@
* <p> If the {@code ','} flag is given then a {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'X'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'X'}
* <td style="vertical-align:top"> <code>'\u0058'</code>
* <td> The upper-case variant of {@code 'x'}. The entire string
* representing the number will be converted to {@linkplain
@@ -1190,7 +1190,7 @@
* <caption style="display:none">floatConv</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top"> {@code 'e'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'e'}
* <td style="vertical-align:top"> <code>'\u0065'</code>
* <td> Requires the output to be formatted using <a
* id="scientific">computerized scientific notation</a>. The <a
@@ -1238,12 +1238,12 @@
* <p>If the {@code ','} flag is given, then an {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'E'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'E'}
* <td style="vertical-align:top"> <code>'\u0045'</code>
* <td> The upper-case variant of {@code 'e'}. The exponent symbol
* will be {@code 'E'} (<code>'\u0045'</code>).
*
- * <tr><td style="vertical-align:top"> {@code 'g'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'g'}
* <td style="vertical-align:top"> <code>'\u0067'</code>
* <td> Requires the output to be formatted in general scientific notation
* as described below. The <a href="#L10nAlgorithm">localization
@@ -1268,11 +1268,11 @@
* <p> If the {@code '#'} flag is given then an {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'G'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'G'}
* <td style="vertical-align:top"> <code>'\u0047'</code>
* <td> The upper-case variant of {@code 'g'}.
*
- * <tr><td style="vertical-align:top"> {@code 'f'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'f'}
* <td style="vertical-align:top"> <code>'\u0066'</code>
* <td> Requires the output to be formatted using <a id="decimal">decimal
* format</a>. The <a href="#L10nAlgorithm">localization algorithm</a> is
@@ -1304,7 +1304,7 @@
* Float#toString(float)} or {@link Double#toString(double)} as
* appropriate.
*
- * <tr><td style="vertical-align:top"> {@code 'a'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'a'}
* <td style="vertical-align:top"> <code>'\u0061'</code>
* <td> Requires the output to be formatted in hexadecimal exponential
* form. No localization is applied.
@@ -1357,7 +1357,7 @@
* <p> If the {@code '('} or {@code ','} flags are given, then a {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'A'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'A'}
* <td style="vertical-align:top"> <code>'\u0041'</code>
* <td> The upper-case variant of {@code 'a'}. The entire string
* representing the number will be converted to upper case including the
@@ -1427,7 +1427,7 @@
* <caption style="display:none">floatConv</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top"> {@code 'e'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'e'}
* <td style="vertical-align:top"> <code>'\u0065'</code>
* <td> Requires the output to be formatted using <a
* id="bscientific">computerized scientific notation</a>. The <a
@@ -1469,12 +1469,12 @@
* <p> If the {@code ','} flag is given, then an {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'E'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'E'}
* <td style="vertical-align:top"> <code>'\u0045'</code>
* <td> The upper-case variant of {@code 'e'}. The exponent symbol
* will be {@code 'E'} (<code>'\u0045'</code>).
*
- * <tr><td style="vertical-align:top"> {@code 'g'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'g'}
* <td style="vertical-align:top"> <code>'\u0067'</code>
* <td> Requires the output to be formatted in general scientific notation
* as described below. The <a href="#L10nAlgorithm">localization
@@ -1499,11 +1499,11 @@
* <p> If the {@code '#'} flag is given then an {@link
* FormatFlagsConversionMismatchException} will be thrown.
*
- * <tr><td style="vertical-align:top"> {@code 'G'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'G'}
* <td style="vertical-align:top"> <code>'\u0047'</code>
* <td> The upper-case variant of {@code 'g'}.
*
- * <tr><td style="vertical-align:top"> {@code 'f'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'f'}
* <td style="vertical-align:top"> <code>'\u0066'</code>
* <td> Requires the output to be formatted using <a id="bdecimal">decimal
* format</a>. The <a href="#L10nAlgorithm">localization algorithm</a> is
@@ -1554,10 +1554,10 @@
* <caption style="display:none">DTConv</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top"> {@code 't'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 't'}
* <td style="vertical-align:top"> <code>'\u0074'</code>
* <td> Prefix for date and time conversion characters.
- * <tr><td style="vertical-align:top"> {@code 'T'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'T'}
* <td style="vertical-align:top"> <code>'\u0054'</code>
* <td> The upper-case variant of {@code 't'}.
*
@@ -1577,52 +1577,52 @@
* <caption style="display:none">time</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top"> {@code 'H'}
+ * <tr><th scope="row" style="vertical-align:top"> {@code 'H'}
* <td style="vertical-align:top"> <code>'\u0048'</code>
* <td> Hour of the day for the 24-hour clock, formatted as two digits with
* a leading zero as necessary i.e. {@code 00 - 23}. {@code 00}
* corresponds to midnight.
*
- * <tr><td style="vertical-align:top">{@code 'I'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'I'}
* <td style="vertical-align:top"> <code>'\u0049'</code>
* <td> Hour for the 12-hour clock, formatted as two digits with a leading
* zero as necessary, i.e. {@code 01 - 12}. {@code 01} corresponds to
* one o'clock (either morning or afternoon).
*
- * <tr><td style="vertical-align:top">{@code 'k'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'k'}
* <td style="vertical-align:top"> <code>'\u006b'</code>
* <td> Hour of the day for the 24-hour clock, i.e. {@code 0 - 23}.
* {@code 0} corresponds to midnight.
*
- * <tr><td style="vertical-align:top">{@code 'l'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'l'}
* <td style="vertical-align:top"> <code>'\u006c'</code>
* <td> Hour for the 12-hour clock, i.e. {@code 1 - 12}. {@code 1}
* corresponds to one o'clock (either morning or afternoon).
*
- * <tr><td style="vertical-align:top">{@code 'M'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'M'}
* <td style="vertical-align:top"> <code>'\u004d'</code>
* <td> Minute within the hour formatted as two digits with a leading zero
* as necessary, i.e. {@code 00 - 59}.
*
- * <tr><td style="vertical-align:top">{@code 'S'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'S'}
* <td style="vertical-align:top"> <code>'\u0053'</code>
* <td> Seconds within the minute, formatted as two digits with a leading
* zero as necessary, i.e. {@code 00 - 60} ("{@code 60}" is a special
* value required to support leap seconds).
*
- * <tr><td style="vertical-align:top">{@code 'L'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'L'}
* <td style="vertical-align:top"> <code>'\u004c'</code>
* <td> Millisecond within the second formatted as three digits with
* leading zeros as necessary, i.e. {@code 000 - 999}.
*
- * <tr><td style="vertical-align:top">{@code 'N'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'N'}
* <td style="vertical-align:top"> <code>'\u004e'</code>
* <td> Nanosecond within the second, formatted as nine digits with leading
* zeros as necessary, i.e. {@code 000000000 - 999999999}. The precision
* of this value is limited by the resolution of the underlying operating
* system or hardware.
*
- * <tr><td style="vertical-align:top">{@code 'p'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'p'}
* <td style="vertical-align:top"> <code>'\u0070'</code>
* <td> Locale-specific {@linkplain
* java.text.DateFormatSymbols#getAmPmStrings morning or afternoon} marker
@@ -1632,7 +1632,7 @@
* GNU {@code date} and POSIX {@code strftime(3c)} which produce
* upper-case output.)
*
- * <tr><td style="vertical-align:top">{@code 'z'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'z'}
* <td style="vertical-align:top"> <code>'\u007a'</code>
* <td> <a href="http://www.ietf.org/rfc/rfc0822.txt">RFC 822</a>
* style numeric time zone offset from GMT, e.g. {@code -0800}. This
@@ -1641,7 +1641,7 @@
* the {@linkplain TimeZone#getDefault() default time zone} for this
* instance of the Java virtual machine.
*
- * <tr><td style="vertical-align:top">{@code 'Z'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'Z'}
* <td style="vertical-align:top"> <code>'\u005a'</code>
* <td> A string representing the abbreviation for the time zone. This
* value will be adjusted as necessary for Daylight Saving Time. For
@@ -1650,13 +1650,13 @@
* instance of the Java virtual machine. The Formatter's locale will
* supersede the locale of the argument (if any).
*
- * <tr><td style="vertical-align:top">{@code 's'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 's'}
* <td style="vertical-align:top"> <code>'\u0073'</code>
* <td> Seconds since the beginning of the epoch starting at 1 January 1970
* {@code 00:00:00} UTC, i.e. {@code Long.MIN_VALUE/1000} to
* {@code Long.MAX_VALUE/1000}.
*
- * <tr><td style="vertical-align:top">{@code 'Q'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'Q'}
* <td style="vertical-align:top"> <code>'\u004f'</code>
* <td> Milliseconds since the beginning of the epoch starting at 1 January
* 1970 {@code 00:00:00} UTC, i.e. {@code Long.MIN_VALUE} to
@@ -1672,68 +1672,68 @@
* <caption style="display:none">date</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top">{@code 'B'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'B'}
* <td style="vertical-align:top"> <code>'\u0042'</code>
* <td> Locale-specific {@linkplain java.text.DateFormatSymbols#getMonths
* full month name}, e.g. {@code "January"}, {@code "February"}.
*
- * <tr><td style="vertical-align:top">{@code 'b'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'b'}
* <td style="vertical-align:top"> <code>'\u0062'</code>
* <td> Locale-specific {@linkplain
* java.text.DateFormatSymbols#getShortMonths abbreviated month name},
* e.g. {@code "Jan"}, {@code "Feb"}.
*
- * <tr><td style="vertical-align:top">{@code 'h'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'h'}
* <td style="vertical-align:top"> <code>'\u0068'</code>
* <td> Same as {@code 'b'}.
*
- * <tr><td style="vertical-align:top">{@code 'A'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'A'}
* <td style="vertical-align:top"> <code>'\u0041'</code>
* <td> Locale-specific full name of the {@linkplain
* java.text.DateFormatSymbols#getWeekdays day of the week},
* e.g. {@code "Sunday"}, {@code "Monday"}
*
- * <tr><td style="vertical-align:top">{@code 'a'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'a'}
* <td style="vertical-align:top"> <code>'\u0061'</code>
* <td> Locale-specific short name of the {@linkplain
* java.text.DateFormatSymbols#getShortWeekdays day of the week},
* e.g. {@code "Sun"}, {@code "Mon"}
*
- * <tr><td style="vertical-align:top">{@code 'C'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'C'}
* <td style="vertical-align:top"> <code>'\u0043'</code>
* <td> Four-digit year divided by {@code 100}, formatted as two digits
* with leading zero as necessary, i.e. {@code 00 - 99}
*
- * <tr><td style="vertical-align:top">{@code 'Y'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'Y'}
* <td style="vertical-align:top"> <code>'\u0059'</code> <td> Year, formatted to at least
* four digits with leading zeros as necessary, e.g. {@code 0092} equals
* {@code 92} CE for the Gregorian calendar.
*
- * <tr><td style="vertical-align:top">{@code 'y'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'y'}
* <td style="vertical-align:top"> <code>'\u0079'</code>
* <td> Last two digits of the year, formatted with leading zeros as
* necessary, i.e. {@code 00 - 99}.
*
- * <tr><td style="vertical-align:top">{@code 'j'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'j'}
* <td style="vertical-align:top"> <code>'\u006a'</code>
* <td> Day of year, formatted as three digits with leading zeros as
* necessary, e.g. {@code 001 - 366} for the Gregorian calendar.
* {@code 001} corresponds to the first day of the year.
*
- * <tr><td style="vertical-align:top">{@code 'm'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'm'}
* <td style="vertical-align:top"> <code>'\u006d'</code>
* <td> Month, formatted as two digits with leading zeros as necessary,
* i.e. {@code 01 - 13}, where "{@code 01}" is the first month of the
* year and ("{@code 13}" is a special value required to support lunar
* calendars).
*
- * <tr><td style="vertical-align:top">{@code 'd'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'd'}
* <td style="vertical-align:top"> <code>'\u0064'</code>
* <td> Day of month, formatted as two digits with leading zeros as
* necessary, i.e. {@code 01 - 31}, where "{@code 01}" is the first day
* of the month.
*
- * <tr><td style="vertical-align:top">{@code 'e'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'e'}
* <td style="vertical-align:top"> <code>'\u0065'</code>
* <td> Day of month, formatted as two digits, i.e. {@code 1 - 31} where
* "{@code 1}" is the first day of the month.
@@ -1748,30 +1748,30 @@
* <caption style="display:none">composites</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top">{@code 'R'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'R'}
* <td style="vertical-align:top"> <code>'\u0052'</code>
* <td> Time formatted for the 24-hour clock as {@code "%tH:%tM"}
*
- * <tr><td style="vertical-align:top">{@code 'T'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'T'}
* <td style="vertical-align:top"> <code>'\u0054'</code>
* <td> Time formatted for the 24-hour clock as {@code "%tH:%tM:%tS"}.
*
- * <tr><td style="vertical-align:top">{@code 'r'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'r'}
* <td style="vertical-align:top"> <code>'\u0072'</code>
* <td> Time formatted for the 12-hour clock as {@code "%tI:%tM:%tS
* %Tp"}. The location of the morning or afternoon marker
* ({@code '%Tp'}) may be locale-dependent.
*
- * <tr><td style="vertical-align:top">{@code 'D'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'D'}
* <td style="vertical-align:top"> <code>'\u0044'</code>
* <td> Date formatted as {@code "%tm/%td/%ty"}.
*
- * <tr><td style="vertical-align:top">{@code 'F'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'F'}
* <td style="vertical-align:top"> <code>'\u0046'</code>
* <td> <a href="http://www.w3.org/TR/NOTE-datetime">ISO 8601</a>
* complete date formatted as {@code "%tY-%tm-%td"}.
*
- * <tr><td style="vertical-align:top">{@code 'c'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'c'}
* <td style="vertical-align:top"> <code>'\u0063'</code>
* <td> Date and time formatted as {@code "%ta %tb %td %tT %tZ %tY"},
* e.g. {@code "Sun Jul 20 16:17:00 EDT 1969"}.
@@ -1802,7 +1802,7 @@
* <caption style="display:none">DTConv</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top">{@code '%'}
+ * <tr><th scope="row" style="vertical-align:top">{@code '%'}
* <td> The result is a literal {@code '%'} (<code>'\u0025'</code>)
*
* <p> The width is the minimum number of characters to
@@ -1830,7 +1830,7 @@
* <caption style="display:none">DTConv</caption>
* <tbody>
*
- * <tr><td style="vertical-align:top">{@code 'n'}
+ * <tr><th scope="row" style="vertical-align:top">{@code 'n'}
* <td> the platform-specific line separator as returned by {@link
* System#lineSeparator()}.
*
--- a/jdk/src/java.base/share/classes/java/util/GregorianCalendar.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/GregorianCalendar.java Thu Jul 20 09:38:13 2017 -0700
@@ -163,83 +163,83 @@
* <caption style="display:none">GregorianCalendar default field values</caption>
* <thead>
* <tr>
- * <th>
+ * <th scope="col">
* Field
* </th>
- * <th>
+ * <th scope="col">
Default Value
* </th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td>
+ * <th scope="row">
* <code>ERA</code>
- * </td>
+ * </th>
* <td>
* <code>AD</code>
* </td>
* </tr>
* <tr>
- * <td>
+ * <th scope="row">
* <code>YEAR</code>
- * </td>
+ * </th>
* <td>
* <code>1970</code>
* </td>
* </tr>
* <tr>
- * <td>
+ * <th scope="row">
* <code>MONTH</code>
- * </td>
+ * </th>
* <td>
* <code>JANUARY</code>
* </td>
* </tr>
* <tr>
- * <td>
+ * <th scope="row">
* <code>DAY_OF_MONTH</code>
- * </td>
+ * </th>
* <td>
* <code>1</code>
* </td>
* </tr>
* <tr>
- * <td>
+ * <th scope="row">
* <code>DAY_OF_WEEK</code>
- * </td>
+ * </th>
* <td>
* <code>the first day of week</code>
* </td>
* </tr>
* <tr>
- * <td>
+ * <th scope="row">
* <code>WEEK_OF_MONTH</code>
- * </td>
+ * </th>
* <td>
* <code>0</code>
* </td>
* </tr>
* <tr>
- * <td>
+ * <th scope="row">
* <code>DAY_OF_WEEK_IN_MONTH</code>
- * </td>
+ * </th>
* <td>
* <code>1</code>
* </td>
* </tr>
* <tr>
- * <td>
+ * <th scope="row">
* <code>AM_PM</code>
- * </td>
+ * </th>
* <td>
* <code>AM</code>
* </td>
* </tr>
* <tr>
- * <td>
+ * <th scope="row">
* <code>HOUR, HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND</code>
- * </td>
+ * </th>
* <td>
* <code>0</code>
* </td>
--- a/jdk/src/java.base/share/classes/java/util/Locale.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Locale.java Thu Jul 20 09:38:13 2017 -0700
@@ -1590,29 +1590,29 @@
* <table class="striped">
* <caption style="display:none">Grandfathered tags with canonical replacements</caption>
* <thead style="text-align:center">
- * <tr><th style="padding: 0 2px">grandfathered tag</th><th style="padding: 0 2px">modern replacement</th></tr>
+ * <tr><th scope="col" style="padding: 0 2px">grandfathered tag</th><th scope="col" style="padding: 0 2px">modern replacement</th></tr>
* </thead>
* <tbody style="text-align:center">
- * <tr><td>art-lojban</td><td>jbo</td></tr>
- * <tr><td>i-ami</td><td>ami</td></tr>
- * <tr><td>i-bnn</td><td>bnn</td></tr>
- * <tr><td>i-hak</td><td>hak</td></tr>
- * <tr><td>i-klingon</td><td>tlh</td></tr>
- * <tr><td>i-lux</td><td>lb</td></tr>
- * <tr><td>i-navajo</td><td>nv</td></tr>
- * <tr><td>i-pwn</td><td>pwn</td></tr>
- * <tr><td>i-tao</td><td>tao</td></tr>
- * <tr><td>i-tay</td><td>tay</td></tr>
- * <tr><td>i-tsu</td><td>tsu</td></tr>
- * <tr><td>no-bok</td><td>nb</td></tr>
- * <tr><td>no-nyn</td><td>nn</td></tr>
- * <tr><td>sgn-BE-FR</td><td>sfb</td></tr>
- * <tr><td>sgn-BE-NL</td><td>vgt</td></tr>
- * <tr><td>sgn-CH-DE</td><td>sgg</td></tr>
- * <tr><td>zh-guoyu</td><td>cmn</td></tr>
- * <tr><td>zh-hakka</td><td>hak</td></tr>
- * <tr><td>zh-min-nan</td><td>nan</td></tr>
- * <tr><td>zh-xiang</td><td>hsn</td></tr>
+ * <tr><th scope="row">art-lojban</th><td>jbo</td></tr>
+ * <tr><th scope="row">i-ami</th><td>ami</td></tr>
+ * <tr><th scope="row">i-bnn</th><td>bnn</td></tr>
+ * <tr><th scope="row">i-hak</th><td>hak</td></tr>
+ * <tr><th scope="row">i-klingon</th><td>tlh</td></tr>
+ * <tr><th scope="row">i-lux</th><td>lb</td></tr>
+ * <tr><th scope="row">i-navajo</th><td>nv</td></tr>
+ * <tr><th scope="row">i-pwn</th><td>pwn</td></tr>
+ * <tr><th scope="row">i-tao</th><td>tao</td></tr>
+ * <tr><th scope="row">i-tay</th><td>tay</td></tr>
+ * <tr><th scope="row">i-tsu</th><td>tsu</td></tr>
+ * <tr><th scope="row">no-bok</th><td>nb</td></tr>
+ * <tr><th scope="row">no-nyn</th><td>nn</td></tr>
+ * <tr><th scope="row">sgn-BE-FR</th><td>sfb</td></tr>
+ * <tr><th scope="row">sgn-BE-NL</th><td>vgt</td></tr>
+ * <tr><th scope="row">sgn-CH-DE</th><td>sgg</td></tr>
+ * <tr><th scope="row">zh-guoyu</th><td>cmn</td></tr>
+ * <tr><th scope="row">zh-hakka</th><td>hak</td></tr>
+ * <tr><th scope="row">zh-min-nan</th><td>nan</td></tr>
+ * <tr><th scope="row">zh-xiang</th><td>hsn</td></tr>
* </tbody>
* </table>
*
@@ -1622,15 +1622,15 @@
* <table class="striped">
* <caption style="display:none">Grandfathered tags with no modern replacement</caption>
* <thead style="text-align:center">
- * <tr><th style="padding: 0 2px">grandfathered tag</th><th style="padding: 0 2px">converts to</th></tr>
+ * <tr><th scope="col" style="padding: 0 2px">grandfathered tag</th><th scope="col" style="padding: 0 2px">converts to</th></tr>
* </thead>
* <tbody style="text-align:center">
- * <tr><td>cel-gaulish</td><td>xtg-x-cel-gaulish</td></tr>
- * <tr><td>en-GB-oed</td><td>en-GB-x-oed</td></tr>
- * <tr><td>i-default</td><td>en-x-i-default</td></tr>
- * <tr><td>i-enochian</td><td>und-x-i-enochian</td></tr>
- * <tr><td>i-mingo</td><td>see-x-i-mingo</td></tr>
- * <tr><td>zh-min</td><td>nan-x-zh-min</td></tr>
+ * <tr><th scope="row">cel-gaulish</th><td>xtg-x-cel-gaulish</td></tr>
+ * <tr><th scope="row">en-GB-oed</th><td>en-GB-x-oed</td></tr>
+ * <tr><th scope="row">i-default</th><td>en-x-i-default</td></tr>
+ * <tr><th scope="row">i-enochian</th><td>und-x-i-enochian</td></tr>
+ * <tr><th scope="row">i-mingo</th><td>see-x-i-mingo</td></tr>
+ * <tr><th scope="row">zh-min</th><td>nan-x-zh-min</td></tr>
* </tbody>
* </table>
*
@@ -2778,16 +2778,16 @@
* <caption>Filtering method behavior</caption>
* <thead>
* <tr>
- * <th>Filtering Mode</th>
- * <th>Language Priority List: {@code "de-DE"}</th>
- * <th>Language Priority List: {@code "de-*-DE"}</th>
+ * <th scope="col">Filtering Mode</th>
+ * <th scope="col">Language Priority List: {@code "de-DE"}</th>
+ * <th scope="col">Language Priority List: {@code "de-*-DE"}</th>
* </tr>
* </thead>
* <tbody>
* <tr>
- * <td style="vertical-align:top">
+ * <th scope="row" style="vertical-align:top">
* {@link FilteringMode#AUTOSELECT_FILTERING AUTOSELECT_FILTERING}
- * </td>
+ * </th>
* <td style="vertical-align:top">
* Performs <em>basic</em> filtering and returns {@code "de-DE"} and
* {@code "de-DE-1996"}.
@@ -2799,9 +2799,9 @@
* </td>
* </tr>
* <tr>
- * <td style="vertical-align:top">
+ * <th scope="row" style="vertical-align:top">
* {@link FilteringMode#EXTENDED_FILTERING EXTENDED_FILTERING}
- * </td>
+ * </th>
* <td style="vertical-align:top">
* Performs <em>extended</em> filtering and returns {@code "de-DE"},
* {@code "de-Deva-DE"}, {@code "de-DE-1996"}, {@code "de-Latn-DE"}, and
@@ -2810,9 +2810,9 @@
* <td style="vertical-align:top">Same as above.</td>
* </tr>
* <tr>
- * <td style="vertical-align:top">
+ * <th scope="row" style="vertical-align:top">
* {@link FilteringMode#IGNORE_EXTENDED_RANGES IGNORE_EXTENDED_RANGES}
- * </td>
+ * </th>
* <td style="vertical-align:top">
* Performs <em>basic</em> filtering and returns {@code "de-DE"} and
* {@code "de-DE-1996"}.
@@ -2823,9 +2823,9 @@
* </td>
* </tr>
* <tr>
- * <td style="vertical-align:top">
+ * <th scope="row" style="vertical-align:top">
* {@link FilteringMode#MAP_EXTENDED_RANGES MAP_EXTENDED_RANGES}
- * </td>
+ * </th>
* <td style="vertical-align:top">Same as above.</td>
* <td style="vertical-align:top">
* Performs <em>basic</em> filtering and returns {@code "de-DE"} and
@@ -2834,9 +2834,9 @@
* </td>
* </tr>
* <tr>
- * <td style="vertical-align:top">
+ * <th scope="row" style="vertical-align:top">
* {@link FilteringMode#REJECT_EXTENDED_RANGES REJECT_EXTENDED_RANGES}
- * </td>
+ * </th>
* <td style="vertical-align:top">Same as above.</td>
* <td style="vertical-align:top">
* Throws {@link IllegalArgumentException} because {@code "de-*-DE"} is
--- a/jdk/src/java.base/share/classes/java/util/regex/Pattern.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/regex/Pattern.java Thu Jul 20 09:38:13 2017 -0700
@@ -3887,9 +3887,13 @@
return next.match(matcher, i + 1, seq);
if (ch == 0x0D) {
i++;
- if (i < matcher.to && seq.charAt(i) == 0x0A &&
- next.match(matcher, i + 1, seq)) {
- return true;
+ if (i < matcher.to) {
+ if (seq.charAt(i) == 0x0A &&
+ next.match(matcher, i + 1, seq)) {
+ return true;
+ }
+ } else {
+ matcher.hitEnd = true;
}
return next.match(matcher, i, seq);
}
--- a/jdk/src/java.base/share/classes/javax/net/ssl/SSLPermission.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/SSLPermission.java Thu Jul 20 09:38:13 2017 -0700
@@ -48,15 +48,15 @@
* <caption style="display:none">permission name, what it allows, and associated risks</caption>
* <thead>
* <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
+ * <th scope="col">Permission Target Name</th>
+ * <th scope="col">What the Permission Allows</th>
+ * <th scope="col">Risks of Allowing this Permission</th>
* </tr>
* </thead>
*
* <tbody>
* <tr>
- * <td>setHostnameVerifier</td>
+ * <th scope="row">setHostnameVerifier</th>
* <td>The ability to set a callback which can decide whether to
* allow a mismatch between the host being connected to by
* an HttpsURLConnection and the common name field in
@@ -70,7 +70,7 @@
* </tr>
*
* <tr>
- * <td>getSSLSessionContext</td>
+ * <th scope="row">getSSLSessionContext</th>
* <td>The ability to get the SSLSessionContext of an SSLSession.
* </td>
* <td>Malicious code may monitor sessions which have been established
@@ -79,7 +79,7 @@
* </tr>
*
* <tr>
- * <td>setDefaultSSLContext</td>
+ * <th scope="row">setDefaultSSLContext</th>
* <td>The ability to set the default SSL context
* </td>
* <td>Malicious code can set a context that monitors the opening of
--- a/jdk/src/java.base/share/classes/sun/nio/cs/ISO_8859_1.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/sun/nio/cs/ISO_8859_1.java Thu Jul 20 09:38:13 2017 -0700
@@ -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
@@ -42,7 +42,7 @@
{
public ISO_8859_1() {
- super("ISO-8859-1", StandardCharsets.aliases_ISO_8859_1);
+ super(StandardCharsets.ISO_8859_1, StandardCharsets.aliases_ISO_8859_1);
}
public String historicalName() {
--- a/jdk/src/java.base/share/classes/sun/nio/cs/StandardCharsets.java.template Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/sun/nio/cs/StandardCharsets.java.template Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2015, 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.
*
@@ -51,6 +51,12 @@
private static final String packagePrefix = "sun.nio.cs";
+ public static final String US_ASCII = "US-ASCII";
+
+ public static final String ISO_8859_1 = "ISO-8859-1";
+
+ public static final String UTF_8 = "UTF-8";
+
public StandardCharsets() {
this.aliasMap = new Aliases();
this.classMap = new Classes();
@@ -103,13 +109,13 @@
// As all charset class names added to classMap are string literals we
// can check identity here as an optimization
- if (cln == "US_ASCII") {
+ if (cln == US_ASCII) {
return cache(csn, new US_ASCII());
}
- if (cln == "ISO_8859_1") {
+ if (cln == ISO_8859_1) {
return cache(csn, new ISO_8859_1());
}
- if (cln == "UTF_8") {
+ if (cln == UTF_8) {
return cache(csn, new UTF_8());
}
--- a/jdk/src/java.base/share/classes/sun/nio/cs/US_ASCII.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/sun/nio/cs/US_ASCII.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2004, 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
@@ -38,7 +38,7 @@
{
public US_ASCII() {
- super("US-ASCII", StandardCharsets.aliases_US_ASCII);
+ super(StandardCharsets.US_ASCII, StandardCharsets.aliases_US_ASCII);
}
public String historicalName() {
--- a/jdk/src/java.base/share/classes/sun/nio/cs/UTF_8.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/sun/nio/cs/UTF_8.java Thu Jul 20 09:38:13 2017 -0700
@@ -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
@@ -57,7 +57,7 @@
class UTF_8 extends Unicode
{
public UTF_8() {
- super("UTF-8", StandardCharsets.aliases_UTF_8);
+ super(StandardCharsets.UTF_8, StandardCharsets.aliases_UTF_8);
}
public String historicalName() {
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/AlgorithmChecker.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/AlgorithmChecker.java Thu Jul 20 09:38:13 2017 -0700
@@ -270,7 +270,7 @@
AlgorithmParameters currSigAlgParams = algorithmId.getParameters();
PublicKey currPubKey = cert.getPublicKey();
- String currSigAlg = ((X509Certificate)cert).getSigAlgName();
+ String currSigAlg = x509Cert.getSigAlgName();
// Check the signature algorithm and parameters against constraints.
if (!constraints.permits(SIGNATURE_PRIMITIVE_SET, currSigAlg,
--- a/jdk/src/java.base/share/classes/sun/security/util/ECUtil.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/util/ECUtil.java Thu Jul 20 09:38:13 2017 -0700
@@ -130,7 +130,7 @@
return (ECPrivateKey)keyFactory.generatePrivate(keySpec);
}
- private static AlgorithmParameters getECParameters(Provider p) {
+ public static AlgorithmParameters getECParameters(Provider p) {
try {
if (p != null) {
return AlgorithmParameters.getInstance("EC", p);
--- a/jdk/src/java.base/windows/native/libnio/ch/FileChannelImpl.c Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/windows/native/libnio/ch/FileChannelImpl.c Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2009, 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
@@ -170,8 +170,8 @@
{
HANDLE h = (HANDLE)(handleval(env, fdo));
if (h != INVALID_HANDLE_VALUE) {
- jint result = CloseHandle(h);
- if (result < 0) {
+ BOOL result = CloseHandle(h);
+ if (result == 0) {
JNU_ThrowIOExceptionWithLastError(env, "Close failed");
}
}
--- a/jdk/src/java.base/windows/native/libnio/ch/FileDispatcherImpl.c Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/windows/native/libnio/ch/FileDispatcherImpl.c Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2010, 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
@@ -334,7 +334,7 @@
FileEndOfFileInfo,
&eofInfo,
sizeof(eofInfo));
- if (result == FALSE) {
+ if (result == 0) {
JNU_ThrowIOExceptionWithLastError(env, "Truncation failed");
return IOS_THROWN;
}
@@ -411,7 +411,7 @@
long highPos = (long)(pos >> 32);
DWORD lowNumBytes = (DWORD)size;
DWORD highNumBytes = (DWORD)(size >> 32);
- jint result = 0;
+ BOOL result = 0;
OVERLAPPED o;
o.hEvent = 0;
o.Offset = lowPos;
@@ -422,7 +422,7 @@
if (error == ERROR_IO_PENDING) {
DWORD dwBytes;
result = GetOverlappedResult(h, &o, &dwBytes, TRUE);
- if (result == 0) {
+ if (result != 0) {
return;
}
error = GetLastError();
@@ -437,7 +437,7 @@
HANDLE h = (HANDLE)fd;
if (h != INVALID_HANDLE_VALUE) {
int result = CloseHandle(h);
- if (result < 0)
+ if (result == 0)
JNU_ThrowIOExceptionWithLastError(env, "Close failed");
}
}
--- a/jdk/src/java.base/windows/native/libnio/ch/WindowsAsynchronousFileChannelImpl.c Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.base/windows/native/libnio/ch/WindowsAsynchronousFileChannelImpl.c Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2010, 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
@@ -126,5 +126,8 @@
jlong handle)
{
HANDLE h = (HANDLE)jlong_to_ptr(handle);
- CloseHandle(h);
+ BOOL result = CloseHandle(h);
+ if (result == 0) {
+ JNU_ThrowIOExceptionWithLastError(env, "Close failed");
+ }
}
--- a/jdk/src/java.sql.rowset/share/classes/javax/sql/rowset/package.html Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.sql.rowset/share/classes/javax/sql/rowset/package.html Thu Jul 20 09:38:13 2017 -0700
@@ -177,13 +177,13 @@
<caption>Features in <code>BaseRowSet</code></caption>
<thead>
<tr>
- <th>Feature</th>
- <th>Details</th>
+ <th scope="col">Feature</th>
+ <th scope="col">Details</th>
</tr>
</thead>
<tbody>
<tr>
- <td>Properties</td>
+ <th scope="row">Properties</th>
<td>Provides standard JavaBeans property manipulation
mechanisms to allow applications to get and set <code>RowSet</code> command and
property values. Refer to the documentation of the <code>javax.sql.RowSet</code>
@@ -191,7 +191,7 @@
the standard <code>RowSet</code> properties.</td>
</tr>
<tr>
- <td>Event notification</td>
+ <th scope="row">Event notification</th>
<td>Provides standard JavaBeans event notifications
to registered event listeners. Refer to the documentation of <code>javax.sql.RowSetEvent</code>
interface (available in the JDBC 3.0 specification) for
@@ -199,12 +199,12 @@
by compliant implementations.</td>
</tr>
<tr>
- <td>Setters for a RowSet object's command</td>
+ <th scope="row">Setters for a RowSet object's command</th>
<td>Provides a complete set of setter methods
for setting RowSet command parameters.</td>
</tr>
<tr>
- <td>Streams</td>
+ <th scope="row">Streams</th>
<td>Provides fields for storing of stream instances
in addition to providing a set of constants for stream type designation.</td>
</tr>
--- a/jdk/src/java.sql/share/classes/java/sql/Connection.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.sql/share/classes/java/sql/Connection.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 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
@@ -1523,7 +1523,7 @@
*
* @implSpec
* The default implementation is a no-op.
- * <p>
+ *
* @apiNote
* This method is to be used by Connection pooling managers.
* <p>
--- a/jdk/src/java.sql/share/classes/java/sql/DriverManager.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.sql/share/classes/java/sql/DriverManager.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 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
@@ -63,7 +63,6 @@
* via the {@linkplain ServiceLoader#load service-provider loading} mechanism.
*</ul>
*
- *<P>
* @implNote
* {@code DriverManager} initialization is done lazily and looks up service
* providers using the thread context class loader. The drivers loaded and
--- a/jdk/src/java.sql/share/classes/java/sql/SQLPermission.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.sql/share/classes/java/sql/SQLPermission.java Thu Jul 20 09:38:13 2017 -0700
@@ -62,29 +62,29 @@
* <caption style="display:none">permission target name, what the permission allows, and associated risks</caption>
* <thead>
* <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
+ * <th scope="col">Permission Target Name</th>
+ * <th scope="col">What the Permission Allows</th>
+ * <th scope="col">Risks of Allowing this Permission</th>
* </tr>
* </thead>
*
* <tbody>
* <tr>
- * <td>setLog</td>
+ * <th scope="row">setLog</th>
* <td>Setting of the logging stream</td>
* <td>This is a dangerous permission to grant.
* The contents of the log may contain usernames and passwords,
* SQL statements, and SQL data.</td>
* </tr>
* <tr>
- * <td>callAbort</td>
+ * <th scope="row">callAbort</th>
* <td>Allows the invocation of the {@code Connection} method
* {@code abort}</td>
* <td>Permits an application to terminate a physical connection to a
* database.</td>
* </tr>
* <tr>
- * <td>setSyncFactory</td>
+ * <th scope="row">setSyncFactory</th>
* <td>Allows the invocation of the {@code SyncFactory} methods
* {@code setJNDIContext} and {@code setLogger}</td>
* <td>Permits an application to specify the JNDI context from which the
@@ -93,7 +93,7 @@
* </tr>
*
* <tr>
- * <td>setNetworkTimeout</td>
+ * <th scope="row">setNetworkTimeout</th>
* <td>Allows the invocation of the {@code Connection} method
* {@code setNetworkTimeout}</td>
* <td>Permits an application to specify the maximum period a
@@ -101,7 +101,7 @@
* objects created from the <code>Connection</code>
* will wait for the database to reply to any one request.</td>
* <tr>
- * <td>deregisterDriver</td>
+ * <th scope="row">deregisterDriver</th>
* <td>Allows the invocation of the {@code DriverManager}
* method {@code deregisterDriver}</td>
* <td>Permits an application to remove a JDBC driver from the list of
--- a/jdk/src/java.sql/share/classes/java/sql/Statement.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.sql/share/classes/java/sql/Statement.java Thu Jul 20 09:38:13 2017 -0700
@@ -1379,17 +1379,17 @@
* single quote within the string will be replaced by two single quotes.
*
* <blockquote>
- * <table class="striped" >
+ * <table class="striped">
* <caption>Examples of the conversion:</caption>
* <thead>
- * <tr><th>Value</th><th>Result</th></tr>
+ * <tr><th scope="col">Value</th><th scope="col">Result</th></tr>
* </thead>
* <tbody style="text-align:center">
- * <tr> <td>Hello</td> <td>'Hello'</td> </tr>
- * <tr> <td>G'Day</td> <td>'G''Day'</td> </tr>
- * <tr> <td>'G''Day'</td>
+ * <tr> <th scope="row">Hello</th> <td>'Hello'</td> </tr>
+ * <tr> <th scope="row">G'Day</th> <td>'G''Day'</td> </tr>
+ * <tr> <th scope="row">'G''Day'</th>
* <td>'''G''''Day'''</td> </tr>
- * <tr> <td>I'''M</td> <td>'I''''''M'</td>
+ * <tr> <th scope="row">I'''M</th> <td>'I''''''M'</td>
* </tr>
*
* </tbody>
@@ -1454,48 +1454,48 @@
* <caption>Examples of the conversion:</caption>
* <thead>
* <tr>
- * <th>identifier</th>
- * <th>alwaysQuote</th>
- * <th>Result</th></tr>
+ * <th scope="col">identifier</th>
+ * <th scope="col">alwaysQuote</th>
+ * <th scope="col">Result</th></tr>
* </thead>
* <tbody>
* <tr>
- * <td>Hello</td>
+ * <th scope="row">Hello</th>
* <td>false</td>
* <td>Hello</td>
* </tr>
* <tr>
- * <td>Hello</td>
+ * <th scope="row">Hello</th>
* <td>true</td>
* <td>"Hello"</td>
* </tr>
* <tr>
- * <td>G'Day</td>
+ * <th scope="row">G'Day</th>
* <td>false</td>
* <td>"G'Day"</td>
* </tr>
* <tr>
- * <td>"Bruce Wayne"</td>
+ * <th scope="row">"Bruce Wayne"</th>
* <td>false</td>
* <td>"Bruce Wayne"</td>
* </tr>
* <tr>
- * <td>"Bruce Wayne"</td>
+ * <th scope="row">"Bruce Wayne"</th>
* <td>true</td>
* <td>"Bruce Wayne"</td>
* </tr>
* <tr>
- * <td>GoodDay$</td>
+ * <th scope="row">GoodDay$</th>
* <td>false</td>
* <td>"GoodDay$"</td>
* </tr>
* <tr>
- * <td>Hello"World</td>
+ * <th scope="row">Hello"World</th>
* <td>false</td>
* <td>SQLException</td>
* </tr>
* <tr>
- * <td>"Hello"World"</td>
+ * <th scope="row">"Hello"World"</th>
* <td>false</td>
* <td>SQLException</td>
* </tr>
@@ -1554,33 +1554,33 @@
* <caption>Examples of the conversion:</caption>
* <thead>
* <tr>
- * <th>identifier</th>
- * <th>Simple Identifier</th>
+ * <th scope="col">identifier</th>
+ * <th scope="col">Simple Identifier</th>
* </thead>
*
* <tbody>
* <tr>
- * <td>Hello</td>
+ * <th scope="row">Hello</th>
* <td>true</td>
* </tr>
* <tr>
- * <td>G'Day</td>
+ * <th scope="row">G'Day</th>
* <td>false</td>
* </tr>
* <tr>
- * <td>"Bruce Wayne"</td>
+ * <th scope="row">"Bruce Wayne"</th>
* <td>false</td>
* </tr>
* <tr>
- * <td>GoodDay$</td>
+ * <th scope="row">GoodDay$</th>
* <td>false</td>
* </tr>
* <tr>
- * <td>Hello"World</td>
+ * <th scope="row">Hello"World</th>
* <td>false</td>
* </tr>
* <tr>
- * <td>"Hello"World"</td>
+ * <th scope="row">"Hello"World"</th>
* <td>false</td>
* </tr>
* </tbody>
@@ -1613,17 +1613,17 @@
* <caption>Examples of the conversion:</caption>
* <thead>
* <tr>
- * <th>Value</th>
- * <th>Result</th>
+ * <th scope="col">Value</th>
+ * <th scope="col">Result</th>
* </tr>
* </thead>
* <tbody>
- * <tr> <td>Hello</td> <td>N'Hello'</td> </tr>
- * <tr> <td>G'Day</td> <td>N'G''Day'</td> </tr>
- * <tr> <td>'G''Day'</td>
+ * <tr> <th scope="row">Hello</th> <td>N'Hello'</td> </tr>
+ * <tr> <th scope="row">G'Day</th> <td>N'G''Day'</td> </tr>
+ * <tr> <th scope="row">'G''Day'</th>
* <td>N'''G''''Day'''</td> </tr>
- * <tr> <td>I'''M</td> <td>N'I''''''M'</td>
- * <tr> <td>N'Hello'</td> <td>N'N''Hello'''</td> </tr>
+ * <tr> <th scope="row">I'''M</th> <td>N'I''''''M'</td>
+ * <tr> <th scope="row">N'Hello'</th> <td>N'N''Hello'''</td> </tr>
*
* </tbody>
* </table>
--- a/jdk/src/java.sql/share/classes/javax/sql/package.html Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.sql/share/classes/javax/sql/package.html Thu Jul 20 09:38:13 2017 -0700
@@ -280,7 +280,6 @@
The <code>RowSet</code> interface may be implemented in any number of
ways, and anyone may write an implementation. Developers are encouraged
to use their imaginations in coming up with new ways to use rowsets.
-<P>
<h2>Package Specification</h2>
--- a/jdk/src/jdk.crypto.ec/share/classes/sun/security/ec/ECKeyPairGenerator.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/jdk.crypto.ec/share/classes/sun/security/ec/ECKeyPairGenerator.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,12 +25,14 @@
package sun.security.ec;
+import java.io.IOException;
import java.math.BigInteger;
import java.security.*;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.ECGenParameterSpec;
import java.security.spec.ECParameterSpec;
import java.security.spec.ECPoint;
+import java.security.spec.InvalidParameterSpecException;
import sun.security.ec.ECPrivateKeyImpl;
import sun.security.ec.ECPublicKeyImpl;
@@ -85,17 +87,19 @@
public void initialize(AlgorithmParameterSpec params, SecureRandom random)
throws InvalidAlgorithmParameterException {
+ ECParameterSpec ecSpec = null;
+
if (params instanceof ECParameterSpec) {
- this.params = ECUtil.getECParameterSpec(null,
+ ecSpec = ECUtil.getECParameterSpec(null,
(ECParameterSpec)params);
- if (this.params == null) {
+ if (ecSpec == null) {
throw new InvalidAlgorithmParameterException(
"Unsupported curve: " + params);
}
} else if (params instanceof ECGenParameterSpec) {
String name = ((ECGenParameterSpec)params).getName();
- this.params = ECUtil.getECParameterSpec(null, name);
- if (this.params == null) {
+ ecSpec = ECUtil.getECParameterSpec(null, name);
+ if (ecSpec == null) {
throw new InvalidAlgorithmParameterException(
"Unknown curve name: " + name);
}
@@ -103,11 +107,36 @@
throw new InvalidAlgorithmParameterException(
"ECParameterSpec or ECGenParameterSpec required for EC");
}
+
+ // Not all known curves are supported by the native implementation
+ ensureCurveIsSupported(ecSpec);
+ this.params = ecSpec;
+
this.keySize =
((ECParameterSpec)this.params).getCurve().getField().getFieldSize();
this.random = random;
}
+ private static void ensureCurveIsSupported(ECParameterSpec ecSpec)
+ throws InvalidAlgorithmParameterException {
+
+ AlgorithmParameters ecParams = ECUtil.getECParameters(null);
+ byte[] encodedParams;
+ try {
+ ecParams.init(ecSpec);
+ encodedParams = ecParams.getEncoded();
+ } catch (InvalidParameterSpecException ex) {
+ throw new InvalidAlgorithmParameterException(
+ "Unsupported curve: " + ecSpec.toString());
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ if (!isCurveSupported(encodedParams)) {
+ throw new InvalidAlgorithmParameterException(
+ "Unsupported curve: " + ecParams.toString());
+ }
+ }
+
// generate the keypair. See JCA doc
@Override
public KeyPair generateKeyPair() {
@@ -159,6 +188,17 @@
this.keySize = keySize;
}
+ /**
+ * Checks whether the curve in the encoded parameters is supported by the
+ * native implementation.
+ *
+ * @param encodedParams encoded parameters in the same form accepted
+ * by generateECKeyPair
+ * @return true if and only if generateECKeyPair will succeed for
+ * the supplied parameters
+ */
+ private static native boolean isCurveSupported(byte[] encodedParams);
+
/*
* Generates the keypair and returns a 2-element array of encoding bytes.
* The first one is for the private key, the second for the public key.
--- a/jdk/src/jdk.crypto.ec/share/native/libsunec/ECC_JNI.cpp Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/jdk.crypto.ec/share/native/libsunec/ECC_JNI.cpp Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -90,6 +90,50 @@
/*
* Class: sun_security_ec_ECKeyPairGenerator
+ * Method: isCurveSupported
+ * Signature: ([B)Z
+ */
+JNIEXPORT jboolean
+JNICALL Java_sun_security_ec_ECKeyPairGenerator_isCurveSupported
+ (JNIEnv *env, jclass clazz, jbyteArray encodedParams)
+{
+ SECKEYECParams params_item;
+ ECParams *ecparams = NULL;
+ jboolean result = JNI_FALSE;
+
+ // The curve is supported if we can get parameters for it
+ params_item.len = env->GetArrayLength(encodedParams);
+ params_item.data =
+ (unsigned char *) env->GetByteArrayElements(encodedParams, 0);
+ if (params_item.data == NULL) {
+ goto cleanup;
+ }
+
+ // Fill a new ECParams using the supplied OID
+ if (EC_DecodeParams(¶ms_item, &ecparams, 0) != SECSuccess) {
+ /* bad curve OID */
+ goto cleanup;
+ }
+
+ // If we make it to here, then the curve is supported
+ result = JNI_TRUE;
+
+cleanup:
+ {
+ if (params_item.data) {
+ env->ReleaseByteArrayElements(encodedParams,
+ (jbyte *) params_item.data, JNI_ABORT);
+ }
+ if (ecparams) {
+ FreeECParams(ecparams, true);
+ }
+ }
+
+ return result;
+}
+
+/*
+ * Class: sun_security_ec_ECKeyPairGenerator
* Method: generateECKeyPair
* Signature: (I[B[B)[[B
*/
--- a/jdk/src/jdk.management.agent/share/classes/sun/management/jdp/JdpController.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/jdk.management.agent/share/classes/sun/management/jdp/JdpController.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 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
@@ -33,6 +33,7 @@
import java.lang.management.RuntimeMXBean;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.lang.UnsupportedOperationException;
import sun.management.VMManagement;
/**
@@ -132,19 +133,11 @@
}
// Get the process id of the current running Java process
- private static Integer getProcessId() {
+ private static Long getProcessId() {
try {
- // Get the current process id using a reflection hack
- RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
- Field jvm = runtime.getClass().getDeclaredField("jvm");
- jvm.setAccessible(true);
-
- VMManagement mgmt = (sun.management.VMManagement) jvm.get(runtime);
- Method pid_method = mgmt.getClass().getDeclaredMethod("getProcessId");
- pid_method.setAccessible(true);
- Integer pid = (Integer) pid_method.invoke(mgmt);
- return pid;
- } catch(Exception ex) {
+ // Get the current process id
+ return ProcessHandle.current().pid();
+ } catch(UnsupportedOperationException ex) {
return null;
}
}
@@ -206,7 +199,7 @@
packet.setBroadcastInterval(Integer.toString(pause));
// Set process id
- Integer pid = getProcessId();
+ Long pid = getProcessId();
if (pid != null) {
packet.setProcessId(pid.toString());
}
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -59,65 +59,70 @@
* {@link #setOption(SctpSocketOption,Object) setOption} method. An SCTP
* channel support the following options:
* <blockquote>
- * <table class="striped"><caption style="display:none">Socket options</caption>
+ * <table class="striped">
+ * <caption style="display:none">Socket options</caption>
+ * <thead>
* <tr>
- * <th>Option Name</th>
- * <th>Description</th>
+ * <th scope="col">Option Name</th>
+ * <th scope="col">Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_DISABLE_FRAGMENTS
- * SCTP_DISABLE_FRAGMENTS} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_DISABLE_FRAGMENTS
+ * SCTP_DISABLE_FRAGMENTS} </th>
* <td> Enables or disables message fragmentation </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
- * SCTP_EXPLICIT_COMPLETE} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
+ * SCTP_EXPLICIT_COMPLETE} </th>
* <td> Enables or disables explicit message completion </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
- * SCTP_FRAGMENT_INTERLEAVE} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
+ * SCTP_FRAGMENT_INTERLEAVE} </th>
* <td> Controls how the presentation of messages occur for the message
* receiver </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
- * SCTP_INIT_MAXSTREAMS} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
+ * SCTP_INIT_MAXSTREAMS} </th>
* <td> The maximum number of streams requested by the local endpoint during
* association initialization </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_NODELAY SCTP_NODELAY} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_NODELAY SCTP_NODELAY} </th>
* <td> Enables or disable a Nagle-like algorithm </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_PRIMARY_ADDR
- * SCTP_PRIMARY_ADDR} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_PRIMARY_ADDR
+ * SCTP_PRIMARY_ADDR} </th>
* <td> Requests that the local SCTP stack use the given peer address as the
* association primary </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_SET_PEER_PRIMARY_ADDR
- * SCTP_SET_PEER_PRIMARY_ADDR} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_SET_PEER_PRIMARY_ADDR
+ * SCTP_SET_PEER_PRIMARY_ADDR} </th>
* <td> Requests that the peer mark the enclosed address as the association
* primary </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SO_SNDBUF
- * SO_SNDBUF} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SO_SNDBUF
+ * SO_SNDBUF} </th>
* <td> The size of the socket send buffer </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SO_RCVBUF
- * SO_RCVBUF} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SO_RCVBUF
+ * SO_RCVBUF} </th>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SO_LINGER
- * SO_LINGER} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SO_LINGER
+ * SO_LINGER} </th>
* <td> Linger on close if data is present (when configured in blocking mode
* only) </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
* Additional (implementation specific) options may also be supported. The list
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpMultiChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpMultiChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -63,65 +63,70 @@
* {@link #setOption(SctpSocketOption,Object,Association) setOption} method. An
* {@code SctpMultiChannel} supports the following options:
* <blockquote>
- * <table class="striped"><caption style="display:none">Socket options</caption>
+ * <table class="striped">
+ * <caption style="display:none">Socket options</caption>
+ * <thead>
* <tr>
- * <th>Option Name</th>
- * <th>Description</th>
+ * <th scope="col">Option Name</th>
+ * <th scope="col">Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_DISABLE_FRAGMENTS
- * SCTP_DISABLE_FRAGMENTS} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_DISABLE_FRAGMENTS
+ * SCTP_DISABLE_FRAGMENTS} </th>
* <td> Enables or disables message fragmentation </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
- * SCTP_EXPLICIT_COMPLETE} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
+ * SCTP_EXPLICIT_COMPLETE} </th>
* <td> Enables or disables explicit message completion </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
- * SCTP_FRAGMENT_INTERLEAVE} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
+ * SCTP_FRAGMENT_INTERLEAVE} </th>
* <td> Controls how the presentation of messages occur for the message
* receiver </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
- * SCTP_INIT_MAXSTREAMS} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
+ * SCTP_INIT_MAXSTREAMS} </th>
* <td> The maximum number of streams requested by the local endpoint during
* association initialization </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_NODELAY SCTP_NODELAY} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_NODELAY SCTP_NODELAY} </th>
* <td> Enables or disable a Nagle-like algorithm </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_PRIMARY_ADDR
- * SCTP_PRIMARY_ADDR} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_PRIMARY_ADDR
+ * SCTP_PRIMARY_ADDR} </th>
* <td> Requests that the local SCTP stack use the given peer address as the
* association primary </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_SET_PEER_PRIMARY_ADDR
- * SCTP_SET_PEER_PRIMARY_ADDR} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_SET_PEER_PRIMARY_ADDR
+ * SCTP_SET_PEER_PRIMARY_ADDR} </th>
* <td> Requests that the peer mark the enclosed address as the association
* primary </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SO_SNDBUF
- * SO_SNDBUF} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SO_SNDBUF
+ * SO_SNDBUF} </th>
* <td> The size of the socket send buffer </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SO_RCVBUF
- * SO_RCVBUF} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SO_RCVBUF
+ * SO_RCVBUF} </th>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SO_LINGER
- * SO_LINGER} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SO_LINGER
+ * SO_LINGER} </th>
* <td> Linger on close if data is present (when configured in blocking mode
* only) </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
* Additional (implementation specific) options may also be supported. The list
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpServerChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpServerChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -47,17 +47,22 @@
* {@link #setOption(SctpSocketOption,Object) setOption} method. SCTP server socket
* channels support the following options:
* <blockquote>
- * <table><caption style="display:none">Socket options</caption>
+ * <table class="striped">
+ * <caption style="display:none">Socket options</caption>
+ * <thead>
* <tr>
- * <th>Option Name</th>
- * <th>Description</th>
+ * <th scope="col">Option Name</th>
+ * <th scope="col">Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
- * <td> {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
- * SCTP_INIT_MAXSTREAMS} </td>
+ * <th scope="row"> {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
+ * SCTP_INIT_MAXSTREAMS} </th>
* <td> The maximum number of streams requested by the local endpoint during
* association initialization </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
* Additional (implementation specific) options may also be supported. The list
--- a/jdk/test/ProblemList.txt Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/ProblemList.txt Thu Jul 20 09:38:13 2017 -0700
@@ -264,9 +264,6 @@
tools/jimage/JImageListTest.java 8170120 generic-all
tools/jimage/JImageVerifyTest.java 8170120 generic-all
-tools/schemagen/MultiReleaseJarTest.java 8174692 generic-all
-tools/wsgen/MultiReleaseJarTest.java 8174692 generic-all
-
############################################################################
# jdk_jdi
--- a/jdk/test/com/oracle/security/ucrypto/TestAES.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/com/oracle/security/ucrypto/TestAES.java Thu Jul 20 09:38:13 2017 -0700
@@ -26,17 +26,22 @@
* @bug 7088989 8014374 8167512 8173708
* @summary Ensure the AES ciphers of OracleUcrypto provider works correctly
* @key randomness
+ * @library /test/lib
+ * @build jdk.test.lib.Platform
+ * jdk.test.lib.Utils
* @run main TestAES
- * @run main/othervm/java.security.policy==empty.policy TestAES
+ * @run main/othervm -Dpolicy=empty.policy TestAES
*/
-import java.io.*;
import java.security.*;
import java.security.spec.*;
import java.util.*;
import javax.crypto.*;
import javax.crypto.spec.*;
+import jdk.test.lib.Platform;
+import jdk.test.lib.Utils;
+
public class TestAES extends UcryptoTest {
private static final String[] PADDEDCIPHER_ALGOS = {
@@ -55,10 +60,29 @@
private static final SecretKey CIPHER_KEY =
new SecretKeySpec(new byte[16], "AES");
+ private static final boolean IS_BAD_SOLARIS = isBadSolaris();
+
public static void main(String[] args) throws Exception {
+ // It has to determine Solaris version before enabling security manager.
+ // Because that needs some permissions, like java.io.FilePermission.
+ String policy = System.getProperty("policy");
+ if (policy != null) {
+ enableSecurityManager(policy);
+ }
+
main(new TestAES(), null);
}
+ // Enables security manager and uses the specified policy file to override
+ // the default one.
+ private static void enableSecurityManager(String policy) {
+ String policyURL = "file://" + System.getProperty("test.src", ".") + "/"
+ + policy;
+ System.out.println("policyURL: " + policyURL);
+ Security.setProperty("policy.url.1", policyURL);
+ System.setSecurityManager(new SecurityManager());
+ }
+
public void doTest(Provider prov) throws Exception {
// Provider for testing Interoperability
Provider sunJCEProv = Security.getProvider("SunJCE");
@@ -136,11 +160,18 @@
boolean testPassed = true;
byte[] in = new byte[16];
(new SecureRandom()).nextBytes(in);
- int blockSize = 16;
- for (int j = 1; j < (in.length - 1); j++) {
- System.out.println("Input offset size: " + j);
- for (int i = 0; i < algos.length; i++) {
+ for (int i = 0; i < algos.length; i++) {
+ if (IS_BAD_SOLARIS
+ && algos[i].indexOf("CFB128") != -1
+ && p.getName().equals("OracleUcrypto")) {
+ System.out.println("Ignore cases on CFB128 due to a pre-S11.3 bug");
+ continue;
+ }
+
+ for (int j = 1; j < (in.length - 1); j++) {
+ System.out.println("Input offset size: " + j);
+
try {
// check ENC
Cipher c;
@@ -177,12 +208,6 @@
k += c.doFinal(eout, firstPartLen+1, eout.length - firstPartLen - 1, dout, k);
if (!checkArrays(in, in.length, dout, k)) testPassed = false;
} catch(Exception ex) {
- if (ex instanceof BadPaddingException &&
- algos[i].indexOf("CFB128") != -1 &&
- p.getName().equals("OracleUcrypto")) {
- System.out.println("Ignore due to a pre-S11.3 bug: " + ex);
- continue;
- }
System.out.println("Unexpected Exception: " + algos[i]);
ex.printStackTrace();
testPassed = false;
@@ -261,7 +286,6 @@
}
}
-
private static void testCipherGCM(SecretKey key,
Provider p) {
boolean testPassed = true;
@@ -349,4 +373,12 @@
}
return equal;
}
+
+ // The cases on CFB128 mode have to be skipped on pre-S11.3.
+ private static boolean isBadSolaris() {
+ return Platform.isSolaris()
+ && Platform.getOsVersionMajor() <= 5
+ && Platform.getOsVersionMinor() <= 11
+ && Utils.distro().compareTo("11.3") < 0;
+ }
}
--- a/jdk/test/java/nio/charset/Charset/IllegalCharsetName.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/java/nio/charset/Charset/IllegalCharsetName.java Thu Jul 20 09:38:13 2017 -0700
@@ -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
@@ -22,15 +22,12 @@
*/
/* @test
- * @bug 6330020
+ * @bug 6330020 8184665
* @summary Ensure Charset.forName/isSupport throws the correct exception
* if the charset names passed in are illegal.
*/
-import java.io.*;
-import java.nio.*;
import java.nio.charset.*;
-import java.util.*;
public class IllegalCharsetName {
public static void main(String[] args) throws Exception {
@@ -59,5 +56,18 @@
} catch (IllegalCharsetNameException x) { //expected
}
}
+
+ // Standard charsets may bypass alias checking during startup, test that
+ // they're all well-behaved as a sanity test
+ checkAliases(StandardCharsets.ISO_8859_1);
+ checkAliases(StandardCharsets.US_ASCII);
+ checkAliases(StandardCharsets.UTF_8);
+ }
+
+ private static void checkAliases(Charset cs) {
+ for (String alias : cs.aliases()) {
+ Charset.forName(alias);
+ Charset.isSupported(alias);
+ }
}
}
--- a/jdk/test/java/util/regex/RegExTest.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/java/util/regex/RegExTest.java Thu Jul 20 09:38:13 2017 -0700
@@ -33,9 +33,8 @@
* 6350801 6676425 6878475 6919132 6931676 6948903 6990617 7014645 7039066
* 7067045 7014640 7189363 8007395 8013252 8013254 8012646 8023647 6559590
* 8027645 8035076 8039124 8035975 8074678 6854417 8143854 8147531 7071819
- * 8151481 4867170 7080302 6728861 6995635 6736245 4916384
- * 6328855 6192895 6345469 6988218 6693451 7006761 8140212 8143282 8158482
- * 8176029
+ * 8151481 4867170 7080302 6728861 6995635 6736245 4916384 6328855 6192895
+ * 6345469 6988218 6693451 7006761 8140212 8143282 8158482 8176029 8184706
*
* @library /test/lib
* @build jdk.test.lib.RandomFactory
@@ -470,7 +469,25 @@
m.find();
if (!m.hitEnd())
failCount++;
- report("hitEnd from a Slice");
+
+ // 8184706: Matching u+0d at EOL against \R should hit-end
+ p = Pattern.compile("...\\R");
+ m = p.matcher("cat" + (char)0x0a);
+ m.find();
+ if (m.hitEnd())
+ failCount++;
+
+ m = p.matcher("cat" + (char)0x0d);
+ m.find();
+ if (!m.hitEnd())
+ failCount++;
+
+ m = p.matcher("cat" + (char)0x0d + (char)0x0a);
+ m.find();
+ if (m.hitEnd())
+ failCount++;
+
+ report("hitEnd");
}
// This is for bug 4997476
--- a/jdk/test/sun/management/jdp/JdpOnTestCase.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/sun/management/jdp/JdpOnTestCase.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 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
@@ -31,6 +31,7 @@
import java.net.SocketTimeoutException;
import java.util.Map;
+import static jdk.testlibrary.Asserts.assertNotEquals;
public class JdpOnTestCase extends JdpTestCase {
@@ -58,6 +59,7 @@
final String jdpName = payload.get("INSTANCE_NAME");
log.fine("Received correct JDP packet #" + String.valueOf(receivedJDPpackets) +
", jdp.name=" + jdpName);
+ assertNotEquals(null, payload.get("PROCESS_ID"), "Expected payload.get(\"PROCESS_ID\") to be not null.");
}
/**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/ec/InvalidCurve.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,61 @@
+/*
+ * 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 8182999
+ * @summary Ensure that SunEC behaves correctly for unsupported curves.
+ * @run main InvalidCurve
+ */
+
+import java.security.*;
+import java.security.spec.*;
+import java.math.*;
+
+public class InvalidCurve {
+
+ public static void main(String[] args) {
+
+ KeyPairGenerator keyGen;
+ try {
+ keyGen = KeyPairGenerator.getInstance("EC", "SunEC");
+ ECGenParameterSpec brainpoolSpec =
+ new ECGenParameterSpec("brainpoolP256r1");
+ keyGen.initialize(brainpoolSpec);
+ } catch (InvalidAlgorithmParameterException ex) {
+ System.out.println(ex.getMessage());
+ // this is expected
+ return;
+ } catch (NoSuchAlgorithmException | NoSuchProviderException ex) {
+ throw new RuntimeException(ex);
+ }
+
+ keyGen.generateKeyPair();
+
+ // If we make it to here, then the test is not working correctly.
+ throw new RuntimeException("The expected exception was not thrown.");
+
+ }
+
+}
+
--- a/jdk/test/tools/schemagen/MultiReleaseJarTest.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/tools/schemagen/MultiReleaseJarTest.java Thu Jul 20 09:38:13 2017 -0700
@@ -56,7 +56,7 @@
@DataProvider(name = "jarFiles")
public Object[][] jarFiles() {
- return new Object[][]{{"MV_BOTH.jar", 9},
+ return new Object[][]{{"MV_BOTH.jar", Math.min(10, Runtime.version().major())},
{"MV_ONLY_9.jar", 9},
{"NON_MV.jar", 8}};
}
--- a/jdk/test/tools/wsgen/MultiReleaseJarTest.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/tools/wsgen/MultiReleaseJarTest.java Thu Jul 20 09:38:13 2017 -0700
@@ -56,7 +56,7 @@
@DataProvider(name = "jarFiles")
public Object[][] jarFiles() {
- return new Object[][]{{"MV_BOTH.jar", 9},
+ return new Object[][]{{"MV_BOTH.jar", Math.min(10, Runtime.version().major())},
{"MV_ONLY_9.jar", 9},
{"NON_MV.jar", 8}};
}
--- a/langtools/.hgtags Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/.hgtags Thu Jul 20 09:38:13 2017 -0700
@@ -435,3 +435,4 @@
add6717b655efa3aa9350e917175f3965cfc0729 jdk-10+14
0d0ac75b0f6cbe218362e3fac4bb443496e7258f jdk-9+176
2f01728210c1405ef459e69d9c7247b5df6abb78 jdk-9+177
+2b9273266ea629ca686239c416a7ff8a592d822a jdk-10+15
--- a/langtools/make/gendata/Gendata-jdk.compiler.gmk Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/make/gendata/Gendata-jdk.compiler.gmk Thu Jul 20 09:38:13 2017 -0700
@@ -60,7 +60,8 @@
$(SUPPORT_OUTPUTDIR)/symbols/ct.sym-files/_the.symbols: \
$(COMPILE_CREATE_SYMBOLS) \
- $(wildcard $(LANGTOOLS_TOPDIR)/make/data/symbols/*)
+ $(wildcard $(LANGTOOLS_TOPDIR)/make/data/symbols/*) \
+ $(MODULE_INFOS)
$(RM) -r $(@D)
$(MKDIR) -p $(@D)
$(ECHO) Creating ct.sym classes
--- a/langtools/make/src/classes/build/tools/symbolgenerator/TransitiveDependencies.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/make/src/classes/build/tools/symbolgenerator/TransitiveDependencies.java Thu Jul 20 09:38:13 2017 -0700
@@ -59,13 +59,14 @@
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
List<String> options = Arrays.asList("-source", "9",
"-target", "9",
+ "-proc:only",
"--system", "none",
"--module-source-path", args[0],
"--add-modules", Arrays.stream(args)
.skip(1)
.collect(Collectors.joining(",")));
List<String> jlObjectList = Arrays.asList("java.lang.Object");
- JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, d -> {}, options, jlObjectList, null);
+ JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, null, options, jlObjectList, null);
task.enter();
Elements elements = task.getElements();
List<String> todo = new LinkedList<>();
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java Thu Jul 20 09:38:13 2017 -0700
@@ -340,6 +340,8 @@
JavaFileObject classfile = c.classfile;
if (classfile != null) {
JavaFileObject previousClassFile = currentClassFile;
+ Symbol prevOwner = c.owner;
+ Name prevName = c.fullname;
try {
if (reader.filling) {
Assert.error("Filling " + classfile.toUri() + " during " + previousClassFile);
@@ -360,6 +362,21 @@
+ classfile.toUri());
}
}
+ } catch (BadClassFile cf) {
+ //the symbol may be partially initialized, purge it:
+ c.owner = prevOwner;
+ c.members_field.getSymbols(sym -> sym.kind == TYP).forEach(sym -> {
+ ClassSymbol csym = (ClassSymbol) sym;
+ csym.owner = sym.packge();
+ csym.owner.members().enter(sym);
+ csym.fullname = sym.flatName();
+ csym.name = Convert.shortName(sym.flatName());
+ csym.reset();
+ });
+ c.fullname = prevName;
+ c.name = Convert.shortName(prevName);
+ c.reset();
+ throw cf;
} finally {
currentClassFile = previousClassFile;
}
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Thu Jul 20 09:38:13 2017 -0700
@@ -290,8 +290,7 @@
*/
public Type completionError(DiagnosticPosition pos, CompletionFailure ex) {
log.error(JCDiagnostic.DiagnosticFlag.NON_DEFERRABLE, pos, Errors.CantAccess(ex.sym, ex.getDetailValue()));
- if (ex instanceof ClassFinder.BadClassFile) throw new Abort();
- else return syms.errType;
+ return syms.errType;
}
/** Report an error that wrong type tag was found.
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Thu Jul 20 09:38:13 2017 -0700
@@ -94,10 +94,8 @@
import com.sun.tools.javac.tree.JCTree.JCUses;
import com.sun.tools.javac.tree.JCTree.Tag;
import com.sun.tools.javac.tree.TreeInfo;
-import com.sun.tools.javac.util.Abort;
import com.sun.tools.javac.util.Assert;
import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.JCDiagnostic;
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
import com.sun.tools.javac.util.List;
import com.sun.tools.javac.util.ListBuffer;
@@ -105,7 +103,6 @@
import com.sun.tools.javac.util.Name;
import com.sun.tools.javac.util.Names;
import com.sun.tools.javac.util.Options;
-import com.sun.tools.javac.util.Position;
import static com.sun.tools.javac.code.Flags.ABSTRACT;
import static com.sun.tools.javac.code.Flags.ENUM;
@@ -266,8 +263,7 @@
msym.complete();
}
} catch (CompletionFailure ex) {
- log.error(JCDiagnostic.DiagnosticFlag.NON_DEFERRABLE, Position.NOPOS, Errors.CantAccess(ex.sym, ex.getDetailValue()));
- if (ex instanceof ClassFinder.BadClassFile) throw new Abort();
+ chk.completionError(null, ex);
} finally {
depth--;
}
@@ -1220,10 +1216,6 @@
Predicate<ModuleSymbol> observablePred = sym ->
(observable == null) ? (moduleFinder.findModule(sym).kind != ERR) : observable.contains(sym);
Predicate<ModuleSymbol> systemModulePred = sym -> (sym.flags() & Flags.SYSTEM_MODULE) != 0;
- Predicate<ModuleSymbol> noIncubatorPred = sym -> {
- sym.complete();
- return !sym.resolutionFlags.contains(ModuleResolutionFlags.DO_NOT_RESOLVE_BY_DEFAULT);
- };
Set<ModuleSymbol> enabledRoot = new LinkedHashSet<>();
if (rootModules.contains(syms.unnamedModule)) {
@@ -1241,9 +1233,18 @@
jdkModulePred = sym -> true;
}
+ Predicate<ModuleSymbol> noIncubatorPred = sym -> {
+ sym.complete();
+ return !sym.resolutionFlags.contains(ModuleResolutionFlags.DO_NOT_RESOLVE_BY_DEFAULT);
+ };
+
for (ModuleSymbol sym : new HashSet<>(syms.getAllModules())) {
- if (systemModulePred.test(sym) && observablePred.test(sym) && jdkModulePred.test(sym) && noIncubatorPred.test(sym)) {
- enabledRoot.add(sym);
+ try {
+ if (systemModulePred.test(sym) && observablePred.test(sym) && jdkModulePred.test(sym) && noIncubatorPred.test(sym)) {
+ enabledRoot.add(sym);
+ }
+ } catch (CompletionFailure ex) {
+ chk.completionError(null, ex);
}
}
}
@@ -1341,32 +1342,36 @@
result.add(syms.java_base);
while (primaryTodo.nonEmpty() || secondaryTodo.nonEmpty()) {
- ModuleSymbol current;
- boolean isPrimaryTodo;
- if (primaryTodo.nonEmpty()) {
- current = primaryTodo.head;
- primaryTodo = primaryTodo.tail;
- isPrimaryTodo = true;
- } else {
- current = secondaryTodo.head;
- secondaryTodo = secondaryTodo.tail;
- isPrimaryTodo = false;
- }
- if (observable != null && !observable.contains(current))
- continue;
- if (!result.add(current) || current == syms.unnamedModule || ((current.flags_field & Flags.AUTOMATIC_MODULE) != 0))
- continue;
- current.complete();
- if (current.kind == ERR && (isPrimaryTodo || base.contains(current)) && warnedMissing.add(current)) {
- log.error(Errors.ModuleNotFound(current));
- }
- for (RequiresDirective rd : current.requires) {
- if (rd.module == syms.java_base) continue;
- if ((rd.isTransitive() && isPrimaryTodo) || rootModules.contains(current)) {
- primaryTodo = primaryTodo.prepend(rd.module);
+ try {
+ ModuleSymbol current;
+ boolean isPrimaryTodo;
+ if (primaryTodo.nonEmpty()) {
+ current = primaryTodo.head;
+ primaryTodo = primaryTodo.tail;
+ isPrimaryTodo = true;
} else {
- secondaryTodo = secondaryTodo.prepend(rd.module);
+ current = secondaryTodo.head;
+ secondaryTodo = secondaryTodo.tail;
+ isPrimaryTodo = false;
}
+ if (observable != null && !observable.contains(current))
+ continue;
+ if (!result.add(current) || current == syms.unnamedModule || ((current.flags_field & Flags.AUTOMATIC_MODULE) != 0))
+ continue;
+ current.complete();
+ if (current.kind == ERR && (isPrimaryTodo || base.contains(current)) && warnedMissing.add(current)) {
+ log.error(Errors.ModuleNotFound(current));
+ }
+ for (RequiresDirective rd : current.requires) {
+ if (rd.module == syms.java_base) continue;
+ if ((rd.isTransitive() && isPrimaryTodo) || rootModules.contains(current)) {
+ primaryTodo = primaryTodo.prepend(rd.module);
+ } else {
+ secondaryTodo = secondaryTodo.prepend(rd.module);
+ }
+ }
+ } catch (CompletionFailure ex) {
+ chk.completionError(null, ex);
}
}
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Thu Jul 20 09:38:13 2017 -0700
@@ -1425,7 +1425,7 @@
ClassSymbol c = readClassSymbol(nextChar());
NameAndType nt = readNameAndType(nextChar());
- if (c.members_field == null)
+ if (c.members_field == null || c.kind != TYP)
throw badClassFile("bad.enclosing.class", self, c);
MethodSymbol m = findMethod(nt, c.members_field, self.flags());
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java Thu Jul 20 09:38:13 2017 -0700
@@ -400,8 +400,6 @@
} catch (CompletionFailure ex) {
// inlined Check.completionError as it is not initialized yet
log.error(Errors.CantAccess(ex.sym, ex.getDetailValue()));
- if (ex instanceof ClassFinder.BadClassFile)
- throw new Abort();
}
source = Source.instance(context);
attr = Attr.instance(context);
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java Thu Jul 20 09:38:13 2017 -0700
@@ -2243,8 +2243,20 @@
}
}
- JCNewArray na = toP(F.at(newpos).NewArray(elemtype, dims.toList(), null));
+ List<JCExpression> elems = null;
+ int errpos = token.pos;
+
+ if (token.kind == LBRACE) {
+ elems = arrayInitializerElements(newpos, elemtype);
+ }
+
+ JCNewArray na = toP(F.at(newpos).NewArray(elemtype, dims.toList(), elems));
na.dimAnnotations = dimAnnotations.toList();
+
+ if (elems != null) {
+ return syntaxError(errpos, List.of(na), "illegal.array.creation.both.dimension.and.initialization");
+ }
+
return na;
}
}
@@ -2270,6 +2282,11 @@
/** ArrayInitializer = "{" [VariableInitializer {"," VariableInitializer}] [","] "}"
*/
JCExpression arrayInitializer(int newpos, JCExpression t) {
+ List<JCExpression> elems = arrayInitializerElements(newpos, t);
+ return toP(F.at(newpos).NewArray(t, List.nil(), elems));
+ }
+
+ List<JCExpression> arrayInitializerElements(int newpos, JCExpression t) {
accept(LBRACE);
ListBuffer<JCExpression> elems = new ListBuffer<>();
if (token.kind == COMMA) {
@@ -2283,7 +2300,7 @@
}
}
accept(RBRACE);
- return toP(F.at(newpos).NewArray(t, List.nil(), elems.toList()));
+ return elems.toList();
}
/** VariableInitializer = ArrayInitializer | Expression
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Thu Jul 20 09:38:13 2017 -0700
@@ -165,6 +165,9 @@
compiler.err.array.dimension.missing=\
array dimension missing
+compiler.err.illegal.array.creation.both.dimension.and.initialization=\
+ array creation with both dimension expression and initialization is illegal
+
# 0: type
compiler.err.array.req.but.found=\
array required, but {0} found
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractIndexWriter.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractIndexWriter.java Thu Jul 20 09:38:13 2017 -0700
@@ -455,7 +455,7 @@
* @throws DocFileIOException if there is a problem creating the search index file
*/
protected void createSearchIndexFile(DocPath searchIndexFile, DocPath searchIndexZip,
- DocPath searchIndexJS, List<SearchIndexItem> searchIndex, String varName) throws DocFileIOException {
+ DocPath searchIndexJS, Collection<SearchIndexItem> searchIndex, String varName) throws DocFileIOException {
if (!searchIndex.isEmpty()) {
StringBuilder searchVar = new StringBuilder("[");
boolean first = true;
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java Thu Jul 20 09:38:13 2017 -0700
@@ -532,7 +532,7 @@
tdDesc.addStyle(HtmlStyle.colLast);
writer.addSummaryLinkComment(this, member, firstSentenceTags, tdDesc);
tr.addContent(tdDesc);
- if (utils.isMethod(member) && !utils.isAnnotationType(member)) {
+ if (utils.isMethod(member) && !utils.isAnnotationType(member) && !utils.isProperty(name(member))) {
int methodType = utils.isStatic(member) ? MethodTypes.STATIC.tableTabs().value() :
MethodTypes.INSTANCE.tableTabs().value();
if (utils.isInterface(member.getEnclosingElement())) {
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java Thu Jul 20 09:38:13 2017 -0700
@@ -224,7 +224,7 @@
protected List<SearchIndexItem> packageSearchIndex = new ArrayList<>();
- protected List<SearchIndexItem> tagSearchIndex = new ArrayList<>();
+ protected SortedSet<SearchIndexItem> tagSearchIndex = new TreeSet<>(makeSearchTagComparator());
protected List<SearchIndexItem> typeSearchIndex = new ArrayList<>();
@@ -348,6 +348,16 @@
return htmlTag.allowTag(this.htmlVersion);
}
+ public Comparator<SearchIndexItem> makeSearchTagComparator() {
+ return (SearchIndexItem sii1, SearchIndexItem sii2) -> {
+ int result = (sii1.getLabel()).compareTo(sii2.getLabel());
+ if (result == 0) {
+ result = (sii1.getHolder()).compareTo(sii2.getHolder());
+ }
+ return result;
+ };
+ }
+
/**
* Decide the page which will appear first in the right-hand frame. It will
* be "overview-summary.html" if "-overview" option is used or no
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java Thu Jul 20 09:38:13 2017 -0700
@@ -107,12 +107,16 @@
Set<Character> keys = new TreeSet<>(indexbuilder.getIndexMap().keySet());
keys.addAll(configuration.tagSearchIndexKeys);
ListIterator<Character> li = new ArrayList<>(keys).listIterator();
+ int prev;
+ int next;
while (li.hasNext()) {
+ prev = (li.hasPrevious()) ? li.previousIndex() + 1 : -1;
Object ch = li.next();
+ next = (li.hasNext()) ? li.nextIndex() + 1 : -1;
DocPath filename = DocPaths.indexN(li.nextIndex());
SplitIndexWriter indexgen = new SplitIndexWriter(configuration,
path.resolve(filename),
- indexbuilder, keys, li.previousIndex(), li.nextIndex());
+ indexbuilder, keys, prev, next);
indexgen.generateIndexFile((Character) ch);
if (!li.hasNext()) {
indexgen.createSearchIndexFiles();
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css Thu Jul 20 09:38:13 2017 -0700
@@ -434,21 +434,21 @@
}
.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link,
.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link,
-.requiresSummary caption a:link, .packagesSummary caption a:link, providesSummary caption a:link,
+.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link,
.usesSummary caption a:link,
.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover,
.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover,
-.requiresSummary caption a:hover, .packagesSummary caption a:hover, providesSummary caption a:hover,
+.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover,
.usesSummary caption a:hover,
.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active,
.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active,
-.requiresSummary caption a:active, .packagesSummary caption a:active, providesSummary caption a:active,
+.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active,
.usesSummary caption a:active,
.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited,
-.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited
-.requiresSummary caption a:visited, .packagesSummary caption a:visited, providesSummary caption a:visited,
+.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited,
+.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited,
.usesSummary caption a:visited {
- color:#FFFFFF;
+ color:#1f389c;
}
.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,
.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span,
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java Thu Jul 20 09:38:13 2017 -0700
@@ -38,7 +38,9 @@
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
+import java.util.MissingResourceException;
import java.util.Objects;
+import java.util.ResourceBundle;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -177,6 +179,16 @@
usage("main.Xusage", OptionKind.EXTENDED, "main.Xusage.foot");
}
+ @Override
+ void version() {
+ messager.notice("javadoc.version", messager.programName, version("release"));
+ }
+
+ @Override
+ void fullVersion() {
+ messager.notice("javadoc.fullversion", messager.programName, version("full"));
+ }
+
private void usage(String headerKey, OptionKind kind, String footerKey) {
messager.notice(headerKey);
showToolOptions(kind);
@@ -193,6 +205,24 @@
messager.notice(footerKey);
}
+ private static final String versionRBName = "jdk.javadoc.internal.tool.resources.version";
+ private static ResourceBundle versionRB;
+
+ private static String version(String key) {
+ if (versionRB == null) {
+ try {
+ versionRB = ResourceBundle.getBundle(versionRBName);
+ } catch (MissingResourceException e) {
+ return Log.getLocalizedString("version.not.available");
+ }
+ }
+ try {
+ return versionRB.getString(key);
+ } catch (MissingResourceException e) {
+ return Log.getLocalizedString("version.not.available");
+ }
+ }
+
void showToolOptions(OptionKind kind) {
Comparator<ToolOption> comp = new Comparator<ToolOption>() {
final Collator collator = Collator.getInstance(Locale.US);
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolOption.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolOption.java Thu Jul 20 09:38:13 2017 -0700
@@ -359,6 +359,20 @@
public void process(Helper helper) {
throw new AssertionError("the -J flag should be caught by the launcher.");
}
+ },
+
+ VERSION("--version", STANDARD) {
+ @Override
+ public void process(Helper helper) throws OptionException {
+ throw new OptionException(OK, helper::version);
+ }
+ },
+
+ FULLVERSION("--full-version", HIDDEN) {
+ @Override
+ public void process(Helper helper) throws OptionException {
+ throw new OptionException(OK, helper::fullVersion);
+ }
};
public final String primaryName;
@@ -456,6 +470,9 @@
abstract void usage();
abstract void Xusage();
+ abstract void version();
+ abstract void fullVersion();
+
abstract String getLocalizedMessage(String msg, Object... args);
abstract OptionHelper getOptionHelper();
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc.properties Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc.properties Thu Jul 20 09:38:13 2017 -0700
@@ -200,6 +200,9 @@
main.opt.quiet.desc=\
Do not display status messages
+main.opt.version.desc=\
+ Print version information
+
main.opt.J.arg=\
<flag>
main.opt.J.desc=\
@@ -306,3 +309,5 @@
javadoc.warning.msg={0}: warning - {1}
javadoc.note.msg = {1}
javadoc.note.pos.msg= {0}: {1}
+javadoc.version={0} {1}
+javadoc.fullversion={0} full version "{1}"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/doclet/testIndexFiles/TestIndexFiles.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,64 @@
+/*
+ * 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 8170825
+ * @summary Perform tests on index files generated by javadoc.
+ * @author bpatel
+ * @library ../lib
+ * @modules jdk.javadoc/jdk.javadoc.internal.tool
+ * @build JavadocTester
+ * @run main TestIndexFiles
+ */
+
+public class TestIndexFiles extends JavadocTester {
+
+ public static void main(String... args) throws Exception {
+ TestIndexFiles tester = new TestIndexFiles();
+ tester.runTests();
+ }
+
+ @Test
+ void testIndexFiles() {
+ javadoc("-d", "out", "-splitindex", "-Xdoclint:none", "-sourcepath", testSrc,
+ "-use", "pkg");
+ checkExit(Exit.OK);
+ checkIndexFiles(true);
+ }
+
+ void checkIndexFiles(boolean found) {
+ checkOutput("index-files/index-1.html", found,
+ "<li>Prev Letter</li>\n"
+ + "<li><a href=\"index-2.html\">Next Letter</a></li>");
+ checkOutput("index-files/index-5.html", found,
+ "<li><a href=\"index-4.html\">Prev Letter</a></li>\n"
+ + "<li>Next Letter</li>");
+ checkOutput("index-files/index-1.html", !found,
+ "<li><a href=\"index-0.html\">Prev Letter</a></li>\n"
+ + "<li><a href=\"index-1.html\">Next Letter</a></li>");
+ checkOutput("index-files/index-5.html", !found,
+ "<li><a href=\"index-4.html\">Prev Letter</a></li>\n"
+ + "<li><a href=\"index-5.html\">Next Letter</a></li>");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/doclet/testIndexFiles/pkg/ClassForIndexFilesTest.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,45 @@
+/*
+ * 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 pkg;
+
+public class ClassForIndexFilesTest {
+
+ /**
+ * Test field.
+ */
+ public int field1;
+
+ /**
+ * Test method.
+ */
+ public void testMethod() {
+ }
+
+ /**
+ * Another test method.
+ */
+ public void anotherTestMethod() {
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/doclet/testIndexFiles/pkg/package-info.java Thu Jul 20 09:38:13 2017 -0700
@@ -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.
+ */
+
+/**
+ * Test pkg used for testing index files.
+ */
+package pkg;
--- a/langtools/test/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java Thu Jul 20 09:38:13 2017 -0700
@@ -24,7 +24,7 @@
/*
* @test
* @bug 7112427 8012295 8025633 8026567 8061305 8081854 8150130 8162363
- * 8167967 8172528 8175200 8178830
+ * 8167967 8172528 8175200 8178830 8182257
* @summary Test of the JavaFX doclet features.
* @author jvalenta
* @library ../lib
@@ -137,7 +137,10 @@
"<h3>Property Summary</h3>\n"
+ "<table class=\"memberSummary\" summary=\"Property Summary table, listing properties, and an explanation\">\n"
+ "<caption><span>Properties</span><span class=\"tabEnd\"> </span></caption>",
- "");
+ "<tr class=\"altColor\">\n"
+ + "<td class=\"colFirst\"><code><a href=\"../pkg1/C.BooleanProperty.html\" title=\"class in pkg1\">C.BooleanProperty</a></code></td>\n",
+ "<tr class=\"rowColor\">\n"
+ + "<td class=\"colFirst\"><code><a href=\"../pkg1/C.DoubleProperty.html\" title=\"class in pkg1\">C.DoubleProperty</a></code></td>\n");
checkOutput("pkg1/C.html", false,
"A()",
@@ -147,7 +150,11 @@
+ "</span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a>"
+ "</span><span class=\"tabEnd\"> </span></span><span id=\"t4\" class=\"tableTab\"><span>"
+ "<a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "</caption>");
+ + "</caption>",
+ "<tr id=\"i0\" class=\"altColor\">\n"
+ + "<td class=\"colFirst\"><code><a href=\"../pkg1/C.BooleanProperty.html\" title=\"class in pkg1\">C.BooleanProperty</a></code></td>\n",
+ "<tr id=\"i1\" class=\"rowColor\">\n"
+ + "<td class=\"colFirst\"><code><a href=\"../pkg1/C.DoubleProperty.html\" title=\"class in pkg1\">C.DoubleProperty</a></code></td>\n");
checkOutput("index-all.html", true,
"<div class=\"block\">Gets the value of the property paused.</div>",
--- a/langtools/test/jdk/javadoc/doclet/testModules/TestModules.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/jdk/javadoc/doclet/testModules/TestModules.java Thu Jul 20 09:38:13 2017 -0700
@@ -25,7 +25,7 @@
* @test
* @bug 8154119 8154262 8156077 8157987 8154261 8154817 8135291 8155995 8162363
* 8168766 8168688 8162674 8160196 8175799 8174974 8176778 8177562 8175218 8175823 8166306
- * 8178043
+ * 8178043 8181622
* @summary Test modules support in javadoc.
* @author bpatel
* @library ../lib
@@ -394,7 +394,7 @@
+ "<a name=\"module.description\">\n"
+ "<!-- -->\n"
+ "</a>\n"
- + "<div class=\"block\">This is a test description for the moduleA module. Search "
+ + "<div class=\"block\">This is a test description for the moduleA module with a Search "
+ "phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>.</div>");
checkOutput("moduleB-summary.html", found,
"<!-- ============ MODULE DESCRIPTION =========== -->\n"
@@ -454,7 +454,7 @@
+ "<a id=\"module.description\">\n"
+ "<!-- -->\n"
+ "</a>\n"
- + "<div class=\"block\">This is a test description for the moduleA module. Search "
+ + "<div class=\"block\">This is a test description for the moduleA module with a Search "
+ "phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>.</div>");
checkOutput("moduleB-summary.html", found,
"<section role=\"region\">\n"
@@ -755,7 +755,8 @@
+ "<td class=\"colFirst\">transitive</td>\n"
+ "<th class=\"colSecond\" scope=\"row\"><a href=\"moduleA-summary.html\">moduleA</a></th>\n"
+ "<td class=\"colLast\">\n"
- + "<div class=\"block\">This is a test description for the moduleA module.</div>\n"
+ + "<div class=\"block\">This is a test description for the moduleA module with a Search "
+ + "phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>.</div>\n"
+ "</td>\n"
+ "</tr>\n"
+ "<tr class=\"rowColor\">\n"
@@ -839,7 +840,8 @@
"<dl>\n"
+ "<dt><a href=\"moduleA-summary.html\">moduleA</a> - module moduleA</dt>\n"
+ "<dd>\n"
- + "<div class=\"block\">This is a test description for the moduleA module.</div>\n"
+ + "<div class=\"block\">This is a test description for the moduleA module with a Search "
+ + "phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>.</div>\n"
+ "</dd>\n"
+ "<dt><a href=\"moduleB-summary.html\">moduleB</a> - module moduleB</dt>\n"
+ "<dd>\n"
@@ -854,13 +856,21 @@
+ "search_word</a></span> - Search tag in moduleB</dt>\n"
+ "<dd> </dd>\n"
+ "</dl>");
+ checkOutput("index-all.html", false,
+ "<dt><span class=\"searchTagLink\"><a href=\"moduleA-summary.html#searchphrase\">"
+ + "search phrase</a></span> - Search tag in moduleA</dt>\n"
+ + "<dd>with description</dd>\n"
+ + "<dt><span class=\"searchTagLink\"><a href=\"moduleA-summary.html#searchphrase\">"
+ + "search phrase</a></span> - Search tag in moduleA</dt>\n"
+ + "<dd>with description</dd>");
}
void checkModuleModeCommon() {
checkOutput("overview-summary.html", true,
"<th class=\"colFirst\" scope=\"row\"><a href=\"moduleA-summary.html\">moduleA</a></th>\n"
+ "<td class=\"colLast\">\n"
- + "<div class=\"block\">This is a test description for the moduleA module.</div>\n"
+ + "<div class=\"block\">This is a test description for the moduleA module with a Search "
+ + "phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>.</div>\n"
+ "</td>",
"<th class=\"colFirst\" scope=\"row\"><a href=\"moduleB-summary.html\">moduleB</a></th>\n"
+ "<td class=\"colLast\">\n"
@@ -868,7 +878,7 @@
+ "</td>",
"<th class=\"colFirst\" scope=\"row\"><a href=\"moduletags-summary.html\">moduletags</a></th>\n"
+ "<td class=\"colLast\">\n"
- + "<div class=\"block\">This is a test description for the moduleA module.<br>\n"
+ + "<div class=\"block\">This is a test description for the moduletags module.<br>\n"
+ " Type Link: <a href=\"testpkgmdltags/TestClassInModuleTags.html\" title=\"class in testpkgmdltags\"><code>TestClassInModuleTags</code></a>.<br>\n"
+ " Member Link: <a href=\"testpkgmdltags/TestClassInModuleTags.html#testMethod-java.lang.String-\"><code>testMethod(String)</code></a>.<br>\n"
+ " Package Link: <a href=\"testpkgmdltags/package-summary.html\"><code>testpkgmdltags</code></a>.<br></div>\n"
@@ -896,7 +906,8 @@
"<td class=\"colFirst\">transitive static</td>\n"
+ "<th class=\"colSecond\" scope=\"row\"><a href=\"moduleA-summary.html\">moduleA</a></th>\n"
+ "<td class=\"colLast\">\n"
- + "<div class=\"block\">This is a test description for the moduleA module.</div>\n"
+ + "<div class=\"block\">This is a test description for the moduleA module with a Search "
+ + "phrase <a id=\"searchphrase\" class=\"searchTagResult\">search phrase</a>.</div>\n"
+ "</td>",
"<table class=\"requiresSummary\" summary=\"Requires table, listing modules, and an explanation\">\n"
+ "<caption><span>Requires</span><span class=\"tabEnd\"> </span></caption>\n"
--- a/langtools/test/jdk/javadoc/doclet/testModules/moduleA/module-info.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/jdk/javadoc/doclet/testModules/moduleA/module-info.java Thu Jul 20 09:38:13 2017 -0700
@@ -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
@@ -24,7 +24,7 @@
*/
/**
- * This is a test description for the moduleA module. Search phrase {@index "search phrase" with description}.
+ * This is a test description for the moduleA module with a Search phrase {@index "search phrase" with description}.
*
* @deprecated This module is deprecated.
*/
--- a/langtools/test/jdk/javadoc/doclet/testModules/moduletags/module-info.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/jdk/javadoc/doclet/testModules/moduletags/module-info.java Thu Jul 20 09:38:13 2017 -0700
@@ -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
@@ -24,7 +24,7 @@
*/
/**
- * This is a test description for the moduleA module.<br>
+ * This is a test description for the moduletags module.<br>
* Type Link: {@link testpkgmdltags.TestClassInModuleTags}.<br>
* Member Link: {@link testpkgmdltags.TestClassInModuleTags#testMethod(String)}.<br>
* Package Link: {@link testpkgmdltags}.<br>
--- a/langtools/test/jdk/javadoc/doclet/testSearch/TestSearch.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/jdk/javadoc/doclet/testSearch/TestSearch.java Thu Jul 20 09:38:13 2017 -0700
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8141492 8071982 8141636 8147890 8166175 8168965 8176794 8175218 8147881
+ * @bug 8141492 8071982 8141636 8147890 8166175 8168965 8176794 8175218 8147881 8181622
* @summary Test the search feature of javadoc.
* @author bpatel
* @library ../lib
@@ -65,6 +65,7 @@
checkInvalidUsageIndexTag();
checkSearchOutput(true);
checkSingleIndex(true);
+ checkSingleIndexSearchTagDuplication();
checkJqueryAndImageFiles(true);
checkSearchJS();
checkFiles(true,
@@ -86,6 +87,7 @@
checkDocLintErrors();
checkSearchOutput(true);
checkSingleIndex(true);
+ checkSingleIndexSearchTagDuplication();
checkJqueryAndImageFiles(true);
checkSearchJS();
checkFiles(true,
@@ -127,6 +129,7 @@
checkExit(Exit.OK);
checkSearchOutput(true);
checkSingleIndex(true);
+ checkSingleIndexSearchTagDuplication();
checkJqueryAndImageFiles(true);
checkSearchJS();
checkFiles(true,
@@ -210,6 +213,7 @@
checkInvalidUsageIndexTag();
checkSearchOutput(true);
checkSplitIndex();
+ checkSplitIndexSearchTagDuplication();
checkJqueryAndImageFiles(true);
checkSearchJS();
checkFiles(true,
@@ -498,4 +502,34 @@
+ " }\n"
+ " });");
}
+
+ void checkSingleIndexSearchTagDuplication() {
+ // Test for search tags duplication in index file.
+ checkOutput("index-all.html", true,
+ "<dt><span class=\"searchTagLink\"><a href=\"pkg2/TestError.html#SearchTagDeprecatedMethod\">"
+ + "SearchTagDeprecatedMethod</a></span> - Search tag in pkg2.TestError</dt>\n"
+ + "<dd>with description</dd>");
+ checkOutput("index-all.html", false,
+ "<dt><span class=\"searchTagLink\"><a href=\"pkg2/TestError.html#SearchTagDeprecatedMethod\">"
+ + "SearchTagDeprecatedMethod</a></span> - Search tag in pkg2.TestError</dt>\n"
+ + "<dd>with description</dd>\n"
+ + "<dt><span class=\"searchTagLink\"><a href=\"pkg2/TestError.html#SearchTagDeprecatedMethod\">"
+ + "SearchTagDeprecatedMethod</a></span> - Search tag in pkg2.TestError</dt>\n"
+ + "<dd>with description</dd>");
+ }
+
+ void checkSplitIndexSearchTagDuplication() {
+ // Test for search tags duplication in index file.
+ checkOutput("index-files/index-13.html", true,
+ "<dt><span class=\"searchTagLink\"><a href=\"../pkg2/TestError.html#SearchTagDeprecatedMethod\">"
+ + "SearchTagDeprecatedMethod</a></span> - Search tag in pkg2.TestError</dt>\n"
+ + "<dd>with description</dd>");
+ checkOutput("index-files/index-13.html", false,
+ "<dt><span class=\"searchTagLink\"><a href=\"../pkg2/TestError.html#SearchTagDeprecatedMethod\">"
+ + "SearchTagDeprecatedMethod</a></span> - Search tag in pkg2.TestError</dt>\n"
+ + "<dd>with description</dd>\n"
+ + "<dt><span class=\"searchTagLink\"><a href=\"../pkg2/TestError.html#SearchTagDeprecatedMethod\">"
+ + "SearchTagDeprecatedMethod</a></span> - Search tag in pkg2.TestError</dt>\n"
+ + "<dd>with description</dd>");
+ }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/doclet/testVersionOption/TestVersionOption.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,58 @@
+/*
+ * 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 8177048
+ * @summary javadoc should support --version and --full-version flags
+ * @library ../lib
+ * @modules jdk.javadoc/jdk.javadoc.internal.tool
+ * @build JavadocTester TestVersionOption
+ * @run main TestVersionOption
+ */
+
+public class TestVersionOption extends JavadocTester {
+
+ public static void main(String... args) throws Exception {
+ TestVersionOption tester = new TestVersionOption();
+ tester.runTests();
+ }
+
+ @Test
+ void testFullVersionOption() {
+ javadoc("--full-version");
+ checkExit(Exit.OK);
+
+ checkOutput(Output.OUT, true, "javadoc full version \"" + System.getProperty("java.runtime.version") + "\"");
+ }
+
+
+ @Test
+ void testVersionOption() {
+ javadoc("--version");
+ checkExit(Exit.OK);
+
+ checkOutput(Output.OUT, true, "javadoc " + System.getProperty("java.version"));
+ }
+
+}
--- a/langtools/test/tools/javac/ExtraneousEquals.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/tools/javac/ExtraneousEquals.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,6 +1,6 @@
/*
* @test /nodynamiccopyright/
- * @bug 5019614
+ * @bug 5019614 8057647
* @summary variance prototype syntax leftover
*
* @compile/fail/ref=ExtraneousEquals.out -XDrawDiagnostics ExtraneousEquals.java
--- a/langtools/test/tools/javac/ExtraneousEquals.out Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/tools/javac/ExtraneousEquals.out Thu Jul 20 09:38:13 2017 -0700
@@ -1,6 +1,4 @@
ExtraneousEquals.java:10:23: compiler.err.illegal.start.of.expr
ExtraneousEquals.java:10:24: compiler.err.illegal.start.of.expr
-ExtraneousEquals.java:10:25: compiler.err.expected: ';'
-ExtraneousEquals.java:10:28: compiler.err.not.stmt
-ExtraneousEquals.java:10:29: compiler.err.expected: ';'
-5 errors
+ExtraneousEquals.java:10:26: compiler.err.illegal.array.creation.both.dimension.and.initialization
+3 errors
--- a/langtools/test/tools/javac/T8003967/DetectMutableStaticFields.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/tools/javac/T8003967/DetectMutableStaticFields.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 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
@@ -91,6 +91,7 @@
static {
ignore("javax/tools/ToolProvider", "instance");
+ ignore("jdk/javadoc/internal/tool/Start", "versionRB");
ignore("com/sun/tools/javah/JavahTask", "versionRB");
ignore("com/sun/tools/classfile/Dependencies$DefaultFilter", "instance");
ignore("com/sun/tools/javap/JavapTask", "versionRB");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/diags/examples/IllegalArrayCreation.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,28 @@
+/*
+ * 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: compiler.err.illegal.array.creation.both.dimension.and.initialization
+
+class IllegalArrayCreation {
+ int[] foo = new int[10] { 1, 2, 3 };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/modules/BrokenModulesTest.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,110 @@
+/*
+ * 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 8182450
+ * @summary Test model behavior when a completing a broken module-info.
+ * @library /tools/lib
+ * @modules
+ * jdk.compiler/com.sun.tools.javac.api
+ * jdk.compiler/com.sun.tools.javac.code
+ * jdk.compiler/com.sun.tools.javac.main
+ * jdk.compiler/com.sun.tools.javac.processing
+ * @build toolbox.ToolBox toolbox.JavacTask toolbox.ModuleBuilder ModuleTestBase
+ * @run main BrokenModulesTest
+ */
+
+import java.nio.file.Path;
+import java.util.List;
+
+import javax.tools.JavaCompiler;
+import javax.tools.ToolProvider;
+
+import com.sun.tools.javac.api.JavacTaskImpl;
+
+public class BrokenModulesTest extends ModuleTestBase {
+
+ public static void main(String... args) throws Exception {
+ new BrokenModulesTest().runTests();
+ }
+
+ List<String> jlObjectList = List.of("java.lang.Object");
+ JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+
+ @Test
+ public void testBrokenModuleInfoModuleSourcePath(Path base) throws Exception {
+ Path msp = base.resolve("msp");
+ Path ma = msp.resolve("ma");
+ tb.writeJavaFiles(ma,
+ "module ma { requires not.available; exports api1; }",
+ "package api1; public interface Api { }");
+ Path out = base.resolve("out");
+ tb.createDirectories(out);
+
+ List<String> opts = List.of("--module-source-path", msp.toString(),
+ "--add-modules", "ma");
+ JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, null, opts, jlObjectList, null);
+
+ task.enter();
+
+ task.getElements().getModuleElement("java.base");
+ }
+
+ @Test
+ public void testSystem(Path base) throws Exception {
+ Path jdkCompiler = base.resolve("jdk.compiler");
+ tb.writeJavaFiles(jdkCompiler,
+ "module jdk.compiler { requires not.available; }");
+ Path out = base.resolve("out");
+ tb.createDirectories(out);
+
+ List<String> opts = List.of("--patch-module", "jdk.compiler=" + jdkCompiler.toString(),
+ "--add-modules", "jdk.compiler");
+ JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, null, opts, jlObjectList, null);
+
+ task.enter();
+
+ task.getElements().getModuleElement("java.base");
+ }
+
+ @Test
+ public void testParseError(Path base) throws Exception {
+ Path msp = base.resolve("msp");
+ Path ma = msp.resolve("ma");
+ tb.writeJavaFiles(ma,
+ "broken module ma { }",
+ "package api1; public interface Api { }");
+ Path out = base.resolve("out");
+ tb.createDirectories(out);
+
+ List<String> opts = List.of("--module-source-path", msp.toString(),
+ "--add-modules", "ma");
+ JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, null, opts, jlObjectList, null);
+
+ task.analyze();
+
+ task.getElements().getModuleElement("java.base");
+ }
+
+}
--- a/langtools/test/tools/javac/modules/EdgeCases.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/tools/javac/modules/EdgeCases.java Thu Jul 20 09:38:13 2017 -0700
@@ -467,7 +467,8 @@
List<String> expected = Arrays.asList(
"- compiler.err.cant.access: m1x.module-info, (compiler.misc.bad.class.file.header: module-info.class, (compiler.misc.module.name.mismatch: other, m1x))",
- "1 error");
+ "module-info.java:1:1: compiler.err.module.not.found: m1x",
+ "2 errors");
if (!expected.equals(log)) {
throw new AssertionError("Unexpected output: " + log);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/completionfailure/NoAbortForBadClassFile.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,248 @@
+/*
+ * 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 8182450
+ * @summary Bad classfiles should not abort compilations
+ * @library /tools/lib
+ * @modules
+ * jdk.compiler/com.sun.tools.javac.api
+ * jdk.compiler/com.sun.tools.javac.code
+ * jdk.compiler/com.sun.tools.javac.comp
+ * jdk.compiler/com.sun.tools.javac.jvm
+ * jdk.compiler/com.sun.tools.javac.main
+ * jdk.compiler/com.sun.tools.javac.processing
+ * jdk.compiler/com.sun.tools.javac.util
+ * @build toolbox.ToolBox toolbox.JavacTask
+ * @run main NoAbortForBadClassFile
+ */
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import com.sun.tools.javac.api.JavacTaskImpl;
+import com.sun.tools.javac.api.JavacTool;
+import com.sun.tools.javac.code.Flags;
+import com.sun.tools.javac.code.Symbol.ClassSymbol;
+import com.sun.tools.javac.code.Symbol.CompletionFailure;
+import com.sun.tools.javac.code.Symtab;
+import com.sun.tools.javac.jvm.ClassReader;
+import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.Context.Factory;
+import com.sun.tools.javac.util.Names;
+import com.sun.tools.javac.util.Options;
+import toolbox.Task;
+import toolbox.Task.Expect;
+
+import toolbox.TestRunner;
+import toolbox.ToolBox;
+
+public class NoAbortForBadClassFile extends TestRunner {
+
+ private ToolBox tb = new ToolBox();
+
+ public NoAbortForBadClassFile() {
+ super(System.out);
+ }
+
+ public static void main(String... args) throws Exception {
+ new NoAbortForBadClassFile().runTests(m -> new Object[] { Paths.get(m.getName()) });
+ }
+
+ @Test
+ public void testBrokenClassFile(Path base) throws Exception {
+ Path classes = base.resolve("classes");
+ Path brokenClassFile = classes.resolve("test").resolve("Broken.class");
+
+ Files.createDirectories(brokenClassFile.getParent());
+ Files.newOutputStream(brokenClassFile).close();
+
+ Path src = base.resolve("src");
+ tb.writeJavaFiles(src,
+ "package test; public class Test { private void test() { Broken b; String.unknown(); } }");
+ Path out = base.resolve("out");
+ tb.createDirectories(out);
+
+ List<String> log = new toolbox.JavacTask(tb)
+ .options("-classpath", classes.toString(),
+ "-XDrawDiagnostics")
+ .outdir(out)
+ .files(tb.findJavaFiles(src))
+ .run(Expect.FAIL)
+ .writeAll()
+ .getOutputLines(Task.OutputKind.DIRECT);
+
+ List<String> expectedOut = Arrays.asList(
+ "Test.java:1:57: compiler.err.cant.access: test.Broken, (compiler.misc.bad.class.file.header: Broken.class, (compiler.misc.class.file.wrong.class: java.lang.AutoCloseable))",
+ "Test.java:1:73: compiler.err.cant.resolve.location.args: kindname.method, unknown, , , (compiler.misc.location: kindname.class, java.lang.String, null)",
+ "2 errors"
+ );
+
+ if (!expectedOut.equals(log))
+ throw new Exception("expected output not found: " + log);
+ }
+
+ @Test
+ public void testLoading(Path base) throws Exception {
+ Path src = base.resolve("src");
+ tb.writeJavaFiles(src,
+ "public class Test { static { new Object() {}; } public static class I { public static class II { } } }");
+ Path out = base.resolve("out");
+ tb.createDirectories(out);
+
+ new toolbox.JavacTask(tb)
+ .outdir(out)
+ .files(tb.findJavaFiles(src))
+ .run(Expect.SUCCESS)
+ .writeAll()
+ .getOutputLines(Task.OutputKind.DIRECT);
+
+ List<Path> files;
+ try (Stream<Path> dir = Files.list(out)) {
+ files = dir.collect(Collectors.toList());
+ }
+
+ List<List<Path>> result = new ArrayList<>();
+
+ permutations(files, Collections.emptyList(), result);
+
+ for (List<Path> order : result) {
+ for (Path missing : order) {
+ Path test = base.resolve("test");
+
+ if (Files.exists(test)) {
+ tb.cleanDirectory(test);
+ } else {
+ tb.createDirectories(test);
+ }
+
+ for (Path p : order) {
+ Files.copy(p, test.resolve(p.getFileName()));
+ }
+
+ List<String> actual = complete(test, order, missing, true);
+
+ Files.delete(test.resolve(missing.getFileName()));
+
+ List<String> expected = complete(test, order, missing, false);
+
+ if (!actual.equals(expected)) {
+ throw new AssertionError("Unexpected state, actual=\n" + actual + "\nexpected=\n" + expected + "\norder=" + order + "\nmissing=" + missing);
+ }
+ }
+ }
+ }
+
+ private static void permutations(List<Path> todo, List<Path> currentList, List<List<Path>> result) {
+ if (todo.isEmpty()) {
+ result.add(currentList);
+ return ;
+ }
+
+ for (Path p : todo) {
+ List<Path> nextTODO = new ArrayList<>(todo);
+
+ nextTODO.remove(p);
+
+ List<Path> nextList = new ArrayList<>(currentList);
+
+ nextList.add(p);
+
+ permutations(nextTODO, nextList, result);
+ }
+ }
+
+ private List<String> complete(Path test, List<Path> order, Path missing, boolean badClassFile) {
+ Context context = new Context();
+ if (badClassFile) {
+ TestClassReader.preRegister(context);
+ }
+ JavacTool tool = JavacTool.create();
+ JavacTaskImpl task = (JavacTaskImpl) tool.getTask(null, null, null, List.of("-classpath", test.toString(), "-XDblockClass=" + flatName(missing)), null, null, context);
+ Symtab syms = Symtab.instance(context);
+ Names names = Names.instance(context);
+
+ task.getElements().getTypeElement("java.lang.Object");
+
+ if (!badClassFile) {
+ //to ensure the same paths taken in ClassFinder.completeEnclosing in case the file is missing:
+ syms.enterClass(syms.unnamedModule, names.fromString(flatName(missing)));
+ }
+
+ List<String> result = new ArrayList<>();
+
+ for (Path toCheck : order) {
+ ClassSymbol sym = syms.enterClass(syms.unnamedModule, names.fromString(flatName(toCheck)));
+
+ try {
+ sym.complete();
+ } catch (CompletionFailure ignore) {
+ }
+
+ long flags = sym.flags_field;
+
+ flags &= ~(Flags.CLASS_SEEN | Flags.SOURCE_SEEN);
+
+ result.add("sym: " + sym.flatname + ", " + sym.owner.flatName() +
+ ", " + sym.type + ", " + sym.members_field + ", " + flags);
+ }
+
+ return result;
+ }
+
+ private String flatName(Path p) {
+ return p.getFileName().toString().replace(".class", "");
+ }
+
+ private static class TestClassReader extends ClassReader {
+ public static void preRegister(Context ctx) {
+ ctx.put(classReaderKey, (Factory<ClassReader>) c -> new TestClassReader(ctx));
+ }
+
+ private final String block;
+
+ public TestClassReader(Context context) {
+ super(context);
+ block = Options.instance(context).get("blockClass");
+ }
+
+ @Override
+ public void readClassFile(ClassSymbol c) {
+ super.readClassFile(c);
+
+ if (c.flatname.contentEquals(block)) {
+ throw badClassFile("blocked");
+ }
+ }
+
+ }
+
+}
--- a/nashorn/.hgtags Mon Jul 17 09:13:49 2017 -0700
+++ b/nashorn/.hgtags Thu Jul 20 09:38:13 2017 -0700
@@ -426,3 +426,4 @@
fed3f329875710c74f3ec1a0c4714046a79af100 jdk-10+14
3c6fbdf6e785aaf18d35ce9c6684369952fd22ec jdk-9+176
aa7404e062b95f679018f25eaaf933dcf0cf3f2b jdk-9+177
+f8a0c4895b2abe64a8c55af6117ffda192e34d30 jdk-10+15
--- a/nashorn/samples/barchart_weather.js Mon Jul 17 09:13:49 2017 -0700
+++ b/nashorn/samples/barchart_weather.js Thu Jul 20 09:38:13 2017 -0700
@@ -60,7 +60,7 @@
}
// change URL for your city here!
-var url = "http://api.openweathermap.org/data/2.5/forecast?q=chennai,india&units=metric&mode=json";
+var url = "http://api.openweathermap.org/data/2.5/forecast?q=chennai,india&units=metric&mode=json&appid=9b2982987c080ae88d81f081dcb129e8";
// download JSON document and parse
var json = readTextFromURL(url);
--- a/nashorn/samples/datepick.js Mon Jul 17 09:13:49 2017 -0700
+++ b/nashorn/samples/datepick.js Thu Jul 20 09:38:13 2017 -0700
@@ -37,6 +37,7 @@
}
load("fx:controls.js");
+var Scene = Java.type("javafx.scene.Scene");
function start(stage) {
var picker = new DatePicker();
--- a/nashorn/samples/jsonviewer.js Mon Jul 17 09:13:49 2017 -0700
+++ b/nashorn/samples/jsonviewer.js Thu Jul 20 09:38:13 2017 -0700
@@ -103,7 +103,7 @@
return item;
}
-var DEFAULT_URL = "http://api.openweathermap.org/data/2.5/forecast/daily?q=Chennai&mode=json&units=metric&cnt=7`";
+var DEFAULT_URL = "http://api.openweathermap.org/data/2.5/forecast?q=chennai,india&units=metric&mode=json&appid=9b2982987c080ae88d81f081dcb129e8";
var url = arguments.length == 0? DEFAULT_URL : arguments[0];
var obj = JSON.parse(readTextFromURL(url));
--- a/test/lib/jdk/test/lib/Utils.java Mon Jul 17 09:13:49 2017 -0700
+++ b/test/lib/jdk/test/lib/Utils.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * 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
@@ -680,5 +680,26 @@
String.format("A mandatory property '%s' isn't set", propName));
return prop;
}
+
+ /*
+ * Run uname with specified arguments.
+ */
+ public static OutputAnalyzer uname(String... args) throws Throwable {
+ String[] cmds = new String[args.length + 1];
+ cmds[0] = "uname";
+ System.arraycopy(args, 0, cmds, 1, args.length);
+ return ProcessTools.executeCommand(cmds);
+ }
+
+ /*
+ * Returns the system distro.
+ */
+ public static String distro() {
+ try {
+ return uname("-v").asLines().get(0);
+ } catch (Throwable t) {
+ throw new RuntimeException("Failed to determine distro.", t);
+ }
+ }
}