--- a/jdk/make/CompileDemos.gmk Thu May 11 16:26:50 2017 +0000
+++ b/jdk/make/CompileDemos.gmk Thu May 11 18:10:40 2017 +0000
@@ -291,9 +291,21 @@
################################################################################
+ifneq ($(filter images, $(MAKECMDGOALS)), )
+ $(eval $(call SetupCopyFiles, COPY_TO_TEST_IMAGE, \
+ SRC := $(SUPPORT_OUTPUTDIR)/demos/image, \
+ DEST := $(TEST_IMAGE_DIR)/jdk/demos, \
+ FILES := $(call DoubleDollar, $(call CacheFind, $(SUPPORT_OUTPUTDIR)/demos/image)), \
+ ))
+
+ IMAGES_TARGETS := $(COPY_TO_TEST_IMAGE)
+endif
+
+################################################################################
# Hook to include the corresponding custom file, if present.
$(eval $(call IncludeCustomExtension, jdk, CompileDemos.gmk))
all: $(TARGETS)
+images: $(IMAGES_TARGETS)
.PHONY: all
--- a/jdk/src/java.base/share/classes/java/io/DataInput.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/io/DataInput.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -59,8 +59,9 @@
* far left-hand column.
*
* <blockquote>
- * <table border="1" cellspacing="0" cellpadding="8"
- * summary="Bit values and bytes">
+ * <table class="plain">
+ * <caption style="display:none">Bit values and bytes</caption>
+ * <tbody>
* <tr>
* <th colspan="9"><span style="font-weight:normal">
* All characters in the range {@code '\u005Cu0001'} to
@@ -71,7 +72,7 @@
* <th colspan="8" id="bit_a">Bit Values</th>
* </tr>
* <tr>
- * <th id="byte1_a">Byte 1</th>
+ * <th id="byte1_a" style="text-align:left">Byte 1</th>
* <td style="text-align:center">0
* <td colspan="7" style="text-align:center">bits 6-0
* </tr>
@@ -86,14 +87,14 @@
* <th colspan="8" id="bit_b">Bit Values</th>
* </tr>
* <tr>
- * <th id="byte1_b">Byte 1</th>
+ * <th id="byte1_b" style="text-align:left">Byte 1</th>
* <td style="text-align:center">1
* <td style="text-align:center">1
* <td style="text-align:center">0
* <td colspan="5" style="text-align:center">bits 10-6
* </tr>
* <tr>
- * <th id="byte2_a">Byte 2</th>
+ * <th id="byte2_a" style="text-align:left">Byte 2</th>
* <td style="text-align:center">1
* <td style="text-align:center">0
* <td colspan="6" style="text-align:center">bits 5-0
@@ -108,7 +109,7 @@
* <th colspan="8"id="bit_c">Bit Values</th>
* </tr>
* <tr>
- * <th id="byte1_c">Byte 1</th>
+ * <th id="byte1_c" style="text-align:left">Byte 1</th>
* <td style="text-align:center">1
* <td style="text-align:center">1
* <td style="text-align:center">1
@@ -116,17 +117,18 @@
* <td colspan="4" style="text-align:center">bits 15-12
* </tr>
* <tr>
- * <th id="byte2_b">Byte 2</th>
+ * <th id="byte2_b" style="text-align:left">Byte 2</th>
* <td style="text-align:center">1
* <td style="text-align:center">0
* <td colspan="6" style="text-align:center">bits 11-6
* </tr>
* <tr>
- * <th id="byte3">Byte 3</th>
+ * <th id="byte3" style="text-align:left">Byte 3</th>
* <td style="text-align:center">1
* <td style="text-align:center">0
* <td colspan="6" style="text-align:center">bits 5-0
* </tr>
+ * </tbody>
* </table>
* </blockquote>
* <p>
--- a/jdk/src/java.base/share/classes/java/io/RandomAccessFile.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/io/RandomAccessFile.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -136,8 +136,12 @@
* in which the file is to be opened. The permitted values and their
* meanings are:
*
- * <table summary="Access mode permitted values and meanings">
+ * <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>
+ * </thead>
+ * <tbody>
* <tr><td style="vertical-align:top">{@code "r"}</td>
* <td> Open for reading only. Invoking any of the {@code write}
* methods of the resulting object will cause an
@@ -153,6 +157,7 @@
* <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>
+ * </tbody>
* </table>
*
* The {@code "rws"} and {@code "rwd"} modes work much like the {@link
--- a/jdk/src/java.base/share/classes/java/io/SerializablePermission.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/io/SerializablePermission.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -44,12 +44,16 @@
* and for each provides a description of what the permission allows
* and a discussion of the risks of granting code the permission.
*
- * <table border=1 cellpadding=5 summary="Permission target name, what the permission allows, and associated risks">
+ * <table class="striped">
+ * <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>
* </tr>
+ * </thead>
+ * <tbody>
*
* <tr>
* <td>enableSubclassImplementation</td>
@@ -79,7 +83,7 @@
* <td>Code could remove a configured filter and remove protections
* already established.</td>
* </tr>
- *
+ * </tbody>
* </table>
*
* @see java.security.BasicPermission
--- a/jdk/src/java.base/share/classes/java/lang/Character.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/Character.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -9566,7 +9566,9 @@
* Determines if the specified character is ISO-LATIN-1 white space.
* This method returns {@code true} for the following five
* characters only:
- * <table summary="truechars">
+ * <table class="borderless">
+ * <caption style="display:none">truechars</caption>
+ * <tbody>
* <tr><td>{@code '\t'}</td> <td>{@code U+0009}</td>
* <td>{@code HORIZONTAL TABULATION}</td></tr>
* <tr><td>{@code '\n'}</td> <td>{@code U+000A}</td>
@@ -9577,6 +9579,7 @@
* <td>{@code CARRIAGE RETURN}</td></tr>
* <tr><td>{@code ' '}</td> <td>{@code U+0020}</td>
* <td>{@code SPACE}</td></tr>
+ * </tbody>
* </table>
*
* @param ch the character to be tested.
--- a/jdk/src/java.base/share/classes/java/lang/Class.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/Class.java Thu May 11 18:10:40 2017 +0000
@@ -724,18 +724,23 @@
* one or more '{@code [}' characters representing the depth of the array
* nesting. The encoding of element type names is as follows:
*
- * <blockquote><table summary="Element types and encodings">
- * <tr><th> Element Type <th> <th> Encoding
- * <tr><td> boolean <td> <td style="text-align:center"> Z
- * <tr><td> byte <td> <td style="text-align:center"> B
- * <tr><td> char <td> <td style="text-align:center"> C
+ * <blockquote><table class="borderless">
+ * <caption style="display:none">Element types and encodings</caption>
+ * <thead>
+ * <tr><th style="padding-right:3em;"> Element Type <th> Encoding
+ * </thead>
+ * <tbody>
+ * <tr><td> boolean <td style="text-align:center"> Z
+ * <tr><td> byte <td style="text-align:center"> B
+ * <tr><td> char <td style="text-align:center"> C
* <tr><td> class or interface
- * <td> <td style="text-align:center"> L<i>classname</i>;
- * <tr><td> double <td> <td style="text-align:center"> D
- * <tr><td> float <td> <td style="text-align:center"> F
- * <tr><td> int <td> <td style="text-align:center"> I
- * <tr><td> long <td> <td style="text-align:center"> J
- * <tr><td> short <td> <td style="text-align:center"> S
+ * <td style="text-align:center"> L<i>classname</i>;
+ * <tr><td> double <td style="text-align:center"> D
+ * <tr><td> float <td style="text-align:center"> F
+ * <tr><td> int <td style="text-align:center"> I
+ * <tr><td> long <td style="text-align:center"> J
+ * <tr><td> short <td style="text-align:center"> S
+ * </tbody>
* </table></blockquote>
*
* <p> The class or interface name <i>classname</i> is the binary name of
--- a/jdk/src/java.base/share/classes/java/lang/Double.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/Double.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -255,9 +255,12 @@
*
* </ul>
*
- * <table border>
+ * <table class="plain">
* <caption>Examples</caption>
+ * <thead>
* <tr><th>Floating-point Value</th><th>Hexadecimal String</th>
+ * </thead>
+ * <tbody>
* <tr><td>{@code 1.0}</td> <td>{@code 0x1.0p0}</td>
* <tr><td>{@code -1.0}</td> <td>{@code -0x1.0p0}</td>
* <tr><td>{@code 2.0}</td> <td>{@code 0x1.0p1}</td>
@@ -272,6 +275,7 @@
* <td>{@code 0x0.fffffffffffffp-1022}</td>
* <tr><td>{@code Double.MIN_VALUE}</td>
* <td>{@code 0x0.0000000000001p-1022}</td>
+ * </tbody>
* </table>
* @param d the {@code double} to be converted.
* @return a hex string representation of the argument.
--- a/jdk/src/java.base/share/classes/java/lang/Float.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/Float.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -256,9 +256,12 @@
*
* </ul>
*
- * <table border>
+ * <table class="plain">
* <caption>Examples</caption>
+ * <thead>
* <tr><th>Floating-point Value</th><th>Hexadecimal String</th>
+ * </thead>
+ * <tbody>
* <tr><td>{@code 1.0}</td> <td>{@code 0x1.0p0}</td>
* <tr><td>{@code -1.0}</td> <td>{@code -0x1.0p0}</td>
* <tr><td>{@code 2.0}</td> <td>{@code 0x1.0p1}</td>
@@ -273,6 +276,7 @@
* <td>{@code 0x0.fffffep-126}</td>
* <tr><td>{@code Float.MIN_VALUE}</td>
* <td>{@code 0x0.000002p-126}</td>
+ * </tbody>
* </table>
* @param f the {@code float} to be converted.
* @return a hex string representation of the argument.
--- a/jdk/src/java.base/share/classes/java/lang/RuntimePermission.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/RuntimePermission.java Thu May 11 18:10:40 2017 +0000
@@ -43,13 +43,17 @@
* target names, and for each provides a description of what the permission
* allows and a discussion of the risks of granting code the permission.
*
- * <table border=1 cellpadding=5 summary="permission target name,
- * what the target allows,and associated risks">
+ * <table class="striped">
+ * <caption style="display:none">permission target name,
+ * 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>
* </tr>
+ * </thead>
+ * <tbody>
*
* <tr>
* <td>createClassLoader</td>
@@ -383,6 +387,7 @@
* {@linkplain ModuleFinder#ofSystem system modules} in the runtime image.</td>
* </tr>
*
+ * </tbody>
* </table>
*
* @implNote
--- a/jdk/src/java.base/share/classes/java/lang/String.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/String.java Thu May 11 18:10:40 2017 +0000
@@ -335,7 +335,7 @@
* subarray.
*
* <p> Each {@code byte} in the subarray is converted to a {@code char} as
- * specified in the method above.
+ * specified in the {@link #String(byte[],int) String(byte[],int)} constructor.
*
* @deprecated This method does not properly convert bytes into characters.
* As of JDK 1.1, the preferred way to do this is via the
@@ -390,7 +390,7 @@
/**
* Allocates a new {@code String} containing characters constructed from
- * an array of 8-bit integer values. Each character <i>c</i>in the
+ * an array of 8-bit integer values. Each character <i>c</i> in the
* resulting string is constructed from the corresponding component
* <i>b</i> in the byte array such that:
*
@@ -2203,12 +2203,16 @@
* <p> The string {@code "boo:and:foo"}, for example, yields the
* following results with these parameters:
*
- * <blockquote><table cellpadding=1 cellspacing=0 summary="Split example showing regex, limit, and result">
+ * <blockquote><table class="plain">
+ * <caption style="display:none">Split example showing regex, limit, and result</caption>
+ * <thead>
* <tr>
* <th>Regex</th>
* <th>Limit</th>
* <th>Result</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr><td style="text-align:center">:</td>
* <td style="text-align:center">2</td>
* <td>{@code { "boo", "and:foo" }}</td></tr>
@@ -2227,6 +2231,7 @@
* <tr><td style="text-align:center">o</td>
* <td style="text-align:center">0</td>
* <td>{@code { "b", "", ":and:f" }}</td></tr>
+ * </tbody>
* </table></blockquote>
*
* <p> An invocation of this method of the form
@@ -2326,15 +2331,20 @@
* <p> The string {@code "boo:and:foo"}, for example, yields the following
* results with these expressions:
*
- * <blockquote><table cellpadding=1 cellspacing=0 summary="Split examples showing regex and result">
+ * <blockquote><table class="plain">
+ * <caption style="display:none">Split examples showing regex and result</caption>
+ * <thead>
* <tr>
* <th>Regex</th>
* <th>Result</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr><td style="text-align:center">:</td>
* <td>{@code { "boo", "and", "foo" }}</td></tr>
* <tr><td style="text-align:center">o</td>
* <td>{@code { "b", "", ":and:f" }}</td></tr>
+ * </tbody>
* </table></blockquote>
*
*
@@ -2445,13 +2455,17 @@
* {@code String} may be a different length than the original {@code String}.
* <p>
* Examples of lowercase mappings are in the following table:
- * <table border="1" summary="Lowercase mapping examples showing language code of locale, upper case, lower case, and description">
+ * <table class="plain">
+ * <caption style="display:none">Lowercase mapping examples showing language code of locale, upper case, lower case, and description</caption>
+ * <thead>
* <tr>
* <th>Language Code of Locale</th>
* <th>Upper Case</th>
* <th>Lower Case</th>
* <th>Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td>tr (Turkish)</td>
* <td>\u0130</td>
@@ -2480,6 +2494,7 @@
* <img src="doc-files/sigma1.gif" alt="sigma"></td>
* <td>lowercased all chars in String</td>
* </tr>
+ * </tbody>
* </table>
*
* @param locale use the case transformation rules for this locale
@@ -2526,13 +2541,17 @@
* <p>
* Examples of locale-sensitive and 1:M case mappings are in the following table.
*
- * <table border="1" summary="Examples of locale-sensitive and 1:M case mappings. Shows Language code of locale, lower case, upper case, and description.">
+ * <table class="plain">
+ * <caption style="display:none">Examples of locale-sensitive and 1:M case mappings. Shows Language code of locale, lower case, upper case, and description.</caption>
+ * <thead>
* <tr>
* <th>Language Code of Locale</th>
* <th>Lower Case</th>
* <th>Upper Case</th>
* <th>Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td>tr (Turkish)</td>
* <td>\u0069</td>
@@ -2557,6 +2576,7 @@
* <td>FAHRVERGNÜGEN</td>
* <td></td>
* </tr>
+ * </tbody>
* </table>
* @param locale use the case transformation rules for this locale
* @return the {@code String}, converted to uppercase.
--- a/jdk/src/java.base/share/classes/java/lang/System.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/System.java Thu May 11 18:10:40 2017 +0000
@@ -575,9 +575,13 @@
* system properties, a set of system properties is first created and
* initialized. This set of system properties always includes values
* for the following keys:
- * <table summary="Shows property keys and associated values">
+ * <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>
+ * </thead>
+ * <tbody>
* <tr><td><code>java.version</code></td>
* <td>Java Runtime Environment version which may be interpreted
* as a {@link Runtime.Version}</td></tr>
@@ -636,6 +640,7 @@
* <td>User's home directory</td></tr>
* <tr><td><code>user.dir</code></td>
* <td>User's current working directory</td></tr>
+ * </tbody>
* </table>
* <p>
* Multiple paths in a system property value are separated by the path
@@ -647,9 +652,13 @@
*
* @implNote In addition to the standard system properties, the system
* properties may include the following keys:
- * <table summary="Shows property keys and associated values">
+ * <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>
+ * </thead>
+ * <tbody>
* <tr><td>{@code jdk.module.path}</td>
* <td>The application module path</td></tr>
* <tr><td>{@code jdk.module.upgrade.path}</td>
@@ -658,6 +667,7 @@
* <td>The module name of the initial/main module</td></tr>
* <tr><td>{@code jdk.module.main.class}</td>
* <td>The main class name of the initial module</td></tr>
+ * </tbody>
* </table>
*
* @return the system properties
--- a/jdk/src/java.base/share/classes/java/lang/invoke/LambdaMetafactory.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/LambdaMetafactory.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, 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
@@ -149,8 +149,12 @@
* capture argument (corresponding to the receiver) must be non-null.
*
* <p>A type Q is considered adaptable to S as follows:
- * <table summary="adaptable types">
+ * <table class="borderless">
+ * <caption style="display:none">adaptable types</caption>
+ * <thead>
* <tr><th>Q</th><th>S</th><th>Link-time checks</th><th>Invocation-time checks</th></tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td>Primitive</td><td>Primitive</td>
* <td>Q can be converted to S via a primitive widening conversion</td>
@@ -176,6 +180,7 @@
* <br>for return types: none</td>
* <td>Cast from Q to S</td>
* </tr>
+ * </tbody>
* </table>
*
* @apiNote These linkage methods are designed to support the evaluation
@@ -213,7 +218,9 @@
* methods.
* @since 1.8
*/
-public class LambdaMetafactory {
+public final class LambdaMetafactory {
+
+ private LambdaMetafactory() {}
/** Flag for alternate metafactories indicating the lambda object
* must be serializable */
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleInfo.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleInfo.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, 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
@@ -81,8 +81,12 @@
* The <a href="MethodHandles.Lookup.html#lookups">Lookup Factory Methods</a>
* correspond to all major use cases for methods, constructors, and fields.
* These use cases may be distinguished using small integers as follows:
- * <table border=1 cellpadding=5 summary="reference kinds">
+ * <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>
+ * </thead>
+ * <tbody>
* <tr>
* <td>{@code 1}</td><td>{@code REF_getField}</td><td>{@code class}</td>
* <td>{@code FT f;}</td><td>{@code (T) this.f;}</td>
@@ -119,6 +123,7 @@
* <td>{@code 9}</td><td>{@code REF_invokeInterface}</td><td>{@code interface}</td>
* <td>{@code T m(A*);}</td><td>{@code (T) this.m(arg*);}</td>
* </tr>
+ * </tbody>
* </table>
* @since 1.8
*/
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Thu May 11 18:10:40 2017 +0000
@@ -278,12 +278,16 @@
* (Bytecode behaviors are described in section 5.4.3.5 of the Java Virtual Machine Specification.)
* Here is a summary of the correspondence between these factory methods and
* the behavior of the resulting method handles:
- * <table border=1 cellpadding=5 summary="lookup method behaviors">
+ * <table class="striped">
+ * <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>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td>{@link java.lang.invoke.MethodHandles.Lookup#findGetter lookup.findGetter(C.class,"f",FT.class)}</td>
* <td>{@code FT f;}</td><td>{@code (T) this.f;}</td>
@@ -340,6 +344,7 @@
* <td>{@link java.lang.invoke.MethodHandles.Lookup#findClass lookup.findClass("C")}</td>
* <td>{@code class C { ... }}</td><td>{@code C.class;}</td>
* </tr>
+ * </tbody>
* </table>
*
* Here, the type {@code C} is the class or interface being searched for a member,
--- a/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedElement.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedElement.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -105,10 +105,13 @@
* <p>The table below summarizes which kind of annotation presence
* different methods in this interface examine.
*
- * <table border>
+ * <table class="plain">
* <caption>Overview of kind of presence detected by different AnnotatedElement methods</caption>
+ * <thead>
* <tr><th colspan=2></th><th colspan=4>Kind of Presence</th>
* <tr><th colspan=2>Method</th><th>Directly Present</th><th>Indirectly Present</th><th>Present</th><th>Associated</th>
+ * </thead>
+ * <tbody>
* <tr><td style="text-align:right">{@code T}</td><td>{@link #getAnnotation(Class) getAnnotation(Class<T>)}
* <td></td><td></td><td>X</td><td></td>
* </tr>
@@ -127,6 +130,7 @@
* <tr><td style="text-align:right">{@code T[]}</td><td>{@link #getDeclaredAnnotationsByType(Class) getDeclaredAnnotationsByType(Class<T>)}
* <td>X</td><td>X</td><td></td><td></td>
* </tr>
+ * </tbody>
* </table>
*
* <p>For an invocation of {@code get[Declared]AnnotationsByType( Class <
--- a/jdk/src/java.base/share/classes/java/lang/reflect/ReflectPermission.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/ReflectPermission.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -32,12 +32,16 @@
* provides a summary description of what the permission allows,
* and discusses the risks of granting code the permission.
*
- * <table border=1 cellpadding=5 summary="Table shows permission target name, what the permission allows, and associated risks">
+ * <table class="striped">
+ * <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>
* </tr>
+ * </thead>
+ * <tbody>
*
* <tr>
* <td>suppressAccessChecks</td>
@@ -58,6 +62,7 @@
* help in its attempt to compromise security in the system.</td>
* </tr>
*
+ * </tbody>
* </table>
*
* @see java.security.Permission
--- a/jdk/src/java.base/share/classes/java/math/BigDecimal.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/math/BigDecimal.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -120,15 +120,19 @@
* preferred scale for representing a result. The preferred
* scale for each operation is listed in the table below.
*
- * <table border>
+ * <table class="plain">
* <caption><b>Preferred Scales for Results of Arithmetic Operations
* </b></caption>
+ * <thead>
* <tr><th>Operation</th><th>Preferred Scale of Result</th></tr>
+ * </thead>
+ * <tbody>
* <tr><td>Add</td><td>max(addend.scale(), augend.scale())</td>
* <tr><td>Subtract</td><td>max(minuend.scale(), subtrahend.scale())</td>
* <tr><td>Multiply</td><td>multiplier.scale() + multiplicand.scale()</td>
* <tr><td>Divide</td><td>dividend.scale() - divisor.scale()</td>
* <tr><td>Square root</td><td>radicand.scale()/2</td>
+ * </tbody>
* </table>
*
* These scales are the ones used by the methods which return exact
--- a/jdk/src/java.base/share/classes/java/math/RoundingMode.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/math/RoundingMode.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -51,8 +51,9 @@
* proper {@code MathContext}. A summary table showing the results
* of these rounding operations for all rounding modes appears below.
*
- *<table border>
+ *<table class="plain">
* <caption><b>Summary of Rounding Operations Under Different Rounding Modes</b></caption>
+ * <thead>
* <tr><th></th><th colspan=8>Result of rounding input to one digit with the given
* rounding mode</th>
* <tr style="vertical-align:top">
@@ -64,6 +65,8 @@
* <th>{@code HALF_DOWN}</th>
* <th>{@code HALF_EVEN}</th>
* <th>{@code UNNECESSARY}</th>
+ * </thead>
+ * <tbody>
*
* <tr style="text-align:right"><td>5.5</td> <td>6</td> <td>5</td> <td>6</td> <td>5</td> <td>6</td> <td>5</td> <td>6</td> <td>throw {@code ArithmeticException}</td>
* <tr style="text-align:right"><td>2.5</td> <td>3</td> <td>2</td> <td>3</td> <td>2</td> <td>3</td> <td>2</td> <td>2</td> <td>throw {@code ArithmeticException}</td>
@@ -75,7 +78,8 @@
* <tr style="text-align:right"><td>-1.6</td> <td>-2</td> <td>-1</td> <td>-1</td> <td>-2</td> <td>-2</td> <td>-2</td> <td>-2</td> <td>throw {@code ArithmeticException}</td>
* <tr style="text-align:right"><td>-2.5</td> <td>-3</td> <td>-2</td> <td>-2</td> <td>-3</td> <td>-3</td> <td>-2</td> <td>-2</td> <td>throw {@code ArithmeticException}</td>
* <tr style="text-align:right"><td>-5.5</td> <td>-6</td> <td>-5</td> <td>-5</td> <td>-6</td> <td>-6</td> <td>-5</td> <td>-6</td> <td>throw {@code ArithmeticException}</td>
- *</table>
+ * </tbody>
+ * </table>
*
*
* <p>This {@code enum} is intended to replace the integer-based
@@ -100,10 +104,13 @@
* value.
*
*<p>Example:
- *<table border>
+ *<table class="plain">
* <caption><b>Rounding mode UP Examples</b></caption>
+ *<thead>
*<tr style="vertical-align:top"><th>Input Number</th>
* <th>Input rounded to one digit<br> with {@code UP} rounding
+ *</thead>
+ *<tbody>
*<tr style="text-align:right"><td>5.5</td> <td>6</td>
*<tr style="text-align:right"><td>2.5</td> <td>3</td>
*<tr style="text-align:right"><td>1.6</td> <td>2</td>
@@ -114,6 +121,7 @@
*<tr style="text-align:right"><td>-1.6</td> <td>-2</td>
*<tr style="text-align:right"><td>-2.5</td> <td>-3</td>
*<tr style="text-align:right"><td>-5.5</td> <td>-6</td>
+ *</tbody>
*</table>
*/
UP(BigDecimal.ROUND_UP),
@@ -124,10 +132,13 @@
* rounding mode never increases the magnitude of the calculated value.
*
*<p>Example:
- *<table border>
+ *<table class="plain">
* <caption><b>Rounding mode DOWN Examples</b></caption>
+ *<thead>
*<tr style="vertical-align:top"><th>Input Number</th>
* <th>Input rounded to one digit<br> with {@code DOWN} rounding
+ *</thead>
+ *<tbody>
*<tr style="text-align:right"><td>5.5</td> <td>5</td>
*<tr style="text-align:right"><td>2.5</td> <td>2</td>
*<tr style="text-align:right"><td>1.6</td> <td>1</td>
@@ -138,6 +149,7 @@
*<tr style="text-align:right"><td>-1.6</td> <td>-1</td>
*<tr style="text-align:right"><td>-2.5</td> <td>-2</td>
*<tr style="text-align:right"><td>-5.5</td> <td>-5</td>
+ *</tbody>
*</table>
*/
DOWN(BigDecimal.ROUND_DOWN),
@@ -149,10 +161,13 @@
* that this rounding mode never decreases the calculated value.
*
*<p>Example:
- *<table border>
+ *<table class="plain">
* <caption><b>Rounding mode CEILING Examples</b></caption>
+ *<thead>
*<tr style="vertical-align:top"><th>Input Number</th>
* <th>Input rounded to one digit<br> with {@code CEILING} rounding
+ *</thead>
+ *<tbody>
*<tr style="text-align:right"><td>5.5</td> <td>6</td>
*<tr style="text-align:right"><td>2.5</td> <td>3</td>
*<tr style="text-align:right"><td>1.6</td> <td>2</td>
@@ -163,6 +178,7 @@
*<tr style="text-align:right"><td>-1.6</td> <td>-1</td>
*<tr style="text-align:right"><td>-2.5</td> <td>-2</td>
*<tr style="text-align:right"><td>-5.5</td> <td>-5</td>
+ *</tbody>
*</table>
*/
CEILING(BigDecimal.ROUND_CEILING),
@@ -174,10 +190,13 @@
* this rounding mode never increases the calculated value.
*
*<p>Example:
- *<table border>
+ *<table class="plain">
* <caption><b>Rounding mode FLOOR Examples</b></caption>
+ *<thead>
*<tr style="vertical-align:top"><th>Input Number</th>
* <th>Input rounded to one digit<br> with {@code FLOOR} rounding
+ *</thead>
+ *<tbody>
*<tr style="text-align:right"><td>5.5</td> <td>5</td>
*<tr style="text-align:right"><td>2.5</td> <td>2</td>
*<tr style="text-align:right"><td>1.6</td> <td>1</td>
@@ -188,6 +207,7 @@
*<tr style="text-align:right"><td>-1.6</td> <td>-2</td>
*<tr style="text-align:right"><td>-2.5</td> <td>-3</td>
*<tr style="text-align:right"><td>-5.5</td> <td>-6</td>
+ *</tbody>
*</table>
*/
FLOOR(BigDecimal.ROUND_FLOOR),
@@ -201,10 +221,13 @@
* mode commonly taught at school.
*
*<p>Example:
- *<table border>
+ *<table class="plain">
* <caption><b>Rounding mode HALF_UP Examples</b></caption>
+ *<thead>
*<tr style="vertical-align:top"><th>Input Number</th>
* <th>Input rounded to one digit<br> with {@code HALF_UP} rounding
+ *</thead>
+ *<tbody>
*<tr style="text-align:right"><td>5.5</td> <td>6</td>
*<tr style="text-align:right"><td>2.5</td> <td>3</td>
*<tr style="text-align:right"><td>1.6</td> <td>2</td>
@@ -215,6 +238,7 @@
*<tr style="text-align:right"><td>-1.6</td> <td>-2</td>
*<tr style="text-align:right"><td>-2.5</td> <td>-3</td>
*<tr style="text-align:right"><td>-5.5</td> <td>-6</td>
+ *</tbody>
*</table>
*/
HALF_UP(BigDecimal.ROUND_HALF_UP),
@@ -227,10 +251,13 @@
* {@code RoundingMode.DOWN}.
*
*<p>Example:
- *<table border>
+ *<table class="plain">
* <caption><b>Rounding mode HALF_DOWN Examples</b></caption>
+ *<thead>
*<tr style="vertical-align:top"><th>Input Number</th>
* <th>Input rounded to one digit<br> with {@code HALF_DOWN} rounding
+ *</thead>
+ *<tbody>
*<tr style="text-align:right"><td>5.5</td> <td>5</td>
*<tr style="text-align:right"><td>2.5</td> <td>2</td>
*<tr style="text-align:right"><td>1.6</td> <td>2</td>
@@ -241,6 +268,7 @@
*<tr style="text-align:right"><td>-1.6</td> <td>-2</td>
*<tr style="text-align:right"><td>-2.5</td> <td>-2</td>
*<tr style="text-align:right"><td>-5.5</td> <td>-5</td>
+ *</tbody>
*</table>
*/
HALF_DOWN(BigDecimal.ROUND_HALF_DOWN),
@@ -260,10 +288,13 @@
* arithmetic in Java.
*
*<p>Example:
- *<table border>
+ *<table class="plain">
* <caption><b>Rounding mode HALF_EVEN Examples</b></caption>
+ *<thead>
*<tr style="vertical-align:top"><th>Input Number</th>
* <th>Input rounded to one digit<br> with {@code HALF_EVEN} rounding
+ *</thead>
+ *<tbody>
*<tr style="text-align:right"><td>5.5</td> <td>6</td>
*<tr style="text-align:right"><td>2.5</td> <td>2</td>
*<tr style="text-align:right"><td>1.6</td> <td>2</td>
@@ -274,6 +305,7 @@
*<tr style="text-align:right"><td>-1.6</td> <td>-2</td>
*<tr style="text-align:right"><td>-2.5</td> <td>-2</td>
*<tr style="text-align:right"><td>-5.5</td> <td>-6</td>
+ *</tbody>
*</table>
*/
HALF_EVEN(BigDecimal.ROUND_HALF_EVEN),
@@ -284,10 +316,13 @@
* specified on an operation that yields an inexact result, an
* {@code ArithmeticException} is thrown.
*<p>Example:
- *<table border>
+ *<table class="plain">
* <caption><b>Rounding mode UNNECESSARY Examples</b></caption>
+ *<thead>
*<tr style="vertical-align:top"><th>Input Number</th>
* <th>Input rounded to one digit<br> with {@code UNNECESSARY} rounding
+ *</thead>
+ *<tbody>
*<tr style="text-align:right"><td>5.5</td> <td>throw {@code ArithmeticException}</td>
*<tr style="text-align:right"><td>2.5</td> <td>throw {@code ArithmeticException}</td>
*<tr style="text-align:right"><td>1.6</td> <td>throw {@code ArithmeticException}</td>
@@ -298,6 +333,7 @@
*<tr style="text-align:right"><td>-1.6</td> <td>throw {@code ArithmeticException}</td>
*<tr style="text-align:right"><td>-2.5</td> <td>throw {@code ArithmeticException}</td>
*<tr style="text-align:right"><td>-5.5</td> <td>throw {@code ArithmeticException}</td>
+ *</tbody>
*</table>
*/
UNNECESSARY(BigDecimal.ROUND_UNNECESSARY);
--- a/jdk/src/java.base/share/classes/java/net/Inet4Address.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/Inet4Address.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2016, 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
@@ -41,12 +41,12 @@
* Textual representation of IPv4 address used as input to methods
* takes one of the following forms:
*
- * <blockquote><table cellpadding=0 cellspacing=0 summary="layout">
- * <tr><td>{@code d.d.d.d}</td></tr>
- * <tr><td>{@code d.d.d}</td></tr>
- * <tr><td>{@code d.d}</td></tr>
- * <tr><td>{@code d}</td></tr>
- * </table></blockquote>
+ * <blockquote><ul style="list-style-type:none">
+ * <li>{@code d.d.d.d}</li>
+ * <li>{@code d.d.d}</li>
+ * <li>{@code d.d}</li>
+ * <li>{@code d}</li>
+ * </ul></blockquote>
*
* <p> When four parts are specified, each is interpreted as a byte of
* data and assigned, from left to right, to the four bytes of an IPv4
--- a/jdk/src/java.base/share/classes/java/net/Inet6Address.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/Inet6Address.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2016, 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
@@ -49,9 +49,9 @@
* the hexadecimal values of the eight 16-bit pieces of the
* address. This is the full form. For example,
*
- * <blockquote><table cellpadding=0 cellspacing=0 summary="layout">
- * <tr><td>{@code 1080:0:0:0:8:800:200C:417A}<td></tr>
- * </table></blockquote>
+ * <blockquote><ul style="list-style-type:none">
+ * <li>{@code 1080:0:0:0:8:800:200C:417A}</li>
+ * </ul></blockquote>
*
* <p> Note that it is not necessary to write the leading zeros in
* an individual field. However, there must be at least one numeral
@@ -66,9 +66,9 @@
* The "::" can also be used to compress the leading and/or trailing
* zeros in an address. For example,
*
- * <blockquote><table cellpadding=0 cellspacing=0 summary="layout">
- * <tr><td>{@code 1080::8:800:200C:417A}<td></tr>
- * </table></blockquote>
+ * <blockquote><ul style="list-style-type:none">
+ * <li>{@code 1080::8:800:200C:417A}</li>
+ * </ul></blockquote>
*
* <li><p> An alternative form that is sometimes more convenient
* when dealing with a mixed environment of IPv4 and IPv6 nodes is
@@ -77,35 +77,35 @@
* are the decimal values of the four low-order 8-bit pieces of the
* standard IPv4 representation address, for example,
*
- * <blockquote><table cellpadding=0 cellspacing=0 summary="layout">
- * <tr><td>{@code ::FFFF:129.144.52.38}<td></tr>
- * <tr><td>{@code ::129.144.52.38}<td></tr>
- * </table></blockquote>
+ * <blockquote><ul style="list-style-type:none">
+ * <li>{@code ::FFFF:129.144.52.38}</li>
+ * <li>{@code ::129.144.52.38}</li>
+ * </ul></blockquote>
*
* <p> where "::FFFF:d.d.d.d" and "::d.d.d.d" are, respectively, the
* general forms of an IPv4-mapped IPv6 address and an
* IPv4-compatible IPv6 address. Note that the IPv4 portion must be
* in the "d.d.d.d" form. The following forms are invalid:
*
- * <blockquote><table cellpadding=0 cellspacing=0 summary="layout">
- * <tr><td>{@code ::FFFF:d.d.d}<td></tr>
- * <tr><td>{@code ::FFFF:d.d}<td></tr>
- * <tr><td>{@code ::d.d.d}<td></tr>
- * <tr><td>{@code ::d.d}<td></tr>
- * </table></blockquote>
+ * <blockquote><ul style="list-style-type:none">
+ * <li>{@code ::FFFF:d.d.d}</li>
+ * <li>{@code ::FFFF:d.d}</li>
+ * <li>{@code ::d.d.d}</li>
+ * <li>{@code ::d.d}</li>
+ * </ul></blockquote>
*
* <p> The following form:
*
- * <blockquote><table cellpadding=0 cellspacing=0 summary="layout">
- * <tr><td>{@code ::FFFF:d}<td></tr>
- * </table></blockquote>
+ * <blockquote><ul style="list-style-type:none">
+ * <li>{@code ::FFFF:d}</li>
+ * </ul></blockquote>
*
* <p> is valid, however it is an unconventional representation of
* the IPv4-compatible IPv6 address,
*
- * <blockquote><table cellpadding=0 cellspacing=0 summary="layout">
- * <tr><td>{@code ::255.255.0.d}<td></tr>
- * </table></blockquote>
+ * <blockquote><ul style="list-style-type:none">
+ * <li>{@code ::255.255.0.d}</li>
+ * </ul></blockquote>
*
* <p> while "::d" corresponds to the general IPv6 address
* "0:0:0:0:0:0:0:d".</li>
@@ -119,9 +119,10 @@
* <h4> Special IPv6 address </h4>
*
* <blockquote>
- * <table cellspacing=2 summary="Description of IPv4-mapped address">
- * <tr><th valign=top><i>IPv4-mapped address</i></th>
- * <td>Of the form::ffff:w.x.y.z, this IPv6 address is used to
+ * <table class="borderless">
+ * <caption style="display:none">Description of IPv4-mapped address</caption>
+ * <tr><th style="vertical-align:top; padding-right:2px"><i>IPv4-mapped address</i></th>
+ * <td>Of the form ::ffff:w.x.y.z, this IPv6 address is used to
* represent an IPv4 address. It allows the native program to
* use the same address data structure and also the same
* socket when communicating with both IPv4 and IPv6 nodes.
--- a/jdk/src/java.base/share/classes/java/net/InetAddress.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/InetAddress.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -72,7 +72,9 @@
*
* <h3> Address types </h3>
*
- * <blockquote><table cellspacing=2 summary="Description of unicast and multicast address types">
+ * <blockquote><table class="borderless">
+ * <caption style="display:none">Description of unicast and multicast address types</caption>
+ * <tbody>
* <tr><th valign=top><i>unicast</i></th>
* <td>An identifier for a single interface. A packet sent to
* a unicast address is delivered to the interface identified by
@@ -96,6 +98,7 @@
* <td>An identifier for a set of interfaces (typically belonging
* to different nodes). A packet sent to a multicast address is
* delivered to all interfaces identified by that address.</td></tr>
+ * </tbody>
* </table></blockquote>
*
* <h4> IP address scope </h4>
--- a/jdk/src/java.base/share/classes/java/net/NetPermission.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/NetPermission.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -47,12 +47,16 @@
* and for each provides a description of what the permission allows
* and a discussion of the risks of granting code the permission.
*
- * <table border=1 cellpadding=5 summary="Permission target name, what the permission allows, and associated risks">
+ * <table class="striped">
+ * <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>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td>allowHttpTrace</td>
* <td>The ability to use the HTTP TRACE method in HttpURLConnection.</td>
@@ -151,6 +155,7 @@
* creating a ProtectionDomain/CodeSource for a class even though
* that class really didn't come from that location.</td>
* </tr>
+ </tbody>
* </table>
*
* @see java.security.BasicPermission
--- a/jdk/src/java.base/share/classes/java/net/URI.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/URI.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2016, 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
@@ -83,11 +83,11 @@
* not begin with a slash character ({@code '/'}). Opaque URIs are not
* subject to further parsing. Some examples of opaque URIs are:
*
- * <blockquote><table cellpadding=0 cellspacing=0 summary="layout">
- * <tr><td>{@code mailto:java-net@java.sun.com}<td></tr>
- * <tr><td>{@code news:comp.lang.java}<td></tr>
- * <tr><td>{@code urn:isbn:096139210x}</td></tr>
- * </table></blockquote>
+ * <blockquote><ul style="list-style-type:none">
+ * <li>{@code mailto:java-net@java.sun.com}</li>
+ * <li>{@code news:comp.lang.java}</li>
+ * <li>{@code urn:isbn:096139210x}</li>
+ * </ul></blockquote>
*
* <p> A <i>hierarchical</i> URI is either an absolute URI whose
* scheme-specific part begins with a slash character, or a relative URI, that
@@ -132,8 +132,12 @@
*
* <p> All told, then, a URI instance has the following nine components:
*
- * <blockquote><table summary="Describes the components of a URI:scheme,scheme-specific-part,authority,user-info,host,port,path,query,fragment">
+ * <blockquote><table class="borderless">
+ * <caption style="display:none">Describes the components of a URI:scheme,scheme-specific-part,authority,user-info,host,port,path,query,fragment</caption>
+ * <thead>
* <tr><th><i>Component</i></th><th><i>Type</i></th></tr>
+ * </thead>
+ * <tbody>
* <tr><td>scheme</td><td>{@code String}</td></tr>
* <tr><td>scheme-specific-part </td><td>{@code String}</td></tr>
* <tr><td>authority</td><td>{@code String}</td></tr>
@@ -143,6 +147,7 @@
* <tr><td>path</td><td>{@code String}</td></tr>
* <tr><td>query</td><td>{@code String}</td></tr>
* <tr><td>fragment</td><td>{@code String}</td></tr>
+ * </tbody>
* </table></blockquote>
*
* In a given instance any particular component is either <i>undefined</i> or
@@ -248,7 +253,9 @@
* which are taken from that specification, are used below to describe these
* constraints:
*
- * <blockquote><table cellspacing=2 summary="Describes categories alpha,digit,alphanum,unreserved,punct,reserved,escaped,and other">
+ * <blockquote><table>
+ * <caption style="display:none">Describes categories alpha,digit,alphanum,unreserved,punct,reserved,escaped,and other</caption>
+ * <tbody>
* <tr><th valign=top><i>alpha</i></th>
* <td>The US-ASCII alphabetic characters,
* {@code 'A'} through {@code 'Z'}
@@ -279,6 +286,7 @@
* java.lang.Character#isSpaceChar(char) Character.isSpaceChar}
* method) <i>(<b>Deviation from RFC 2396</b>, which is
* limited to US-ASCII)</i></td></tr>
+ * </tbody>
* </table></blockquote>
*
* <p><a id="legal-chars"></a> The set of all legal URI characters consists of
--- a/jdk/src/java.base/share/classes/java/net/URLConnection.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/URLConnection.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -54,13 +54,18 @@
* read from and to write to the resource referenced by the URL. In
* general, creating a connection to a URL is a multistep process:
*
- * <div style="text-align:center"><table style="margin:0 auto" border=2 summary="Describes the process of creating a connection to a URL: openConnection() and connect() over time.">
+ * <div style="text-align:center"><table class="plain" style="margin:0 auto">
+ * <caption style="display:none">Describes the process of creating a connection to a URL: openConnection() and connect() over time.</caption>
+ * <thead>
* <tr><th>{@code openConnection()}</th>
* <th>{@code connect()}</th></tr>
+ * </thead>
+ * <tbody>
* <tr><td>Manipulate parameters that affect the connection to the remote
* resource.</td>
* <td>Interact with the resource; query header fields and
* contents.</td></tr>
+ * </tbody>
* </table>
* ---------------------------->
* <br>time</div>
--- a/jdk/src/java.base/share/classes/java/net/URLPermission.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/net/URLPermission.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -72,9 +72,12 @@
* separated by '/' characters. <i>path</i> may also be empty. The path is specified
* in a similar way to the path in {@link java.io.FilePermission}. There are
* three different ways as the following examples show:
- * <table border>
+ * <table class="plain">
* <caption>URL Examples</caption>
+ * <thead>
* <tr><th>Example url</th><th>Description</th></tr>
+ * </thead>
+ * <tbody>
* <tr><td style="white-space:nowrap;">http://www.oracle.com/a/b/c.html</td>
* <td>A url which identifies a specific (single) resource</td>
* </tr>
@@ -90,6 +93,7 @@
* example).
* </td>
* </tr>
+ * </tbody>
* </table>
* <p>
* The '*' and '-' may only be specified in the final segment of a path and must be
@@ -246,9 +250,12 @@
* <li>otherwise, return false</li>
* </ul>
* <p>Some examples of how paths are matched are shown below:
- * <table border>
+ * <table class="plain">
* <caption>Examples of Path Matching</caption>
+ * <thead>
* <tr><th>this's path</th><th>p's path</th><th>match</th></tr>
+ * </thead>
+ * <tbody>
* <tr><td>/a/b</td><td>/a/b</td><td>yes</td></tr>
* <tr><td>/a/b/*</td><td>/a/b/c</td><td>yes</td></tr>
* <tr><td>/a/b/*</td><td>/a/b/c/d</td><td>no</td></tr>
@@ -256,6 +263,7 @@
* <tr><td>/a/b/-</td><td>/a/b/c/d/e</td><td>yes</td></tr>
* <tr><td>/a/b/-</td><td>/a/b/c/*</td><td>yes</td></tr>
* <tr><td>/a/b/*</td><td>/a/b/c/-</td><td>no</td></tr>
+ * </tbody>
* </table>
*/
public boolean implies(Permission p) {
--- a/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousChannelGroup.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousChannelGroup.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -60,11 +60,15 @@
* default group is not configured then the pooled threads of the default group
* are {@link Thread#isDaemon daemon} threads.
*
- * <table border summary="System properties">
+ * <table class="striped">
+ * <caption style="display:none:">System properties</caption>
+ * <thead>
* <tr>
* <th>System property</th>
* <th>Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> {@code java.nio.channels.DefaultThreadPool.threadFactory} </td>
* <td> The value of this property is taken to be the fully-qualified name
@@ -86,6 +90,7 @@
* unspecified error to be thrown during the construction of the default
* group. </td>
* </tr>
+ * </tbody>
* </table>
*
* <a id="threading"></a><h2>Threading</h2>
--- a/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousFileChannel.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousFileChannel.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -133,8 +133,12 @@
* <p> In addition to {@code READ} and {@code WRITE}, the following options
* may be present:
*
- * <table border=1 cellpadding=5 summary="">
+ * <table class="striped">
+ * <caption style="display:none">additional options</caption>
+ * <thead>
* <tr> <th>Option</th> <th>Description</th> </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> {@link StandardOpenOption#TRUNCATE_EXISTING TRUNCATE_EXISTING} </td>
* <td> When opening an existing file, the file is first truncated to a
@@ -186,6 +190,7 @@
* href="../file/package-summary.html#integrity"> Synchronized I/O file
* integrity</a>). </td>
* </tr>
+ * </tbody>
* </table>
*
* <p> An implementation may also support additional options.
--- a/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousServerSocketChannel.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousServerSocketChannel.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -52,11 +52,15 @@
* <p> Socket options are configured using the {@link #setOption(SocketOption,Object)
* setOption} method. Channels of this type support the following options:
* <blockquote>
- * <table border summary="Socket options">
+ * <table class="striped">
+ * <caption style="display:none">Socket options</caption>
+ * <thead>
* <tr>
* <th>Option Name</th>
* <th>Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td>
@@ -65,6 +69,7 @@
* <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> Re-use address </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
* Additional (implementation specific) options may also be supported.
--- a/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousSocketChannel.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousSocketChannel.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -62,11 +62,15 @@
* <p> Socket options are configured using the {@link #setOption(SocketOption,Object)
* setOption} method. Asynchronous socket channels support the following options:
* <blockquote>
- * <table border summary="Socket options">
+ * <table class="striped">
+ * <caption style="display:none">Socket options</caption>
+ * <thead>
* <tr>
* <th>Option Name</th>
* <th>Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td>
@@ -87,6 +91,7 @@
* <td> {@link java.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAY} </td>
* <td> Disable the Nagle algorithm </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
* Additional (implementation specific) options may also be supported.
--- a/jdk/src/java.base/share/classes/java/nio/channels/DatagramChannel.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/channels/DatagramChannel.java Thu May 11 18:10:40 2017 +0000
@@ -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,11 +57,15 @@
* setOption} method. A datagram channel to an Internet Protocol socket supports
* the following options:
* <blockquote>
- * <table border summary="Socket options">
+ * <table class="striped">
+ * <caption style="display:none">Socket options</caption>
+ * <thead>
* <tr>
* <th>Option Name</th>
* <th>Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td>
@@ -97,6 +101,7 @@
* IP_MULTICAST_LOOP} </td>
* <td> Loopback for Internet Protocol (IP) multicast datagrams </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
* Additional (implementation specific) options may also be supported.
--- a/jdk/src/java.base/share/classes/java/nio/channels/FileChannel.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/channels/FileChannel.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -174,8 +174,12 @@
* <p> In the addition to {@code READ} and {@code WRITE}, the following
* options may be present:
*
- * <table border=1 cellpadding=5 summary="">
+ * <table class="striped">
+ * <caption style="display:none">additional options</caption>
+ * <thead>
* <tr> <th>Option</th> <th>Description</th> </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> {@link StandardOpenOption#APPEND APPEND} </td>
* <td> If this option is present then the file is opened for writing and
@@ -237,6 +241,7 @@
* href="../file/package-summary.html#integrity"> Synchronized I/O file
* integrity</a>). </td>
* </tr>
+ * </tbody>
* </table>
*
* <p> An implementation may also support additional options.
--- a/jdk/src/java.base/share/classes/java/nio/channels/ServerSocketChannel.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/channels/ServerSocketChannel.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -46,11 +46,15 @@
* <p> Socket options are configured using the {@link #setOption(SocketOption,Object)
* setOption} method. Server-socket channels support the following options:
* <blockquote>
- * <table border summary="Socket options">
+ * <table class="striped">
+ * <caption style="display:none">Socket options</caption>
+ * <thead>
* <tr>
* <th>Option Name</th>
* <th>Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td>
@@ -59,6 +63,7 @@
* <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> Re-use address </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
* Additional (implementation specific) options may also be supported.
--- a/jdk/src/java.base/share/classes/java/nio/channels/SocketChannel.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/channels/SocketChannel.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -66,11 +66,15 @@
* <p> Socket options are configured using the {@link #setOption(SocketOption,Object)
* setOption} method. Socket channels support the following options:
* <blockquote>
- * <table border summary="Socket options">
+ * <table class="striped">
+ * <caption style="display:none">Socket options</caption>
+ * <thead>
* <tr>
* <th>Option Name</th>
* <th>Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td>
@@ -96,6 +100,7 @@
* <td> {@link java.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAY} </td>
* <td> Disable the Nagle algorithm </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
* Additional (implementation specific) options may also be supported.
--- a/jdk/src/java.base/share/classes/java/nio/charset/Charset.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/charset/Charset.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -147,8 +147,12 @@
* implementation to see if any other charsets are supported. The behavior
* of such optional charsets may differ between implementations.
*
- * <blockquote><table style="width:80%" summary="Description of standard charsets">
+ * <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>
+ * </thead>
+ * <tbody>
* <tr><td style="vertical-align:top">{@code US-ASCII}</td>
* <td>Seven-bit ASCII, a.k.a. {@code ISO646-US},
* a.k.a. the Basic Latin block of the Unicode character set</td></tr>
@@ -165,6 +169,7 @@
* <tr><td style="vertical-align:top">{@code UTF-16}</td>
* <td>Sixteen-bit UCS Transformation Format,
* byte order identified by an optional byte-order mark</td></tr>
+ * </tbody>
* </table></blockquote>
*
* <p> The {@code UTF-8} charset is specified by <a
--- a/jdk/src/java.base/share/classes/java/nio/file/FileSystem.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/file/FileSystem.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -315,7 +315,9 @@
* that resembles regular expressions but with a simpler syntax. For example:
*
* <blockquote>
- * <table border="0" summary="Pattern Language">
+ * <table class="borderless">
+ * <caption style="display:none">Pattern Language</caption>
+ * <tbody>
* <tr>
* <td>{@code *.java}</td>
* <td>Matches a path that represents a file name ending in {@code .java}</td>
@@ -348,7 +350,7 @@
* platform (note that the backslash is escaped; as a string literal in the
* Java Language the pattern would be <code>"C:\\\\*"</code>) </td>
* </tr>
- *
+ * </tbody>
* </table>
* </blockquote>
*
--- a/jdk/src/java.base/share/classes/java/nio/file/Files.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/file/Files.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -233,8 +233,12 @@
* <p> In the addition to {@code READ} and {@code WRITE}, the following
* options may be present:
*
- * <table border=1 cellpadding=5 summary="Options">
+ * <table class="striped">
+ * <caption style="display:none">Options</caption>
+ * <thead>
* <tr> <th>Option</th> <th>Description</th> </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> {@link StandardOpenOption#APPEND APPEND} </td>
* <td> If this option is present then the file is opened for writing and
@@ -294,6 +298,7 @@
* href="package-summary.html#integrity"> Synchronized I/O file
* integrity</a>). </td>
* </tr>
+ * </tbody>
* </table>
*
* <p> An implementation may also support additional implementation specific
@@ -1188,8 +1193,12 @@
*
* <p> The {@code options} parameter may include any of the following:
*
- * <table border=1 cellpadding=5 summary="">
+ * <table class="striped">
+ * <caption style="display:none">Options</caption>
+ * <thead>
* <tr> <th>Option</th> <th>Description</th> </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> {@link StandardCopyOption#REPLACE_EXISTING REPLACE_EXISTING} </td>
* <td> If the target file exists, then the target file is replaced if it
@@ -1215,6 +1224,7 @@
* new link. In other words, the {@code COPY_ATTRIBUTES} option may be
* ignored when copying a symbolic link. </td>
* </tr>
+ * </tbody>
* </table>
*
* <p> An implementation of this interface may support additional
@@ -1306,8 +1316,12 @@
*
* <p> The {@code options} parameter may include any of the following:
*
- * <table border=1 cellpadding=5 summary="">
+ * <table class="striped">
+ * <caption style="display:none">Options</caption>
+ * <thead>
* <tr> <th>Option</th> <th>Description</th> </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> {@link StandardCopyOption#REPLACE_EXISTING REPLACE_EXISTING} </td>
* <td> If the target file exists, then the target file is replaced if it
@@ -1326,6 +1340,7 @@
* example, when the target location is on a different {@code FileStore}
* and would require that the file be copied, or target location is
* associated with a different provider to this object. </td>
+ * </tbody>
* </table>
*
* <p> An implementation of this interface may support additional
@@ -1909,7 +1924,9 @@
* attributes} parameter:
*
* <blockquote>
- * <table border="0" summary="Possible values">
+ * <table class="borderless">
+ * <caption style="display:none">Possible values</caption>
+ * <tbody>
* <tr>
* <td> {@code "*"} </td>
* <td> Read all {@link BasicFileAttributes basic-file-attributes}. </td>
@@ -1927,6 +1944,7 @@
* <td> {@code "posix:permissions,owner,size"} </td>
* <td> Reads the POSIX file permissions, owner, and file size. </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
*
--- a/jdk/src/java.base/share/classes/java/nio/file/LinkPermission.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/file/LinkPermission.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -33,13 +33,16 @@
* <p> The following table provides a summary description of what the permission
* allows, and discusses the risks of granting code the permission.
*
- * <table border=1 cellpadding=5
- * summary="Table shows permission target name, what the permission allows, and associated risks">
+ * <table class="striped">
+ * <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>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td>hard</td>
* <td> Ability to add an existing file to a directory. This is sometimes
@@ -55,6 +58,7 @@
* linking to any file or directory in the file system thus allowing the
* attacker to access to all files. </td>
* </tr>
+ * </tbody>
* </table>
*
* @since 1.7
--- a/jdk/src/java.base/share/classes/java/nio/file/attribute/AclFileAttributeView.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/file/attribute/AclFileAttributeView.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -94,11 +94,15 @@
* <p> Where dynamic access to file attributes is required, the attributes
* supported by this attribute view are as follows:
* <blockquote>
- * <table border="1" cellpadding="8" summary="Supported attributes">
+ * <table class="striped">
+ * <caption style="display:none">Supported attributes</caption>
+ * <thead>
* <tr>
* <th> Name </th>
* <th> Type </th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> "acl" </td>
* <td> {@link List}<{@link AclEntry}> </td>
@@ -107,6 +111,7 @@
* <td> "owner" </td>
* <td> {@link UserPrincipal} </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
*
--- a/jdk/src/java.base/share/classes/java/nio/file/attribute/BasicFileAttributeView.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/file/attribute/BasicFileAttributeView.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -41,11 +41,15 @@
* <p> Where dynamic access to file attributes is required, the attributes
* supported by this attribute view have the following names and types:
* <blockquote>
- * <table border="1" cellpadding="8" summary="Supported attributes">
+ * <table class="striped">
+ * <caption style="display:none">Supported attributes</caption>
+ * <thead>
* <tr>
* <th> Name </th>
* <th> Type </th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> "lastModifiedTime" </td>
* <td> {@link FileTime} </td>
@@ -82,6 +86,7 @@
* <td> "fileKey" </td>
* <td> {@link Object} </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
*
--- a/jdk/src/java.base/share/classes/java/nio/file/attribute/DosFileAttributeView.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/file/attribute/DosFileAttributeView.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -41,11 +41,15 @@
* BasicFileAttributeView}, and in addition, the following attributes are
* supported:
* <blockquote>
- * <table border="1" cellpadding="8" summary="Supported attributes">
+ * <table class="striped">
+ * <caption style="display:none">Supported attributes</caption>
+ * <thead>
* <tr>
* <th> Name </th>
* <th> Type </th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> readonly </td>
* <td> {@link Boolean} </td>
@@ -62,6 +66,7 @@
* <td> archive </td>
* <td> {@link Boolean} </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
*
--- a/jdk/src/java.base/share/classes/java/nio/file/attribute/PosixFileAttributeView.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/file/attribute/PosixFileAttributeView.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -74,11 +74,15 @@
* BasicFileAttributeView} and {@link FileOwnerAttributeView}, and in addition,
* the following attributes are supported:
* <blockquote>
- * <table border="1" cellpadding="8" summary="Supported attributes">
+ * <table class="striped">
+ * <caption style="display:none">Supported attributes</caption>
+ * <thead>
* <tr>
* <th> Name </th>
* <th> Type </th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> "permissions" </td>
* <td> {@link Set}<{@link PosixFilePermission}> </td>
@@ -87,6 +91,7 @@
* <td> "group" </td>
* <td> {@link GroupPrincipal} </td>
* </tr>
+ * </tbody>
* </table>
* </blockquote>
*
--- a/jdk/src/java.base/share/classes/java/nio/file/spi/FileSystemProvider.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/file/spi/FileSystemProvider.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -919,8 +919,12 @@
* according to all of access modes specified in the {@code modes} parameter
* as follows:
*
- * <table border=1 cellpadding=5 summary="">
+ * <table class="striped">
+ * <caption style="display:none">Access Modes</caption>
+ * <thead>
* <tr> <th>Value</th> <th>Description</th> </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td> {@link AccessMode#READ READ} </td>
* <td> Checks that the file exists and that the Java virtual machine has
@@ -940,6 +944,7 @@
* virtual machine has permission to search the directory in order to
* access file or subdirectories. </td>
* </tr>
+ * </tbody>
* </table>
*
* <p> If the {@code modes} parameter is of length zero, then the existence
--- a/jdk/src/java.base/share/classes/java/security/AlgorithmParameterGenerator.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/AlgorithmParameterGenerator.java Thu May 11 18:10:40 2017 +0000
@@ -75,9 +75,9 @@
* <li>{@code DSA} (1024, 2048)</li>
* </ul>
* These algorithms are described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameterGenerator">
+ * "{@docRoot}/../specs/security/standard-names.html#algorithmparametergenerator-algorithms">
* AlgorithmParameterGenerator section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -150,8 +150,8 @@
* @param algorithm the name of the algorithm this
* parameter generator is associated with.
* See the AlgorithmParameterGenerator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameterGenerator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#algorithmparametergenerator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return the new {@code AlgorithmParameterGenerator} object
@@ -195,8 +195,8 @@
* @param algorithm the name of the algorithm this
* parameter generator is associated with.
* See the AlgorithmParameterGenerator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameterGenerator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#algorithmparametergenerator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the string name of the Provider.
@@ -245,8 +245,8 @@
* @param algorithm the string name of the algorithm this
* parameter generator is associated with.
* See the AlgorithmParameterGenerator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameterGenerator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#algorithmparametergenerator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the {@code Provider} object.
--- a/jdk/src/java.base/share/classes/java/security/AlgorithmParameters.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/AlgorithmParameters.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -57,9 +57,9 @@
* <li>{@code DSA}</li>
* </ul>
* These algorithms are described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameters">
+ * "{@docRoot}/../specs/security/standard-names.html#algorithmparameters-algorithms">
* AlgorithmParameters section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -137,8 +137,8 @@
*
* @param algorithm the name of the algorithm requested.
* See the AlgorithmParameters section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameters">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#algorithmparameters-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return the new parameter object
@@ -182,8 +182,8 @@
*
* @param algorithm the name of the algorithm requested.
* See the AlgorithmParameters section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameters">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#algorithmparameters-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the name of the provider.
@@ -232,8 +232,8 @@
*
* @param algorithm the name of the algorithm requested.
* See the AlgorithmParameters section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameters">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#algorithmparameters-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the name of the provider.
--- a/jdk/src/java.base/share/classes/java/security/DrbgParameters.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/DrbgParameters.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -188,7 +188,7 @@
* @implSpec
* By convention, a provider should name its primary DRBG implementation
* with the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
+ * "{@docRoot}/../specs/security/standard-names.html#securerandom-number-generation-algorithms">
* standard {@code SecureRandom} algorithm name</a> "DRBG".
*
* @implNote
@@ -263,14 +263,19 @@
* Capability effective = ((DrbgParametes.Initiate) s.getParameters())
* .getCapability();</pre>
* </blockquote>
- * <table border=1 summary="requested and effective capabilities">
+ * <table class="plain">
+ * <caption style="display:none">requested and effective capabilities</caption>
+ * <thead>
* <tr>
* <th>Requested Value</th>
* <th>Possible Effective Values</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr><td>NONE</td><td>NONE, RESEED_ONLY, PR_AND_RESEED</td></tr>
* <tr><td>RESEED_ONLY</td><td>RESEED_ONLY, PR_AND_RESEED</td></tr>
* <tr><td>PR_AND_RESEED</td><td>PR_AND_RESEED</td></tr>
+ * </tbody>
* </table>
* <p>
* A DRBG implementation supporting prediction resistance must also
--- a/jdk/src/java.base/share/classes/java/security/KeyFactory.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/KeyFactory.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -75,9 +75,9 @@
* <li>{@code RSA}</li>
* </ul>
* These algorithms are described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyFactory">
+ * "{@docRoot}/../specs/security/standard-names.html#keyfactory-algorithms">
* KeyFactory section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -163,8 +163,8 @@
*
* @param algorithm the name of the requested key algorithm.
* See the KeyFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keyfactory-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return the new {@code KeyFactory} object
@@ -197,8 +197,8 @@
*
* @param algorithm the name of the requested key algorithm.
* See the KeyFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keyfactory-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the name of the provider.
@@ -239,8 +239,8 @@
*
* @param algorithm the name of the requested key algorithm.
* See the KeyFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keyfactory-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the provider.
--- a/jdk/src/java.base/share/classes/java/security/KeyPairGenerator.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/KeyPairGenerator.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -114,9 +114,9 @@
* <li>{@code RSA} (1024, 2048, 4096)</li>
* </ul>
* These algorithms are described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyPairGenerator">
+ * "{@docRoot}/../specs/security/standard-names.html#keypairgenerator-algorithms">
* KeyPairGenerator section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -142,8 +142,8 @@
*
* @param algorithm the standard string name of the algorithm.
* See the KeyPairGenerator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyPairGenerator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keypairgenerator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*/
protected KeyPairGenerator(String algorithm) {
@@ -153,8 +153,8 @@
/**
* Returns the standard name of the algorithm for this key pair generator.
* See the KeyPairGenerator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyPairGenerator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keypairgenerator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return the standard string name of the algorithm.
@@ -205,8 +205,8 @@
*
* @param algorithm the standard string name of the algorithm.
* See the KeyPairGenerator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyPairGenerator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keypairgenerator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return the new {@code KeyPairGenerator} object
@@ -264,8 +264,8 @@
*
* @param algorithm the standard string name of the algorithm.
* See the KeyPairGenerator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyPairGenerator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keypairgenerator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the string name of the provider.
@@ -306,8 +306,8 @@
*
* @param algorithm the standard string name of the algorithm.
* See the KeyPairGenerator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyPairGenerator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keypairgenerator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the provider.
--- a/jdk/src/java.base/share/classes/java/security/KeyStore.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/KeyStore.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -176,9 +176,9 @@
* <li>{@code PKCS12}</li>
* </ul>
* This type is described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyStore">
+ * "{@docRoot}/../specs/security/standard-names.html#keystore-types">
* KeyStore section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other types are supported.
*
@@ -291,9 +291,8 @@
* @param protectionAlgorithm the encryption algorithm name, for
* example, {@code PBEWithHmacSHA256AndAES_256}.
* See the Cipher section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Cipher">
- * Java Cryptography Architecture Standard Algorithm Name
- * Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#cipher-algorithm-names">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard encryption algorithm names.
* @param protectionParameters the encryption algorithm parameter
* specification, which may be {@code null}
@@ -854,8 +853,8 @@
*
* @param type the type of keystore.
* See the KeyStore section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyStore">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keystore-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard keystore types.
*
* @return a keystore object of the specified type
@@ -895,8 +894,8 @@
*
* @param type the type of keystore.
* See the KeyStore section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyStore">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keystore-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard keystore types.
*
* @param provider the name of the provider.
@@ -941,8 +940,8 @@
*
* @param type the type of keystore.
* See the KeyStore section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyStore">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keystore-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard keystore types.
*
* @param provider the provider.
--- a/jdk/src/java.base/share/classes/java/security/MessageDigest.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/MessageDigest.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -89,9 +89,9 @@
* <li>{@code SHA-256}</li>
* </ul>
* These algorithms are described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#MessageDigest">
+ * "{@docRoot}/../specs/security/standard-names.html#messagedigest-algorithms">
* MessageDigest section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -123,8 +123,8 @@
*
* @param algorithm the standard name of the digest algorithm.
* See the MessageDigest section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#MessageDigest">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#messagedigest-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*/
protected MessageDigest(String algorithm) {
@@ -154,8 +154,8 @@
*
* @param algorithm the name of the algorithm requested.
* See the MessageDigest section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#MessageDigest">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#messagedigest-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return a {@code MessageDigest} object that implements the
@@ -209,8 +209,8 @@
*
* @param algorithm the name of the algorithm requested.
* See the MessageDigest section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#MessageDigest">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#messagedigest-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the name of the provider.
@@ -262,8 +262,8 @@
*
* @param algorithm the name of the algorithm requested.
* See the MessageDigest section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#MessageDigest">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#messagedigest-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the provider.
@@ -497,8 +497,8 @@
* implementation details. The name should be a standard
* Java Security name (such as "SHA", "MD5", and so on).
* See the MessageDigest section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#MessageDigest">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#messagedigest-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return the name of the algorithm
--- a/jdk/src/java.base/share/classes/java/security/Policy.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Policy.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -365,8 +365,8 @@
*
* @param type the specified Policy type. See the Policy section in the
* <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Policy">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#policy-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for a list of standard Policy types.
*
* @param params parameters for the Policy, which may be null.
@@ -419,8 +419,8 @@
*
* @param type the specified Policy type. See the Policy section in the
* <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Policy">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#policy-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for a list of standard Policy types.
*
* @param params parameters for the Policy, which may be null.
@@ -485,8 +485,8 @@
*
* @param type the specified Policy type. See the Policy section in the
* <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Policy">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#policy-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for a list of standard Policy types.
*
* @param params parameters for the Policy, which may be null.
--- a/jdk/src/java.base/share/classes/java/security/Provider.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Provider.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -61,17 +61,21 @@
* security framework. Services of this type cannot be added, removed,
* or modified by applications.
* The following attributes are automatically placed in each Provider object:
- * <table cellspacing=4>
+ * <table class="plain">
* <caption><b>Attributes Automatically Placed in a Provider Object</b></caption>
+ * <thead>
* <tr><th>Name</th><th>Value</th>
+ * </thead>
+ * <tbody>
* <tr><td>{@code Provider.id name}</td>
- * <td>{@code String.valueOf(provider.getName())}</td>
+ * <td>{@code String.valueOf(provider.getName())}</td>
* <tr><td>{@code Provider.id version}</td>
* <td>{@code String.valueOf(provider.getVersionStr())}</td>
* <tr><td>{@code Provider.id info}</td>
- <td>{@code String.valueOf(provider.getInfo())}</td>
+ * <td>{@code String.valueOf(provider.getInfo())}</td>
* <tr><td>{@code Provider.id className}</td>
* <td>{@code provider.getClass().getName()}</td>
+ * </tbody>
* </table>
*
* <p>Each provider has a name and a version string. A provider normally
--- a/jdk/src/java.base/share/classes/java/security/SecureRandom.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/SecureRandom.java Thu May 11 18:10:40 2017 +0000
@@ -126,7 +126,7 @@
* @implSpec
* A {@code SecureRandom} service provider can advertise that it is thread-safe
* by setting the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Service">service
+ * "{@docRoot}/../specs/security/standard-names.html#service-attributes">service
* provider attribute</a> "ThreadSafe" to "true" when registering the provider.
* Otherwise, this class will instead synchronize access to the following
* methods of the {@code SecureRandomSpi} implementation:
@@ -203,8 +203,8 @@
* the {@link Security#getProviders() Security.getProviders()} method.
*
* <p> See the {@code SecureRandom} section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#securerandom-number-generation-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard RNG algorithm names.
*/
public SecureRandom() {
@@ -244,8 +244,8 @@
* the {@link Security#getProviders() Security.getProviders()} method.
*
* <p> See the {@code SecureRandom} section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#securerandom-number-generation-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard RNG algorithm names.
*
* @param seed the seed.
@@ -341,8 +341,8 @@
*
* @param algorithm the name of the RNG algorithm.
* See the {@code SecureRandom} section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#securerandom-number-generation-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard RNG algorithm names.
*
* @return the new {@code SecureRandom} object
@@ -380,8 +380,8 @@
*
* @param algorithm the name of the RNG algorithm.
* See the {@code SecureRandom} section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#securerandom-number-generation-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard RNG algorithm names.
*
* @param provider the name of the provider.
@@ -424,8 +424,8 @@
*
* @param algorithm the name of the RNG algorithm.
* See the {@code SecureRandom} section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#securerandom-number-generation-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard RNG algorithm names.
*
* @param provider the provider.
@@ -478,8 +478,8 @@
*
* @param algorithm the name of the RNG algorithm.
* See the {@code SecureRandom} section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#securerandom-number-generation-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard RNG algorithm names.
*
* @param params the {@code SecureRandomParameters}
@@ -528,8 +528,8 @@
*
* @param algorithm the name of the RNG algorithm.
* See the {@code SecureRandom} section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#securerandom-number-generation-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard RNG algorithm names.
*
* @param params the {@code SecureRandomParameters}
@@ -581,8 +581,8 @@
*
* @param algorithm the name of the RNG algorithm.
* See the {@code SecureRandom} section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#securerandom-number-generation-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard RNG algorithm names.
*
* @param params the {@code SecureRandomParameters}
--- a/jdk/src/java.base/share/classes/java/security/SecureRandomSpi.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/SecureRandomSpi.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -65,7 +65,7 @@
* will synchronize access to each of the applicable engine methods
* (see {@link SecureRandom} for the list of methods). However, if a
* {@code SecureRandomSpi} implementation is thread-safe, the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Service">
+ * "{@docRoot}/../specs/security/standard-names.html#service-attributes">
* service provider attribute</a> "ThreadSafe" should be set to "true" during
* its registration, as follows:
* <blockquote><pre>
--- a/jdk/src/java.base/share/classes/java/security/Security.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Security.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -281,8 +281,8 @@
/**
* Gets a specified property for an algorithm. The algorithm name
* should be a standard name. See the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* One possible use is by specialized algorithm parsers, which may map
@@ -511,8 +511,8 @@
* </ul>
*
* <p> See the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard cryptographic service names, standard
* algorithm names and standard attribute names.
*
@@ -582,8 +582,8 @@
* </ul>
*
* <p> See the <a href=
- * "../../../technotes/guides/security/StandardNames.html">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard cryptographic service names, standard
* algorithm names and standard attribute names.
*
--- a/jdk/src/java.base/share/classes/java/security/SecurityPermission.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/SecurityPermission.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -45,12 +45,16 @@
* target names, and for each provides a description of what the permission
* allows and a discussion of the risks of granting code the permission.
*
- * <table border=1 cellpadding=5 summary="target name,what the permission allows, and associated risks">
+ * <table class="striped">
+ * <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>
* </tr>
+ * </thead>
+ * <tbody>
*
* <tr>
* <td>authProvider.{provider name}</td>
@@ -196,6 +200,7 @@
* described under the "removeProvider.{provider name}" permission.</td>
* </tr>
*
+ * </tbody>
* </table>
*
* <P>
@@ -204,13 +209,17 @@
* {@link IdentityScope}, {@link Signer}. Use of them is discouraged. See the
* applicable classes for more information.
*
- * <table border=1 cellpadding=5 summary="target name,what the permission allows, and associated risks">
+ * <table class="striped">
+ * <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>
* </tr>
+ * </thead>
*
+ * <tbody>
* <tr>
* <td>insertProvider.{provider name}</td>
* <td>Addition of a new provider, with the specified name</td>
@@ -308,6 +317,7 @@
* data encrypted under that session key.</td>
* </tr>
*
+ * </tbody>
* </table>
*
* @implNote
--- a/jdk/src/java.base/share/classes/java/security/Signature.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/Signature.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -106,9 +106,9 @@
* <li>{@code SHA256withRSA}</li>
* </ul>
* These algorithms are described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Signature">
+ * "{@docRoot}/../specs/security/standard-names.html#signature-algorithms">
* Signature section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -164,8 +164,8 @@
*
* @param algorithm the standard string name of the algorithm.
* See the Signature section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Signature">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#signature-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*/
protected Signature(String algorithm) {
@@ -209,8 +209,8 @@
*
* @param algorithm the standard name of the algorithm requested.
* See the Signature section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Signature">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#signature-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return the new {@code Signature} object
@@ -332,8 +332,8 @@
*
* @param algorithm the name of the algorithm requested.
* See the Signature section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Signature">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#signature-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the name of the provider.
@@ -385,8 +385,8 @@
*
* @param algorithm the name of the algorithm requested.
* See the Signature section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Signature">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#signature-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the provider.
--- a/jdk/src/java.base/share/classes/java/security/cert/CertPath.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertPath.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -91,9 +91,9 @@
* <li>{@code PkiPath}</li>
* </ul>
* These encodings are described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathEncodings">
+ * "{@docRoot}/../specs/security/standard-names.html#certpath-encodings">
* CertPath Encodings section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other encodings are supported.
* <p>
--- a/jdk/src/java.base/share/classes/java/security/cert/CertPathBuilder.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertPathBuilder.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2016, 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
@@ -72,9 +72,9 @@
* <li>{@code PKIX}</li>
* </ul>
* This algorithm is described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathBuilder">
+ * "{@docRoot}/../specs/security/standard-names.html#certpathbuilder-algorithms">
* CertPathBuilder section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -152,8 +152,8 @@
*
* @param algorithm the name of the requested {@code CertPathBuilder}
* algorithm. See the CertPathBuilder section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathBuilder">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certpathbuilder-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return a {@code CertPathBuilder} object that implements the
@@ -190,8 +190,8 @@
*
* @param algorithm the name of the requested {@code CertPathBuilder}
* algorithm. See the CertPathBuilder section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathBuilder">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certpathbuilder-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the name of the provider.
@@ -233,8 +233,8 @@
*
* @param algorithm the name of the requested {@code CertPathBuilder}
* algorithm. See the CertPathBuilder section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathBuilder">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certpathbuilder-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the provider.
--- a/jdk/src/java.base/share/classes/java/security/cert/CertPathValidator.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertPathValidator.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2016, 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
@@ -74,9 +74,9 @@
* <li>{@code PKIX}</li>
* </ul>
* This algorithm is described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathValidator">
+ * "{@docRoot}/../specs/security/standard-names.html#certpathvalidator-algorithms">
* CertPathValidator section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -152,9 +152,9 @@
* {@link Security#getProviders() Security.getProviders()}.
*
* @param algorithm the name of the requested {@code CertPathValidator}
- * algorithm. See the CertPathValidator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathValidator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * algorithm. See the CertPathValidator section in the <a href=
+ * "{@docRoot}/../specs/security/standard-names.html#certpathvalidator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return a {@code CertPathValidator} object that implements the
@@ -190,9 +190,9 @@
* the {@link Security#getProviders() Security.getProviders()} method.
*
* @param algorithm the name of the requested {@code CertPathValidator}
- * algorithm. See the CertPathValidator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathValidator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * algorithm. See the CertPathValidator section in the <a href=
+ * "{@docRoot}/../specs/security/standard-names.html#certpathvalidator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the name of the provider.
@@ -235,8 +235,8 @@
*
* @param algorithm the name of the requested {@code CertPathValidator}
* algorithm. See the CertPathValidator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathValidator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certpathvalidator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the provider.
--- a/jdk/src/java.base/share/classes/java/security/cert/CertStore.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertStore.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2016, 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
@@ -67,9 +67,9 @@
* <li>{@code Collection}</li>
* </ul>
* This type is described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertStore">
+ * "{@docRoot}/../specs/security/standard-names.html#certstore-types">
* CertStore section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other types are supported.
*
@@ -212,8 +212,8 @@
*
* @param type the name of the requested {@code CertStore} type.
* See the CertStore section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertStore">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certstore-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard types.
*
* @param params the initialization parameters (may be {@code null}).
@@ -276,8 +276,8 @@
*
* @param type the requested {@code CertStore} type.
* See the CertStore section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertStore">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certstore-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard types.
*
* @param params the initialization parameters (may be {@code null}).
@@ -337,8 +337,8 @@
*
* @param type the requested {@code CertStore} type.
* See the CertStore section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertStore">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certstore-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard types.
*
* @param params the initialization parameters (may be {@code null}).
--- a/jdk/src/java.base/share/classes/java/security/cert/Certificate.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/Certificate.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -74,8 +74,8 @@
*
* @param type the standard name of the certificate type.
* See the CertificateFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertificateFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certificatefactory-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard certificate types.
*/
protected Certificate(String type) {
--- a/jdk/src/java.base/share/classes/java/security/cert/CertificateFactory.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateFactory.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -101,11 +101,11 @@
* <li>{@code PkiPath}</li>
* </ul>
* The type and encodings are described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertificateFactory">
+ * "{@docRoot}/../specs/security/standard-names.html#certificatefactory-types">
* CertificateFactory section</a> and the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathEncodings">
+ * "{@docRoot}/../specs/security/standard-names.html#certpath-encodings">
* CertPath Encodings section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other types or encodings are supported.
*
@@ -172,8 +172,8 @@
*
* @param type the name of the requested certificate type.
* See the CertificateFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertificateFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certificatefactory-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard certificate types.
*
* @return a certificate factory object for the specified type
@@ -213,8 +213,8 @@
*
* @param type the certificate type.
* See the CertificateFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertificateFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certificatefactory-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard certificate types.
*
* @param provider the name of the provider.
@@ -260,8 +260,8 @@
*
* @param type the certificate type.
* See the CertificateFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertificateFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certificatefactory-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard certificate types.
* @param provider the provider.
*
@@ -359,8 +359,8 @@
* Returns an iteration of the {@code CertPath} encodings supported
* by this certificate factory, with the default encoding first. See
* the CertPath Encodings section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathEncodings">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certpath-encodings">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard encoding names and their formats.
* <p>
* Attempts to modify the returned {@code Iterator} via its
@@ -399,8 +399,8 @@
* the data read from the {@code InputStream} inStream. The data
* is assumed to be in the specified encoding. See
* the CertPath Encodings section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathEncodings">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certpath-encodings">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard encoding names and their formats.
*
* @param inStream an {@code InputStream} containing the data
--- a/jdk/src/java.base/share/classes/java/security/cert/CertificateFactorySpi.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/CertificateFactorySpi.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -183,8 +183,8 @@
* Returns an iteration of the {@code CertPath} encodings supported
* by this certificate factory, with the default encoding first. See
* the CertPath Encodings section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#CertPathEncodings">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#certpath-encodings">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard encoding names.
* <p>
* Attempts to modify the returned {@code Iterator} via its
--- a/jdk/src/java.base/share/classes/java/security/cert/X509Extension.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/X509Extension.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -152,10 +152,14 @@
* by periods.
*
* <p>For example:<br>
- * <table border=groove summary="Examples of OIDs and extension names">
+ * <table class="plain">
+ * <caption style="display:none">Examples of OIDs and extension names</caption>
+ * <thead>
* <tr>
* <th>OID <em>(Object Identifier)</em></th>
* <th>Extension Name</th></tr>
+ * </thead>
+ * <tbody>
* <tr><td>2.5.29.14</td>
* <td>SubjectKeyIdentifier</td></tr>
* <tr><td>2.5.29.15</td>
@@ -176,6 +180,7 @@
* <td>AuthorityKeyIdentifier</td></tr>
* <tr><td>2.5.29.36</td>
* <td>PolicyConstraints</td></tr>
+ * </tbody>
* </table>
*
* @param oid the Object Identifier value for the extension.
--- a/jdk/src/java.base/share/classes/java/security/cert/package-info.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/package-info.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -39,10 +39,9 @@
* Certificate Revocation List (CRL) Profile
* <li>RFC 2560: X.509 Internet Public Key Infrastructure Online Certificate
* Status Protocol - OCSP
- * <li><a href="{@docRoot}/../technotes/guides/security/StandardNames.html">
- * <b>Java™
- * Cryptography Architecture Standard Algorithm Name
- * Documentation</b></a></li>
+ * <li><a href="{@docRoot}/../specs/security/standard-names.html">
+ * <b>Java™ Security Standard Algorithm Names Specification
+ * </b></a></li>
* </ul>
*
* <h2>Related Documentation</h2>
--- a/jdk/src/java.base/share/classes/java/security/package-info.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/package-info.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -53,10 +53,9 @@
* <li>PKCS #8: Private-Key Information Syntax Standard, Version 1.2,
* November 1993</li>
*
- * <li><a href="{@docRoot}/../technotes/guides/security/StandardNames.html">
- * <b>Java™
- * Cryptography Architecture Standard Algorithm Name
- * Documentation</b></a></li>
+ * <li><a href="{@docRoot}/../specs/security/standard-names.html">
+ * <b>Java™ Security Standard Algorithm Names Specification
+ * </b></a></li>
* </ul>
*
* <h2>Related Documentation</h2>
--- a/jdk/src/java.base/share/classes/java/security/spec/EncodedKeySpec.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/spec/EncodedKeySpec.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -67,8 +67,8 @@
* array are copied to protect against subsequent modification.
* @param algorithm the algorithm name of the encoded key
* See the KeyFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keyfactory-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
* @throws NullPointerException if {@code encodedKey}
* or {@code algorithm} is null.
--- a/jdk/src/java.base/share/classes/java/security/spec/PKCS8EncodedKeySpec.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/spec/PKCS8EncodedKeySpec.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -85,8 +85,8 @@
* the array are copied to protect against subsequent modification.
* @param algorithm the algorithm name of the encoded private key
* See the KeyFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keyfactory-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
* @throws NullPointerException if {@code encodedKey}
* or {@code algorithm} is null.
--- a/jdk/src/java.base/share/classes/java/security/spec/X509EncodedKeySpec.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/security/spec/X509EncodedKeySpec.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -75,8 +75,8 @@
* array are copied to protect against subsequent modification.
* @param algorithm the algorithm name of the encoded public key
* See the KeyFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keyfactory-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
* @throws NullPointerException if {@code encodedKey}
* or {@code algorithm} is null.
--- a/jdk/src/java.base/share/classes/java/text/DecimalFormat.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/DecimalFormat.java Thu May 11 18:10:40 2017 +0000
@@ -172,19 +172,22 @@
* are not localized.
*
* <blockquote>
- * <table border=0 cellspacing=3 cellpadding=0 summary="Chart showing symbol,
- * location, localized, and meaning.">
- * <tr style="background-color: rgb(204, 204, 255);">
+ * <table class="striped">
+ * <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
+ * </thead>
+ * <tbody>
* <tr style="vertical-align:top">
* <td><code>0</code>
* <td>Number
* <td>Yes
* <td>Digit
- * <tr style="vertical-align: top; background-color: rgb(238, 238, 255);">
+ * <tr style="vertical-align: top">
* <td><code>#</code>
* <td>Number
* <td>Yes
@@ -194,7 +197,7 @@
* <td>Number
* <td>Yes
* <td>Decimal separator or monetary decimal separator
- * <tr style="vertical-align: top; background-color: rgb(238, 238, 255);">
+ * <tr style="vertical-align: top">
* <td><code>-</code>
* <td>Number
* <td>Yes
@@ -204,7 +207,7 @@
* <td>Number
* <td>Yes
* <td>Grouping separator
- * <tr style="vertical-align: top; background-color: rgb(238, 238, 255);">
+ * <tr style="vertical-align: top">
* <td><code>E</code>
* <td>Number
* <td>Yes
@@ -215,7 +218,7 @@
* <td>Subpattern boundary
* <td>Yes
* <td>Separates positive and negative subpatterns
- * <tr style="vertical-align: top; background-color: rgb(238, 238, 255);">
+ * <tr style="vertical-align: top">
* <td><code>%</code>
* <td>Prefix or suffix
* <td>Yes
@@ -225,7 +228,7 @@
* <td>Prefix or suffix
* <td>Yes
* <td>Multiply by 1000 and show as per mille value
- * <tr style="vertical-align: top; background-color: rgb(238, 238, 255);">
+ * <tr style="vertical-align: top">
* <td><code>¤</code> (<code>\u00A4</code>)
* <td>Prefix or suffix
* <td>No
@@ -241,6 +244,7 @@
* for example, <code>"'#'#"</code> formats 123 to
* <code>"#123"</code>. To create a single quote
* itself, use two in a row: <code>"# o''clock"</code>.
+ * </tbody>
* </table>
* </blockquote>
*
--- a/jdk/src/java.base/share/classes/java/text/MessageFormat.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/MessageFormat.java Thu May 11 18:10:40 2017 +0000
@@ -146,11 +146,15 @@
* shown in the table are illegal. A <i>SubformatPattern</i> must
* be a valid pattern string for the {@code Format} subclass used.
*
- * <table border=1 summary="Shows how FormatType and FormatStyle values map to Format instances">
+ * <table class="plain">
+ * <caption style="display:none">Shows how FormatType and FormatStyle values map to Format instances</caption>
+ * <thead>
* <tr>
* <th id="ft" class="TableHeadingColor">FormatType
* <th id="fs" class="TableHeadingColor">FormatStyle
* <th id="sc" class="TableHeadingColor">Subformat Created
+ * </thead>
+ * <tbody>
* <tr>
* <td headers="ft"><i>(none)</i>
* <td headers="fs"><i>(none)</i>
@@ -213,6 +217,7 @@
* <td headers="ft"><code>choice</code>
* <td headers="fs"><i>SubformatPattern</i>
* <td headers="sc">{@code new} {@link ChoiceFormat#ChoiceFormat(String) ChoiceFormat}{@code (subformatPattern)}
+ * </tbody>
* </table>
*
* <h4>Usage Information</h4>
@@ -766,11 +771,15 @@
* argument is <i>unavailable</i> if <code>arguments</code> is
* <code>null</code> or has fewer than argumentIndex+1 elements.
*
- * <table border=1 summary="Examples of subformat,argument,and formatted text">
+ * <table class="plain">
+ * <caption style="display:none">Examples of subformat,argument,and formatted text</caption>
+ * <thead>
* <tr>
* <th>Subformat
* <th>Argument
* <th>Formatted Text
+ * </thead>
+ * <tbody>
* <tr>
* <td><i>any</i>
* <td><i>unavailable</i>
@@ -805,6 +814,7 @@
* <td><code>null</code>
* <td><i>any</i>
* <td><code>argument.toString()</code>
+ * </tbody>
* </table>
* <p>
* If <code>pos</code> is non-null, and refers to
--- a/jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java Thu May 11 18:10:40 2017 +0000
@@ -92,18 +92,22 @@
* <code>'A'</code> to <code>'Z'</code> and from <code>'a'</code> to
* <code>'z'</code> are reserved):
* <blockquote>
- * <table border=0 cellspacing=3 cellpadding=0 summary="Chart shows pattern letters, date/time component, presentation, and examples.">
- * <tr style="background-color: rgb(204, 204, 255);">
+ * <table class="striped">
+ * <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
+ * </thead>
+ * <tbody>
* <tr>
* <td><code>G</code>
* <td>Era designator
* <td><a href="#text">Text</a>
* <td><code>AD</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>y</code>
* <td>Year
* <td><a href="#year">Year</a>
@@ -113,7 +117,7 @@
* <td>Week year
* <td><a href="#year">Year</a>
* <td><code>2009</code>; <code>09</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>M</code>
* <td>Month in year (context sensitive)
* <td><a href="#month">Month</a>
@@ -123,7 +127,7 @@
* <td>Month in year (standalone form)
* <td><a href="#month">Month</a>
* <td><code>July</code>; <code>Jul</code>; <code>07</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>w</code>
* <td>Week in year
* <td><a href="#number">Number</a>
@@ -133,7 +137,7 @@
* <td>Week in month
* <td><a href="#number">Number</a>
* <td><code>2</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>D</code>
* <td>Day in year
* <td><a href="#number">Number</a>
@@ -143,7 +147,7 @@
* <td>Day in month
* <td><a href="#number">Number</a>
* <td><code>10</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>F</code>
* <td>Day of week in month
* <td><a href="#number">Number</a>
@@ -153,7 +157,7 @@
* <td>Day name in week
* <td><a href="#text">Text</a>
* <td><code>Tuesday</code>; <code>Tue</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>u</code>
* <td>Day number of week (1 = Monday, ..., 7 = Sunday)
* <td><a href="#number">Number</a>
@@ -163,7 +167,7 @@
* <td>Am/pm marker
* <td><a href="#text">Text</a>
* <td><code>PM</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>H</code>
* <td>Hour in day (0-23)
* <td><a href="#number">Number</a>
@@ -173,7 +177,7 @@
* <td>Hour in day (1-24)
* <td><a href="#number">Number</a>
* <td><code>24</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>K</code>
* <td>Hour in am/pm (0-11)
* <td><a href="#number">Number</a>
@@ -183,7 +187,7 @@
* <td>Hour in am/pm (1-12)
* <td><a href="#number">Number</a>
* <td><code>12</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>m</code>
* <td>Minute in hour
* <td><a href="#number">Number</a>
@@ -193,7 +197,7 @@
* <td>Second in minute
* <td><a href="#number">Number</a>
* <td><code>55</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>S</code>
* <td>Millisecond
* <td><a href="#number">Number</a>
@@ -203,7 +207,7 @@
* <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 style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>Z</code>
* <td>Time zone
* <td><a href="#rfc822timezone">RFC 822 time zone</a>
@@ -213,6 +217,7 @@
* <td>Time zone
* <td><a href="#iso8601timezone">ISO 8601 time zone</a>
* <td><code>-08</code>; <code>-0800</code>; <code>-08:00</code>
+ * </tbody>
* </table>
* </blockquote>
* Pattern letters are usually repeated, as their number determines the
@@ -370,43 +375,48 @@
* the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time
* in the U.S. Pacific Time time zone.
* <blockquote>
- * <table border=0 cellspacing=3 cellpadding=0 summary="Examples of date and time patterns interpreted in the U.S. locale">
- * <tr style="background-color: rgb(204, 204, 255);">
+ * <table class="striped">
+ * <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
+ * </thead>
+ * <tbody>
* <tr>
* <td><code>"yyyy.MM.dd G 'at' HH:mm:ss z"</code>
* <td><code>2001.07.04 AD at 12:08:56 PDT</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>"EEE, MMM d, ''yy"</code>
* <td><code>Wed, Jul 4, '01</code>
* <tr>
* <td><code>"h:mm a"</code>
* <td><code>12:08 PM</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><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>
* <td><code>0:08 PM, PDT</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><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>
* <td><code>Wed, 4 Jul 2001 12:08:56 -0700</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><code>"yyMMddHHmmssZ"</code>
* <td><code>010704120856-0700</code>
* <tr>
* <td><code>"yyyy-MM-dd'T'HH:mm:ss.SSSZ"</code>
* <td><code>2001-07-04T12:08:56.235-0700</code>
- * <tr style="background-color: rgb(238, 238, 255);">
+ * <tr>
* <td><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>
* <td><code>2001-W27-3</code>
+ * </tbody>
* </table>
* </blockquote>
*
--- a/jdk/src/java.base/share/classes/java/time/chrono/HijrahChronology.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/time/chrono/HijrahChronology.java Thu May 11 18:10:40 2017 +0000
@@ -103,17 +103,18 @@
*
* <p>
* CLDR and LDML identify variants:
- * <table cellpadding="2" summary="Variants of Hijrah Calendars">
+ * <table class="striped">
+ * <caption style="display:none">Variants of Hijrah Calendars</caption>
* <thead>
- * <tr class="tableSubHeadingColor">
- * <th class="colFirst" style="text-align:left" >Chronology ID</th>
- * <th class="colFirst" style="text-align:left" >Calendar Type</th>
- * <th class="colFirst" style="text-align:left" >Locale extension, see {@link java.util.Locale}</th>
- * <th class="colLast" style="text-align:left" >Description</th>
+ * <tr>
+ * <th style="text-align:left" >Chronology ID</th>
+ * <th style="text-align:left" >Calendar Type</th>
+ * <th style="text-align:left" >Locale extension, see {@link java.util.Locale}</th>
+ * <th style="text-align:left" >Description</th>
* </tr>
* </thead>
* <tbody>
- * <tr class="altColor">
+ * <tr>
* <td>Hijrah-umalqura</td>
* <td>islamic-umalqura</td>
* <td>ca-islamic-umalqura</td>
@@ -147,36 +148,37 @@
* <p>
* The Hijrah property resource is a set of properties that describe the calendar.
* The syntax is defined by {@code java.util.Properties#load(Reader)}.
- * <table cellpadding="2" summary="Configuration of Hijrah Calendar">
+ * <table class="striped">
+ * <caption style="display:none">Configuration of Hijrah Calendar</caption>
* <thead>
- * <tr class="tableSubHeadingColor">
- * <th class="colFirst" style="text-align:left" > Property Name</th>
- * <th class="colFirst" style="text-align:left" > Property value</th>
- * <th class="colLast" style="text-align:left" > Description </th>
+ * <tr>
+ * <th style="text-align:left" > Property Name</th>
+ * <th style="text-align:left" > Property value</th>
+ * <th style="text-align:left" > Description </th>
* </tr>
* </thead>
* <tbody>
- * <tr class="altColor">
+ * <tr>
* <td>id</td>
* <td>Chronology Id, for example, "Hijrah-umalqura"</td>
* <td>The Id of the calendar in common usage</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td>type</td>
* <td>Calendar type, for example, "islamic-umalqura"</td>
* <td>LDML defines the calendar types</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td>version</td>
* <td>Version, for example: "1.8.0_1"</td>
* <td>The version of the Hijrah variant data</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td>iso-start</td>
* <td>ISO start date, formatted as {@code yyyy-MM-dd}, for example: "1900-04-30"</td>
* <td>The ISO date of the first day of the minimum Hijrah year.</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td>yyyy - a numeric 4 digit year, for example "1434"</td>
* <td>The value is a sequence of 12 month lengths,
* for example: "29 30 29 30 29 30 30 30 29 30 29 29"</td>
--- a/jdk/src/java.base/share/classes/java/time/chrono/IsoEra.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/time/chrono/IsoEra.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, 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
@@ -70,25 +70,26 @@
* A definition has therefore been created with two eras - 'Current era' (CE) for
* years on or after 0001-01-01 (ISO), and 'Before current era' (BCE) for years before that.
*
- * <table summary="ISO years and eras" cellpadding="2" cellspacing="3" border="0" >
+ * <table class="striped">
+ * <caption style="display:none">ISO years and eras</caption>
* <thead>
- * <tr class="tableSubHeadingColor">
- * <th class="colFirst" style="text-align:left">year-of-era</th>
- * <th class="colFirst" style="text-align:left">era</th>
- * <th class="colLast" style="text-align:left">proleptic-year</th>
+ * <tr>
+ * <th style="text-align:left">year-of-era</th>
+ * <th style="text-align:left">era</th>
+ * <th style="text-align:left">proleptic-year</th>
* </tr>
* </thead>
* <tbody>
- * <tr class="rowColor">
+ * <tr>
* <td>2</td><td>CE</td><td>2</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td>1</td><td>CE</td><td>1</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td>1</td><td>BCE</td><td>0</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td>2</td><td>BCE</td><td>-1</td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/time/chrono/MinguoEra.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/time/chrono/MinguoEra.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, 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
@@ -71,26 +71,27 @@
* All previous years, zero or earlier in the proleptic count or one and greater
* in the year-of-era count, are part of the 'Before Republic of China' era.
*
- * <table summary="Minguo years and eras" cellpadding="2" cellspacing="3" border="0" >
+ * <table class="striped">
+ * <caption style="display:none">Minguo years and eras</caption>
* <thead>
- * <tr class="tableSubHeadingColor">
- * <th class="colFirst" style="text-align:left">year-of-era</th>
- * <th class="colFirst" style="text-align:left">era</th>
- * <th class="colFirst" style="text-align:left">proleptic-year</th>
- * <th class="colLast" style="text-align:left">ISO proleptic-year</th>
+ * <tr>
+ * <th style="text-align:left">year-of-era</th>
+ * <th style="text-align:left">era</th>
+ * <th style="text-align:left">proleptic-year</th>
+ * <th style="text-align:left">ISO proleptic-year</th>
* </tr>
* </thead>
* <tbody>
- * <tr class="rowColor">
+ * <tr>
* <td>2</td><td>ROC</td><td>2</td><td>1913</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td>1</td><td>ROC</td><td>1</td><td>1912</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td>1</td><td>BEFORE_ROC</td><td>0</td><td>1911</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td>2</td><td>BEFORE_ROC</td><td>-1</td><td>1910</td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/time/chrono/ThaiBuddhistEra.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/time/chrono/ThaiBuddhistEra.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, 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
@@ -71,26 +71,27 @@
* All previous years, zero or earlier in the proleptic count or one and greater
* in the year-of-era count, are part of the 'Before Buddhist' era.
*
- * <table summary="Buddhist years and eras" cellpadding="2" cellspacing="3" border="0" >
+ * <table class="striped">
+ * <caption style="display:none">Buddhist years and eras</caption>
* <thead>
- * <tr class="tableSubHeadingColor">
- * <th class="colFirst" style="text-align:left">year-of-era</th>
- * <th class="colFirst" style="text-align:left">era</th>
- * <th class="colFirst" style="text-align:left">proleptic-year</th>
- * <th class="colLast" style="text-align:left">ISO proleptic-year</th>
+ * <tr>
+ * <th style="text-align:left">year-of-era</th>
+ * <th style="text-align:left">era</th>
+ * <th style="text-align:left">proleptic-year</th>
+ * <th style="text-align:left">ISO proleptic-year</th>
* </tr>
* </thead>
* <tbody>
- * <tr class="rowColor">
+ * <tr>
* <td>2</td><td>BE</td><td>2</td><td>-542</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td>1</td><td>BE</td><td>1</td><td>-543</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td>1</td><td>BEFORE_BE</td><td>0</td><td>-544</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td>2</td><td>BEFORE_BE</td><td>-1</td><td>-545</td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/time/format/DateTimeFormatter.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/time/format/DateTimeFormatter.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -150,105 +150,106 @@
* implementation of {@code java.text.Format}.
*
* <h3 id="predefined">Predefined Formatters</h3>
- * <table summary="Predefined Formatters" cellpadding="2" cellspacing="3" border="0" >
+ * <table class="striped">
+ * <caption>Predefined Formatters</caption>
* <thead>
- * <tr class="tableSubHeadingColor">
- * <th class="colFirst" style="text-align:left">Formatter</th>
- * <th class="colFirst" style="text-align:left">Description</th>
- * <th class="colLast" style="text-align:left">Example</th>
+ * <tr>
+ * <th style="text-align:left">Formatter</th>
+ * <th style="text-align:left">Description</th>
+ * <th style="text-align:left">Example</th>
* </tr>
* </thead>
* <tbody>
- * <tr class="rowColor">
+ * <tr>
* <td>{@link #ofLocalizedDate ofLocalizedDate(dateStyle)} </td>
* <td> Formatter with date style from the locale </td>
* <td> '2011-12-03'</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td> {@link #ofLocalizedTime ofLocalizedTime(timeStyle)} </td>
* <td> Formatter with time style from the locale </td>
* <td> '10:15:30'</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td> {@link #ofLocalizedDateTime ofLocalizedDateTime(dateTimeStyle)} </td>
* <td> Formatter with a style for date and time from the locale</td>
* <td> '3 Jun 2008 11:05:30'</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td> {@link #ofLocalizedDateTime ofLocalizedDateTime(dateStyle,timeStyle)}
* </td>
* <td> Formatter with date and time styles from the locale </td>
* <td> '3 Jun 2008 11:05'</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td> {@link #BASIC_ISO_DATE}</td>
* <td>Basic ISO date </td> <td>'20111203'</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td> {@link #ISO_LOCAL_DATE}</td>
* <td> ISO Local Date </td>
* <td>'2011-12-03'</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td> {@link #ISO_OFFSET_DATE}</td>
* <td> ISO Date with offset </td>
* <td>'2011-12-03+01:00'</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td> {@link #ISO_DATE}</td>
* <td> ISO Date with or without offset </td>
* <td> '2011-12-03+01:00'; '2011-12-03'</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td> {@link #ISO_LOCAL_TIME}</td>
* <td> Time without offset </td>
* <td>'10:15:30'</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td> {@link #ISO_OFFSET_TIME}</td>
* <td> Time with offset </td>
* <td>'10:15:30+01:00'</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td> {@link #ISO_TIME}</td>
* <td> Time with or without offset </td>
* <td>'10:15:30+01:00'; '10:15:30'</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td> {@link #ISO_LOCAL_DATE_TIME}</td>
* <td> ISO Local Date and Time </td>
* <td>'2011-12-03T10:15:30'</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td> {@link #ISO_OFFSET_DATE_TIME}</td>
* <td> Date Time with Offset
* </td><td>2011-12-03T10:15:30+01:00'</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td> {@link #ISO_ZONED_DATE_TIME}</td>
* <td> Zoned Date Time </td>
* <td>'2011-12-03T10:15:30+01:00[Europe/Paris]'</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td> {@link #ISO_DATE_TIME}</td>
* <td> Date and time with ZoneId </td>
* <td>'2011-12-03T10:15:30+01:00[Europe/Paris]'</td>
* </tr>
- * <tr class="altColor">
+ * <tr>
* <td> {@link #ISO_ORDINAL_DATE}</td>
* <td> Year and day of year </td>
* <td>'2012-337'</td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td> {@link #ISO_WEEK_DATE}</td>
* <td> Year and Week </td>
* <td>2012-W48-6'</td></tr>
- * <tr class="altColor">
+ * <tr>
* <td> {@link #ISO_INSTANT}</td>
* <td> Date and Time of an Instant </td>
* <td>'2011-12-03T10:15:30Z' </td>
* </tr>
- * <tr class="rowColor">
+ * <tr>
* <td> {@link #RFC_1123_DATE_TIME}</td>
* <td> RFC 1123 / RFC 822 </td>
* <td>'Tue, 3 Jun 2008 11:05:30 GMT'</td>
--- a/jdk/src/java.base/share/classes/java/time/temporal/IsoFields.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/time/temporal/IsoFields.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -136,15 +136,19 @@
* <p>
* For example:
*
- * <table cellpadding="0" cellspacing="3" border="0" style="text-align: left; width: 50%;">
+ * <table class=striped style="text-align: left; width: 50%;">
* <caption>Examples of Week based Years</caption>
+ * <thead>
* <tr><th>Date</th><th>Day-of-week</th><th>Field values</th></tr>
+ * </thead>
+ * <tbody>
* <tr><th>2008-12-28</th><td>Sunday</td><td>Week 52 of week-based-year 2008</td></tr>
* <tr><th>2008-12-29</th><td>Monday</td><td>Week 1 of week-based-year 2009</td></tr>
* <tr><th>2008-12-31</th><td>Wednesday</td><td>Week 1 of week-based-year 2009</td></tr>
* <tr><th>2009-01-01</th><td>Thursday</td><td>Week 1 of week-based-year 2009</td></tr>
* <tr><th>2009-01-04</th><td>Sunday</td><td>Week 1 of week-based-year 2009</td></tr>
* <tr><th>2009-01-05</th><td>Monday</td><td>Week 2 of week-based-year 2009</td></tr>
+ * </tbody>
* </table>
*
* @implSpec
--- a/jdk/src/java.base/share/classes/java/time/temporal/WeekFields.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/time/temporal/WeekFields.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, 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
@@ -127,10 +127,13 @@
* The earliest period is referred to as week 0 if it has less than the minimal number of days
* and week 1 if it has at least the minimal number of days.
*
- * <table cellpadding="0" cellspacing="3" border="0" style="text-align: left; width: 50%;">
+ * <table class=striped style="text-align: left">
* <caption>Examples of WeekFields</caption>
+ * <thead>
* <tr><th>Date</th><td>Day-of-week</td>
* <td>First day: Monday<br>Minimal days: 4</td><td>First day: Monday<br>Minimal days: 5</td></tr>
+ * </thead>
+ * <tbody>
* <tr><th>2008-12-31</th><td>Wednesday</td>
* <td>Week 5 of December 2008</td><td>Week 5 of December 2008</td></tr>
* <tr><th>2009-01-01</th><td>Thursday</td>
@@ -139,6 +142,7 @@
* <td>Week 1 of January 2009</td><td>Week 0 of January 2009</td></tr>
* <tr><th>2009-01-05</th><td>Monday</td>
* <td>Week 2 of January 2009</td><td>Week 1 of January 2009</td></tr>
+ * </tbody>
* </table>
*
* <h3>Week of Year</h3>
@@ -157,10 +161,13 @@
* The first and last weeks of a year may contain days from the
* previous calendar year or next calendar year respectively.
*
- * <table cellpadding="0" cellspacing="3" border="0" style="text-align: left; width: 50%;">
+ * <table class=striped style="text-align: left;">
* <caption>Examples of WeekFields for week-based-year</caption>
+ * <thead>
* <tr><th>Date</th><td>Day-of-week</td>
* <td>First day: Monday<br>Minimal days: 4</td><td>First day: Monday<br>Minimal days: 5</td></tr>
+ * </thead>
+ * <tbody>
* <tr><th>2008-12-31</th><td>Wednesday</td>
* <td>Week 1 of 2009</td><td>Week 53 of 2008</td></tr>
* <tr><th>2009-01-01</th><td>Thursday</td>
@@ -169,6 +176,7 @@
* <td>Week 1 of 2009</td><td>Week 53 of 2008</td></tr>
* <tr><th>2009-01-05</th><td>Monday</td>
* <td>Week 2 of 2009</td><td>Week 1 of 2009</td></tr>
+ * </tbody>
* </table>
*
* @implSpec
--- a/jdk/src/java.base/share/classes/java/util/Deque.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/Deque.java Thu May 11 18:10:40 2017 +0000
@@ -56,7 +56,7 @@
* <p>The twelve methods described above are summarized in the
* following table:
*
- * <table BORDER CELLPADDING=3 CELLSPACING=1>
+ * <table class="plain">
* <caption>Summary of Deque methods</caption>
* <tr>
* <td></td>
@@ -99,7 +99,7 @@
* inherited from the {@code Queue} interface are precisely equivalent to
* {@code Deque} methods as indicated in the following table:
*
- * <table BORDER CELLPADDING=3 CELLSPACING=1>
+ * <table class="plain">
* <caption>Comparison of Queue and Deque methods</caption>
* <tr>
* <td style="text-align:center"> <b>{@code Queue} Method</b></td>
@@ -137,7 +137,7 @@
* beginning of the deque. Stack methods are precisely equivalent to
* {@code Deque} methods as indicated in the table below:
*
- * <table BORDER CELLPADDING=3 CELLSPACING=1>
+ * <table class="plain">
* <caption>Comparison of Stack and Deque methods</caption>
* <tr>
* <td style="text-align:center"> <b>Stack Method</b></td>
--- a/jdk/src/java.base/share/classes/java/util/Formatter.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/Formatter.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -290,12 +290,14 @@
* <pre>
* out.toUpperCase(Locale.getDefault(Locale.Category.FORMAT)) </pre>
*
- * <table cellpadding=5 summary="genConv">
- *
+ * <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
- *
+ * </thead>
+ * <tbody>
* <tr><td 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
@@ -365,6 +367,7 @@
* <td style="vertical-align:top"> line separator
* <td> The result is the platform-specific line separator
*
+ * </tbody>
* </table>
*
* <p> Any characters not explicitly defined as conversions are illegal and are
@@ -381,8 +384,9 @@
*
* <p> The following conversion characters are used for formatting times:
*
- * <table cellpadding=5 summary="time">
- *
+ * <table class="striped">
+ * <caption style="display:none">time</caption>
+ * <tbody>
* <tr><td 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}.
@@ -446,11 +450,14 @@
* 1970 {@code 00:00:00} UTC, i.e. {@code Long.MIN_VALUE} to
* {@code Long.MAX_VALUE}.
*
+ * </tbody>
* </table>
*
* <p> The following conversion characters are used for formatting dates:
*
- * <table cellpadding=5 summary="date">
+ * <table class="striped">
+ * <caption style="display:none">date</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top">{@code 'B'}
* <td> Locale-specific {@linkplain java.text.DateFormatSymbols#getMonths
@@ -502,12 +509,15 @@
* <tr><td style="vertical-align:top">{@code 'e'}
* <td> Day of month, formatted as two digits, i.e. {@code 1 - 31}.
*
+ * </tbody>
* </table>
*
* <p> The following conversion characters are used for formatting common
* date/time compositions.
*
- * <table cellpadding=5 summary="composites">
+ * <table class="striped">
+ * <caption style="display:none">composites</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top">{@code 'R'}
* <td> Time formatted for the 24-hour clock as {@code "%tH:%tM"}
@@ -531,6 +541,7 @@
* <td> Date and time formatted as {@code "%ta %tb %td %tT %tZ %tY"},
* e.g. {@code "Sun Jul 20 16:17:00 EDT 1969"}.
*
+ * </tbody>
* </table>
*
* <p> Any characters not explicitly defined as date/time conversion suffixes
@@ -541,14 +552,16 @@
* <p> The following table summarizes the supported flags. <i>y</i> means the
* flag is supported for the indicated argument types.
*
- * <table cellpadding=5 summary="genConv">
- *
+ * <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
- *
+ * </thead>
+ * <tbody>
* <tr><td> '-' <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
@@ -599,6 +612,7 @@
* <td style="text-align:center"> -
* <td> The result will enclose negative numbers in parentheses
*
+ * </tbody>
* </table>
*
* <p> <sup>1</sup> Depends on the definition of {@link Formattable}.
@@ -705,7 +719,9 @@
*
* <p> The following general conversions may be applied to any argument type:
*
- * <table cellpadding=5 summary="dgConv">
+ * <table class="striped">
+ * <caption style="display:none">dgConv</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top"> {@code 'b'}
* <td style="vertical-align:top"> <code>'\u0062'</code>
@@ -756,11 +772,14 @@
* <td style="vertical-align:top"> <code>'\u0053'</code>
* <td> The upper-case variant of {@code 's'}.
*
+ * </tbody>
* </table>
*
* <p> The following <a id="dFlags">flags</a> apply to general conversions:
*
- * <table cellpadding=5 summary="dFlags">
+ * <table class="striped">
+ * <caption style="display:none">dFlags</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top"> {@code '-'}
* <td style="vertical-align:top"> <code>'\u002d'</code>
@@ -775,6 +794,7 @@
* <td> Requires the output use an alternate form. The definition of the
* form is specified by the conversion.
*
+ * </tbody>
* </table>
*
* <p> The <a id="genWidth">width</a> is the minimum number of characters to
@@ -801,7 +821,9 @@
* {@code false} then an {@link IllegalFormatCodePointException} will be
* thrown.
*
- * <table cellpadding=5 summary="charConv">
+ * <table class="striped">
+ * <caption style="display:none">charConv</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top"> {@code 'c'}
* <td style="vertical-align:top"> <code>'\u0063'</code>
@@ -817,6 +839,7 @@
* <td style="vertical-align:top"> <code>'\u0043'</code>
* <td> The upper-case variant of {@code 'c'}.
*
+ * </tbody>
* </table>
*
* <p> The {@code '-'} flag defined for <a href="#dFlags">General
@@ -902,7 +925,9 @@
* {@code short}, {@link Short}, {@code int} and {@link Integer},
* {@code long}, and {@link Long}.
*
- * <table cellpadding=5 summary="IntConv">
+ * <table class="striped">
+ * <caption style="display:none">IntConv</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top"> {@code 'd'}
* <td style="vertical-align:top"> <code>'\u0064'</code>
@@ -968,6 +993,7 @@
* all hexadecimal digits {@code 'a'} - {@code 'f'}
* (<code>'\u0061'</code> - <code>'\u0066'</code>).
*
+ * </tbody>
* </table>
*
* <p> If the conversion is {@code 'o'}, {@code 'x'}, or {@code 'X'} and
@@ -982,7 +1008,9 @@
* <p> The following <a id="intFlags">flags</a> apply to numeric integral
* conversions:
*
- * <table cellpadding=5 summary="intFlags">
+ * <table class="striped">
+ * <caption style="display:none">intFlags</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top"> {@code '+'}
* <td style="vertical-align:top"> <code>'\u002b'</code>
@@ -1025,6 +1053,7 @@
* (<code>'\u0028'</code>) and append a {@code ')'}
* (<code>'\u0029'</code>) to negative values.
*
+ * </tbody>
* </table>
*
* <p> If no <a id="intdFlags">flags</a> are given the default formatting is
@@ -1060,7 +1089,9 @@
* <p> The following conversions may be applied to {@link
* java.math.BigInteger}.
*
- * <table cellpadding=5 summary="BIntConv">
+ * <table class="striped">
+ * <caption style="display:none">bIntConv</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top"> {@code 'd'}
* <td style="vertical-align:top"> <code>'\u0064'</code>
@@ -1125,6 +1156,7 @@
* all hexadecimal digits {@code 'a'} - {@code 'f'}
* (<code>'\u0061'</code> - <code>'\u0066'</code>).
*
+ * </tbody>
* </table>
*
* <p> If the conversion is {@code 'o'}, {@code 'x'}, or {@code 'X'} and
@@ -1154,7 +1186,9 @@
* <p> The following conversions may be applied to {@code float}, {@link
* Float}, {@code double} and {@link Double}.
*
- * <table cellpadding=5 summary="floatConv">
+ * <table class="striped">
+ * <caption style="display:none">floatConv</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top"> {@code 'e'}
* <td style="vertical-align:top"> <code>'\u0065'</code>
@@ -1331,6 +1365,7 @@
* (<code>'\u0070'</code> and all hexadecimal digits {@code 'a'} -
* {@code 'f'} (<code>'\u0061'</code> - <code>'\u0066'</code>).
*
+ * </tbody>
* </table>
*
* <p> All <a href="#intFlags">flags</a> defined for Byte, Short, Integer, and
@@ -1388,7 +1423,9 @@
* <p> The following conversions may be applied {@link java.math.BigDecimal
* BigDecimal}.
*
- * <table cellpadding=5 summary="floatConv">
+ * <table class="striped">
+ * <caption style="display:none">floatConv</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top"> {@code 'e'}
* <td style="vertical-align:top"> <code>'\u0065'</code>
@@ -1492,6 +1529,7 @@
* For a canonical representation of the value, use {@link
* BigDecimal#toString()}.
*
+ * </tbody>
* </table>
*
* <p> All <a href="#intFlags">flags</a> defined for Byte, Short, Integer, and
@@ -1512,7 +1550,9 @@
* <p> This conversion may be applied to {@code long}, {@link Long}, {@link
* Calendar}, {@link Date} and {@link TemporalAccessor TemporalAccessor}
*
- * <table cellpadding=5 summary="DTConv">
+ * <table class="striped">
+ * <caption style="display:none">DTConv</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top"> {@code 't'}
* <td style="vertical-align:top"> <code>'\u0074'</code>
@@ -1521,6 +1561,7 @@
* <td style="vertical-align:top"> <code>'\u0054'</code>
* <td> The upper-case variant of {@code 't'}.
*
+ * </tbody>
* </table>
*
* <p> The following date and time conversion character suffixes are defined
@@ -1532,7 +1573,9 @@
*
* <p> The following conversion characters are used for formatting times:
*
- * <table cellpadding=5 summary="time">
+ * <table class="striped">
+ * <caption style="display:none">time</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top"> {@code 'H'}
* <td style="vertical-align:top"> <code>'\u0048'</code>
@@ -1620,11 +1663,14 @@
* {@code Long.MAX_VALUE}. The precision of this value is limited by
* the resolution of the underlying operating system or hardware.
*
+ * </tbody>
* </table>
*
* <p> The following conversion characters are used for formatting dates:
*
- * <table cellpadding=5 summary="date">
+ * <table class="striped">
+ * <caption style="display:none">date</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top">{@code 'B'}
* <td style="vertical-align:top"> <code>'\u0042'</code>
@@ -1692,12 +1738,15 @@
* <td> Day of month, formatted as two digits, i.e. {@code 1 - 31} where
* "{@code 1}" is the first day of the month.
*
+ * </tbody>
* </table>
*
* <p> The following conversion characters are used for formatting common
* date/time compositions.
*
- * <table cellpadding=5 summary="composites">
+ * <table class="striped">
+ * <caption style="display:none">composites</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top">{@code 'R'}
* <td style="vertical-align:top"> <code>'\u0052'</code>
@@ -1727,6 +1776,7 @@
* <td> Date and time formatted as {@code "%ta %tb %td %tT %tZ %tY"},
* e.g. {@code "Sun Jul 20 16:17:00 EDT 1969"}.
*
+ * </tbody>
* </table>
*
* <p> The {@code '-'} flag defined for <a href="#dFlags">General
@@ -1748,7 +1798,9 @@
*
* <p> The conversion does not correspond to any argument.
*
- * <table cellpadding=5 summary="DTConv">
+ * <table class="striped">
+ * <caption style="display:none">DTConv</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top">{@code '%'}
* <td> The result is a literal {@code '%'} (<code>'\u0025'</code>)
@@ -1767,18 +1819,22 @@
* <p> The precision is not applicable. If the precision is specified an
* {@link IllegalFormatPrecisionException} will be thrown.
*
+ * </tbody>
* </table>
*
* <h4><a id="dls">Line Separator</a></h4>
*
* <p> The conversion does not correspond to any argument.
*
- * <table cellpadding=5 summary="DTConv">
+ * <table class="striped">
+ * <caption style="display:none">DTConv</caption>
+ * <tbody>
*
* <tr><td style="vertical-align:top">{@code 'n'}
* <td> the platform-specific line separator as returned by {@link
* System#lineSeparator()}.
*
+ * </tbody>
* </table>
*
* <p> Flags, width, and precision are not applicable. If any are provided an
--- a/jdk/src/java.base/share/classes/java/util/GregorianCalendar.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/GregorianCalendar.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -159,88 +159,89 @@
* undefined. <code>GregorianCalendar</code> uses the following
* default value for each calendar field if its value is undefined.
*
- * <table cellpadding="0" cellspacing="3" border="0"
- * summary="GregorianCalendar default field values"
- * style="text-align: left; width: 66%;">
+ * <table class="striped" style="text-align: left; width: 66%;">
+ * <caption style="display:none">GregorianCalendar default field values</caption>
+ * <thead>
+ * <tr>
+ * <th>
+ * Field
+ * </th>
+ * <th>
+ Default Value
+ * </th>
+ * </tr>
+ * </thead>
* <tbody>
* <tr>
- * <th style="vertical-align: top; background-color: rgb(204, 204, 255);
- * text-align: center;">Field<br>
- * </th>
- * <th style="vertical-align: top; background-color: rgb(204, 204, 255);
- * text-align: center;">Default Value<br>
- * </th>
- * </tr>
- * <tr>
- * <td style="vertical-align: middle;">
- * <code>ERA<br></code>
+ * <td>
+ * <code>ERA</code>
* </td>
- * <td style="vertical-align: middle;">
- * <code>AD<br></code>
+ * <td>
+ * <code>AD</code>
* </td>
* </tr>
* <tr>
- * <td style="vertical-align: middle; background-color: rgb(238, 238, 255);">
- * <code>YEAR<br></code>
+ * <td>
+ * <code>YEAR</code>
* </td>
- * <td style="vertical-align: middle; background-color: rgb(238, 238, 255);">
- * <code>1970<br></code>
+ * <td>
+ * <code>1970</code>
* </td>
* </tr>
* <tr>
- * <td style="vertical-align: middle;">
- * <code>MONTH<br></code>
+ * <td>
+ * <code>MONTH</code>
* </td>
- * <td style="vertical-align: middle;">
- * <code>JANUARY<br></code>
+ * <td>
+ * <code>JANUARY</code>
* </td>
* </tr>
* <tr>
- * <td style="vertical-align: top; background-color: rgb(238, 238, 255);">
- * <code>DAY_OF_MONTH<br></code>
+ * <td>
+ * <code>DAY_OF_MONTH</code>
* </td>
- * <td style="vertical-align: top; background-color: rgb(238, 238, 255);">
- * <code>1<br></code>
+ * <td>
+ * <code>1</code>
* </td>
* </tr>
* <tr>
- * <td style="vertical-align: middle;">
- * <code>DAY_OF_WEEK<br></code>
+ * <td>
+ * <code>DAY_OF_WEEK</code>
* </td>
- * <td style="vertical-align: middle;">
- * <code>the first day of week<br></code>
+ * <td>
+ * <code>the first day of week</code>
* </td>
* </tr>
* <tr>
- * <td style="vertical-align: top; background-color: rgb(238, 238, 255);">
- * <code>WEEK_OF_MONTH<br></code>
+ * <td>
+ * <code>WEEK_OF_MONTH</code>
* </td>
- * <td style="vertical-align: top; background-color: rgb(238, 238, 255);">
- * <code>0<br></code>
+ * <td>
+ * <code>0</code>
* </td>
* </tr>
* <tr>
- * <td style="vertical-align: top;">
- * <code>DAY_OF_WEEK_IN_MONTH<br></code>
+ * <td>
+ * <code>DAY_OF_WEEK_IN_MONTH</code>
* </td>
- * <td style="vertical-align: top;">
- * <code>1<br></code>
+ * <td>
+ * <code>1</code>
* </td>
* </tr>
* <tr>
- * <td style="vertical-align: middle; background-color: rgb(238, 238, 255);">
- * <code>AM_PM<br></code>
+ * <td>
+ * <code>AM_PM</code>
* </td>
- * <td style="vertical-align: middle; background-color: rgb(238, 238, 255);">
- * <code>AM<br></code>
+ * <td>
+ * <code>AM</code>
* </td>
* </tr>
* <tr>
- * <td style="vertical-align: middle;">
- * <code>HOUR, HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND<br></code>
+ * <td>
+ * <code>HOUR, HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND</code>
* </td>
- * <td style="vertical-align: middle;">
- * <code>0<br></code>
+ * <td>
+ * <code>0</code>
* </td>
* </tr>
* </tbody>
--- a/jdk/src/java.base/share/classes/java/util/Locale.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/Locale.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -1587,44 +1587,50 @@
*
* <p>Grandfathered tags with canonical replacements are as follows:
*
- * <table summary="Grandfathered tags with canonical replacements">
+ * <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>
+ * </thead>
* <tbody style="text-align:center">
- * <tr><th>grandfathered tag</th><th> </th><th>modern replacement</th></tr>
- * <tr><td>art-lojban</td><td> </td><td>jbo</td></tr>
- * <tr><td>i-ami</td><td> </td><td>ami</td></tr>
- * <tr><td>i-bnn</td><td> </td><td>bnn</td></tr>
- * <tr><td>i-hak</td><td> </td><td>hak</td></tr>
- * <tr><td>i-klingon</td><td> </td><td>tlh</td></tr>
- * <tr><td>i-lux</td><td> </td><td>lb</td></tr>
- * <tr><td>i-navajo</td><td> </td><td>nv</td></tr>
- * <tr><td>i-pwn</td><td> </td><td>pwn</td></tr>
- * <tr><td>i-tao</td><td> </td><td>tao</td></tr>
- * <tr><td>i-tay</td><td> </td><td>tay</td></tr>
- * <tr><td>i-tsu</td><td> </td><td>tsu</td></tr>
- * <tr><td>no-bok</td><td> </td><td>nb</td></tr>
- * <tr><td>no-nyn</td><td> </td><td>nn</td></tr>
- * <tr><td>sgn-BE-FR</td><td> </td><td>sfb</td></tr>
- * <tr><td>sgn-BE-NL</td><td> </td><td>vgt</td></tr>
- * <tr><td>sgn-CH-DE</td><td> </td><td>sgg</td></tr>
- * <tr><td>zh-guoyu</td><td> </td><td>cmn</td></tr>
- * <tr><td>zh-hakka</td><td> </td><td>hak</td></tr>
- * <tr><td>zh-min-nan</td><td> </td><td>nan</td></tr>
- * <tr><td>zh-xiang</td><td> </td><td>hsn</td></tr>
+ * <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>
* </tbody>
* </table>
*
* <p>Grandfathered tags with no modern replacement will be
* converted as follows:
*
- * <table summary="Grandfathered tags with no modern replacement">
+ * <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>
+ * </thead>
* <tbody style="text-align:center">
- * <tr><th>grandfathered tag</th><th> </th><th>converts to</th></tr>
- * <tr><td>cel-gaulish</td><td> </td><td>xtg-x-cel-gaulish</td></tr>
- * <tr><td>en-GB-oed</td><td> </td><td>en-GB-x-oed</td></tr>
- * <tr><td>i-default</td><td> </td><td>en-x-i-default</td></tr>
- * <tr><td>i-enochian</td><td> </td><td>und-x-i-enochian</td></tr>
- * <tr><td>i-mingo</td><td> </td><td>see-x-i-mingo</td></tr>
- * <tr><td>zh-min</td><td> </td><td>nan-x-zh-min</td></tr>
+ * <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>
* </tbody>
* </table>
*
@@ -2767,12 +2773,16 @@
*
* The filtering method will behave as follows:
*
- * <table cellpadding=2 summary="Filtering method behavior">
+ * <table class="striped">
+ * <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>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td style="vertical-align:top">
* {@link FilteringMode#AUTOSELECT_FILTERING AUTOSELECT_FILTERING}
@@ -2832,6 +2842,7 @@
* not a valid basic language range.
* </td>
* </tr>
+ * </tbody>
* </table>
*
* @see #filter(List, Collection, FilteringMode)
--- a/jdk/src/java.base/share/classes/java/util/Queue.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/Queue.java Thu May 11 18:10:40 2017 +0000
@@ -47,7 +47,7 @@
* implementations; in most implementations, insert operations cannot
* fail.
*
- * <table BORDER CELLPADDING=3 CELLSPACING=1>
+ * <table class="plain">
* <caption>Summary of Queue methods</caption>
* <tr>
* <td></td>
--- a/jdk/src/java.base/share/classes/java/util/ResourceBundle.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/ResourceBundle.java Thu May 11 18:10:40 2017 +0000
@@ -1222,12 +1222,15 @@
* <p>Calling <code>getBundle</code> with the locale arguments below will
* instantiate resource bundles as follows:
*
- * <table summary="getBundle() locale to resource bundle mapping">
+ * <table class="borderless">
+ * <caption style="display:none">getBundle() locale to resource bundle mapping</caption>
+ * <tbody>
* <tr><td>Locale("fr", "CH")</td><td>MyResources_fr_CH.class, parent MyResources_fr.properties, parent MyResources.class</td></tr>
* <tr><td>Locale("fr", "FR")</td><td>MyResources_fr.properties, parent MyResources.class</td></tr>
* <tr><td>Locale("de", "DE")</td><td>MyResources_en.properties, parent MyResources.class</td></tr>
* <tr><td>Locale("en", "US")</td><td>MyResources_en.properties, parent MyResources.class</td></tr>
* <tr><td>Locale("es", "ES")</td><td>MyResources_es_ES.class, parent MyResources.class</td></tr>
+ * </tbody>
* </table>
*
* <p>The file MyResources_fr_CH.properties is never used because it is
@@ -1311,9 +1314,9 @@
* sequence of locale-format combinations to be used to call
* <code>control.newBundle</code>.
*
- * <table style="width: 50%; text-align: left; margin-left: 40px;"
- * border="0" cellpadding="2" cellspacing="2" summary="locale-format combinations for newBundle">
- * <tbody>
+ * <table class=striped style="width: 50%; text-align: left; margin-left: 40px;">
+ * <caption style="display:none">locale-format combinations for newBundle</caption>
+ * <thead>
* <tr>
* <td
* style="vertical-align: top; text-align: left; font-weight: bold; width: 50%;"><code>Locale</code><br>
@@ -1322,6 +1325,8 @@
* style="vertical-align: top; text-align: left; font-weight: bold; width: 50%;"><code>format</code><br>
* </td>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td style="vertical-align: top; width: 50%;"><code>Locale("de", "DE")</code><br>
* </td>
--- a/jdk/src/java.base/share/classes/java/util/concurrent/BlockingDeque.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/BlockingDeque.java Thu May 11 18:10:40 2017 +0000
@@ -53,7 +53,7 @@
* and the fourth blocks for only a given maximum time limit before giving
* up. These methods are summarized in the following table:
*
- * <table BORDER CELLPADDING=3 CELLSPACING=1>
+ * <table class="plain">
* <caption>Summary of BlockingDeque methods</caption>
* <tr>
* <td style="text-align:center" COLSPAN = 5> <b>First Element (Head)</b></td>
@@ -128,7 +128,7 @@
* {@code BlockingQueue} interface are precisely equivalent to
* {@code BlockingDeque} methods as indicated in the following table:
*
- * <table BORDER CELLPADDING=3 CELLSPACING=1>
+ * <table class="plain">
* <caption>Comparison of BlockingQueue and BlockingDeque methods</caption>
* <tr>
* <td style="text-align:center"> <b>{@code BlockingQueue} Method</b></td>
--- a/jdk/src/java.base/share/classes/java/util/concurrent/BlockingQueue.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/BlockingQueue.java Thu May 11 18:10:40 2017 +0000
@@ -53,7 +53,7 @@
* and the fourth blocks for only a given maximum time limit before giving
* up. These methods are summarized in the following table:
*
- * <table BORDER CELLPADDING=3 CELLSPACING=1>
+ * <table class="plain">
* <caption>Summary of BlockingQueue methods</caption>
* <tr>
* <td></td>
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java Thu May 11 18:10:40 2017 +0000
@@ -109,7 +109,7 @@
* async event-style tasks that are not usually joined, in which case
* there is little difference among choice of methods.
*
- * <table BORDER CELLPADDING=3 CELLSPACING=1>
+ * <table class="plain">
* <caption>Summary of task execution methods</caption>
* <tr>
* <td></td>
--- a/jdk/src/java.base/share/classes/java/util/regex/Pattern.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/regex/Pattern.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -79,13 +79,15 @@
*
* <h3><a id="sum">Summary of regular-expression constructs</a></h3>
*
- * <table border="0" cellpadding="1" cellspacing="0"
- * summary="Regular expression constructs, and what they match">
- *
+ * <table class="borderless">
+ * <caption style="display:none">Regular expression constructs, and what they match</caption>
+ * <thead>
* <tr style="text-align:left">
* <th style="text-align:left" id="construct">Construct</th>
* <th style="text-align:left" id="matches">Matches</th>
* </tr>
+ * </thead>
+ * <tbody>
*
* <tr><th> </th></tr>
* <tr style="text-align:left"><th colspan="2" id="characters">Characters</th></tr>
@@ -383,6 +385,7 @@
* <tr><td style="vertical-align:top" headers="construct special">{@code (?>}<i>X</i>{@code )}</td>
* <td headers="matches"><i>X</i>, as an independent, non-capturing group</td></tr>
*
+ * </tbody>
* </table>
*
* <hr>
@@ -429,8 +432,9 @@
* <p> The precedence of character-class operators is as follows, from
* highest to lowest:
*
- * <blockquote><table border="0" cellpadding="1" cellspacing="0"
- * summary="Precedence of character class operators.">
+ * <blockquote><table>
+ * <caption style="display:none">Precedence of character class operators.</caption>
+ * <tbody>
* <tr><th>1 </th>
* <td>Literal escape </td>
* <td>{@code \x}</td></tr>
@@ -446,6 +450,7 @@
* <tr><th>5 </th>
* <td>Intersection</td>
* <td>{@code [a-z&&[aeiou]]}</td></tr>
+ * </tbody>
* </table></blockquote>
*
* <p> Note that a different set of metacharacters are in effect inside
@@ -496,7 +501,9 @@
* left to right. In the expression {@code ((A)(B(C)))}, for example, there
* are four such groups: </p>
*
- * <blockquote><table cellpadding=1 cellspacing=0 summary="Capturing group numberings">
+ * <blockquote><table>
+ * <caption style="display:none">Capturing group numberings</caption>
+ * <tbody>
* <tr><th>1 </th>
* <td>{@code ((A)(B(C)))}</td></tr>
* <tr><th>2 </th>
@@ -505,6 +512,7 @@
* <td>{@code (B(C))}</td></tr>
* <tr><th>4 </th>
* <td>{@code (C)}</td></tr>
+ * </tbody>
* </table></blockquote>
*
* <p> Group zero always stands for the entire expression.
@@ -641,12 +649,15 @@
* of <a href="http://www.unicode.org/reports/tr18/"><i>Unicode Regular Expression
* </i></a>, when {@link #UNICODE_CHARACTER_CLASS} flag is specified.
*
- * <table border="0" cellpadding="1" cellspacing="0"
- * summary="predefined and posix character classes in Unicode mode">
+ * <table>
+ * <caption style="display:none">predefined and posix character classes in Unicode mode</caption>
+ * <thead>
* <tr style="text-align:left">
* <th style="text-align:left" id="predef_classes">Classes</th>
* <th style="text-align:left" id="predef_matches">Matches</th>
- *</tr>
+ * </tr>
+ * </thead>
+ * <tbody>
* <tr><td>{@code \p{Lower}}</td>
* <td>A lowercase character:{@code \p{IsLowercase}}</td></tr>
* <tr><td>{@code \p{Upper}}</td>
@@ -685,6 +696,7 @@
* <td>A word character: {@code [\p{Alpha}\p{gc=Mn}\p{gc=Me}\p{gc=Mc}\p{Digit}\p{gc=Pc}\p{IsJoin_Control}]}</td></tr>
* <tr><td>{@code \W}</td>
* <td>A non-word character: {@code [^\w]}</td></tr>
+ * </tbody>
* </table>
* <p>
* <a id="jcc">
@@ -1207,11 +1219,14 @@
* <p> The input {@code "boo:and:foo"}, for example, yields the following
* results with these parameters:
*
- * <blockquote><table cellpadding=1 cellspacing=0
- * summary="Split examples showing regex, limit, and result">
+ * <blockquote><table>
+ * <caption>Split examples showing regex, limit, and result</caption>
+ * <thead>
* <tr><th style="text-align:left"><i>Regex </i></th>
* <th style="text-align:left"><i>Limit </i></th>
* <th style="text-align:left"><i>Result </i></th></tr>
+ * </thead>
+ * <tbody>
* <tr><td style="text-align:center">:</td>
* <td style="text-align:center">2</td>
* <td>{@code { "boo", "and:foo" }}</td></tr>
@@ -1230,6 +1245,7 @@
* <tr><td style="text-align:center">o</td>
* <td style="text-align:center">0</td>
* <td>{@code { "b", "", ":and:f" }}</td></tr>
+ * </tbody>
* </table></blockquote>
*
* @param input
@@ -1294,14 +1310,18 @@
* <p> The input {@code "boo:and:foo"}, for example, yields the following
* results with these expressions:
*
- * <blockquote><table cellpadding=1 cellspacing=0
- * summary="Split examples showing regex and result">
+ * <blockquote><table>
+ * <caption style="display:none">Split examples showing regex and result</caption>
+ * <thead>
* <tr><th style="text-align:left"><i>Regex </i></th>
* <th style="text-align:left"><i>Result</i></th></tr>
+ * </thead>
+ * <tbody>
* <tr><td style="text-align:center">:</td>
* <td>{@code { "boo", "and", "foo" }}</td></tr>
* <tr><td style="text-align:center">o</td>
* <td>{@code { "b", "", ":and:f" }}</td></tr>
+ * </tbody>
* </table></blockquote>
*
*
--- a/jdk/src/java.base/share/classes/java/util/spi/CalendarNameProvider.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/spi/CalendarNameProvider.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, 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
@@ -46,12 +46,16 @@
* Calendar}. The following are calendar-common fields and their values to be
* supported for each calendar system.
*
- * <table style="border-bottom:1px solid" border="1" cellpadding="3" cellspacing="0" summary="Field values">
+ * <table class="plain" style="border-bottom:1px solid">
+ * <caption style="display:none">Field values</caption>
+ * <thead>
* <tr>
* <th>Field</th>
* <th>Value</th>
* <th>Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td valign="top">{@link Calendar#MONTH}</td>
* <td valign="top">{@link Calendar#JANUARY} to {@link Calendar#UNDECIMBER}</td>
@@ -73,17 +77,22 @@
* <td valign="top">{@link Calendar#AM} to {@link Calendar#PM}</td>
* <td>0 - AM, 1 - PM</td>
* </tr>
+ * </tbody>
* </table>
*
* <p style="margin-top:20px">The following are calendar-specific fields and their values to be supported.
*
- * <table style="border-bottom:1px solid" border="1" cellpadding="3" cellspacing="0" summary="Calendar type and field values">
+ * <table class="plain" style="border-bottom:1px solid">
+ * <caption style="display:none">Calendar type and field values</caption>
+ * <thead>
* <tr>
* <th>Calendar Type</th>
* <th>Field</th>
* <th>Value</th>
* <th>Description</th>
* </tr>
+ * </thead>
+ * <tbody>
* <tr>
* <td rowspan="2" valign="top">{@code "gregory"}</td>
* <td rowspan="2" valign="top">{@link Calendar#ERA}</td>
@@ -154,6 +163,7 @@
* <td>1</td>
* <td>Anno Hijrah (AH)</td>
* </tr>
+ * </tbody>
* </table>
*
* <p>Calendar field value names for {@code "gregory"} must be consistent with
--- a/jdk/src/java.base/share/classes/java/util/stream/StreamOpFlag.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/util/stream/StreamOpFlag.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, 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
@@ -41,7 +41,7 @@
* contexts:
*
* <div>
- * <table>
+ * <table class="borderless">
* <caption>Type Characteristics</caption>
* <thead class="tableSubHeadingColor">
* <tr>
--- a/jdk/src/java.base/share/classes/javax/crypto/Cipher.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/crypto/Cipher.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -150,9 +150,9 @@
* <li>{@code RSA/ECB/OAEPWithSHA-256AndMGF1Padding} (1024, 2048)</li>
* </ul>
* These transformations are described in the
- * <a href="{@docRoot}/../technotes/guides/security/StandardNames.html#Cipher">
+ * <a href="{@docRoot}/../specs/security/standard-names.html#cipher-algorithm-names">
* Cipher section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other transformations are supported.
*
@@ -489,8 +489,8 @@
* @param transformation the name of the transformation, e.g.,
* <i>DES/CBC/PKCS5Padding</i>.
* See the Cipher section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Cipher">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#cipher-algorithm-names">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard transformation names.
*
* @return a cipher that implements the requested transformation
@@ -567,8 +567,8 @@
* @param transformation the name of the transformation,
* e.g., <i>DES/CBC/PKCS5Padding</i>.
* See the Cipher section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Cipher">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#cipher-algorithm-names">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard transformation names.
*
* @param provider the name of the provider.
@@ -627,8 +627,8 @@
* @param transformation the name of the transformation,
* e.g., <i>DES/CBC/PKCS5Padding</i>.
* See the Cipher section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Cipher">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#cipher-algorithm-names">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard transformation names.
*
* @param provider the provider.
--- a/jdk/src/java.base/share/classes/javax/crypto/ExemptionMechanism.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/crypto/ExemptionMechanism.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -125,8 +125,8 @@
* mechanism.
* See the ExemptionMechanism section in the
* <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Exemption">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#exemption-mechanisms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard exemption mechanism names.
*
* @return the new {@code ExemptionMechanism} object
@@ -164,8 +164,8 @@
* @param algorithm the standard name of the requested exemption mechanism.
* See the ExemptionMechanism section in the
* <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Exemption">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#exemption-mechanisms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard exemption mechanism names.
*
* @param provider the name of the provider.
@@ -208,8 +208,8 @@
* @param algorithm the standard name of the requested exemption mechanism.
* See the ExemptionMechanism section in the
* <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Exemption">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#exemption-mechanisms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard exemption mechanism names.
*
* @param provider the provider.
--- a/jdk/src/java.base/share/classes/javax/crypto/KeyAgreement.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/crypto/KeyAgreement.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -60,9 +60,9 @@
* <li>{@code DiffieHellman}</li>
* </ul>
* This algorithm is described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyAgreement">
+ * "{@docRoot}/../specs/security/standard-names.html#keyagreement-algorithms">
* KeyAgreement section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -161,8 +161,8 @@
* @param algorithm the standard name of the requested key agreement
* algorithm.
* See the KeyAgreement section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyAgreement">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keyagreement-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return the new {@code KeyAgreement} object
@@ -208,8 +208,8 @@
* @param algorithm the standard name of the requested key agreement
* algorithm.
* See the KeyAgreement section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyAgreement">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keyagreement-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the name of the provider.
@@ -252,8 +252,8 @@
* @param algorithm the standard name of the requested key agreement
* algorithm.
* See the KeyAgreement section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyAgreement">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keyagreement-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the provider.
--- a/jdk/src/java.base/share/classes/javax/crypto/KeyGenerator.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/crypto/KeyGenerator.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -95,9 +95,9 @@
* <li>{@code HmacSHA256}</li>
* </ul>
* These algorithms are described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyGenerator">
+ * "{@docRoot}/../specs/security/standard-names.html#keygenerator-algorithms">
* KeyGenerator section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -216,8 +216,8 @@
*
* @param algorithm the standard name of the requested key algorithm.
* See the KeyGenerator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyGenerator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keygenerator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return the new {@code KeyGenerator} object
@@ -250,8 +250,8 @@
*
* @param algorithm the standard name of the requested key algorithm.
* See the KeyGenerator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyGenerator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keygenerator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the name of the provider.
@@ -293,8 +293,8 @@
*
* @param algorithm the standard name of the requested key algorithm.
* See the KeyGenerator section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyGenerator">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#keygenerator-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the provider.
--- a/jdk/src/java.base/share/classes/javax/crypto/Mac.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/crypto/Mac.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -61,9 +61,9 @@
* <li>{@code HmacSHA256}</li>
* </ul>
* These algorithms are described in the
- * <a href="{@docRoot}/../technotes/guides/security/StandardNames.html#Mac">
+ * <a href="{@docRoot}/../specs/security/standard-names.html#mac-algorithms">
* Mac section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -162,8 +162,8 @@
*
* @param algorithm the standard name of the requested MAC algorithm.
* See the Mac section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Mac">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#mac-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return the new {@code Mac} object
@@ -206,8 +206,8 @@
*
* @param algorithm the standard name of the requested MAC algorithm.
* See the Mac section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Mac">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#mac-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the name of the provider.
@@ -247,8 +247,8 @@
*
* @param algorithm the standard name of the requested MAC algorithm.
* See the Mac section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Mac">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#mac-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the provider.
--- a/jdk/src/java.base/share/classes/javax/crypto/SecretKeyFactory.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/crypto/SecretKeyFactory.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -65,9 +65,9 @@
* <li>{@code DESede}</li>
* </ul>
* These algorithms are described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecretKeyFactory">
+ * "{@docRoot}/../specs/security/standard-names.html#secretkeyfactory-algorithms">
* SecretKeyFactory section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -148,8 +148,8 @@
* @param algorithm the standard name of the requested secret-key
* algorithm.
* See the SecretKeyFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecretKeyFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#secretkeyfactory-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @return the new {@code SecretKeyFactory} object
@@ -183,8 +183,8 @@
* @param algorithm the standard name of the requested secret-key
* algorithm.
* See the SecretKeyFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecretKeyFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#secretkeyfactory-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the name of the provider.
@@ -227,8 +227,8 @@
* @param algorithm the standard name of the requested secret-key
* algorithm.
* See the SecretKeyFactory section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecretKeyFactory">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#secretkeyfactory-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard algorithm names.
*
* @param provider the provider.
--- a/jdk/src/java.base/share/classes/javax/crypto/package-info.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/crypto/package-info.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -42,9 +42,9 @@
* having to add or rewrite code.
*
* <ul>
- * <li><a href="{@docRoot}/../technotes/guides/security/StandardNames.html">
- * <b>Java™ Cryptography Architecture Standard Algorithm Name
- * Documentation</b></a></li>
+ * <li><a href="{@docRoot}/../specs/security/standard-names.html">
+ * <b>Java™ Security Standard Algorithm Names Specification
+ * </b></a></li>
* </ul>
*
* <h2>Related Documentation</h2>
--- a/jdk/src/java.base/share/classes/javax/net/ssl/SSLContext.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/SSLContext.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -45,9 +45,9 @@
* <li>{@code TLSv1.2}</li>
* </ul>
* These protocols are described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SSLContext">
+ * "{@docRoot}/../specs/security/standard-names.html#sslcontext-algorithms">
* SSLContext section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
@@ -147,9 +147,8 @@
*
* @param protocol the standard name of the requested protocol.
* See the SSLContext section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SSLContext">
- * Java Cryptography Architecture Standard Algorithm Name
- * Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#sslcontext-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard protocol names.
*
* @return the new {@code SSLContext} object
@@ -185,9 +184,8 @@
*
* @param protocol the standard name of the requested protocol.
* See the SSLContext section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SSLContext">
- * Java Cryptography Architecture Standard Algorithm Name
- * Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#sslcontext-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard protocol names.
*
* @param provider the name of the provider.
@@ -228,9 +226,8 @@
*
* @param protocol the standard name of the requested protocol.
* See the SSLContext section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#SSLContext">
- * Java Cryptography Architecture Standard Algorithm Name
- * Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#sslcontext-algorithms">
+ * Java Security Standard Algorithm Names Specification</a>
* for information about standard protocol names.
*
* @param provider an instance of the provider.
--- a/jdk/src/java.base/share/classes/javax/net/ssl/SSLEngine.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/SSLEngine.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -866,7 +866,7 @@
* <P>
* The returned array includes cipher suites from the list of standard
* cipher suite names in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation, and may also
* include other cipher suites that the provider supports.
@@ -892,7 +892,7 @@
* <P>
* The returned array includes cipher suites from the list of standard
* cipher suite names in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation, and may also
* include other cipher suites that the provider supports.
@@ -914,7 +914,7 @@
* <P>
* Note that the standard list of cipher suite names may be found in the
* <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation. Providers
* may support cipher suite names not found in this list or might not
--- a/jdk/src/java.base/share/classes/javax/net/ssl/SSLParameters.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/SSLParameters.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -110,7 +110,7 @@
* constructor followed by
* {@code setCipherSuites(cipherSuites);}. Note that the
* standard list of cipher suite names may be found in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation. Providers
* may support cipher suite names not found in this list.
@@ -130,7 +130,7 @@
* {@code setCipherSuites(cipherSuites); setProtocols(protocols);}.
* Note that the standard list of cipher suite names may be found in the
* <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation. Providers
* may support cipher suite names not found in this list.
@@ -153,7 +153,7 @@
* <P>
* The returned array includes cipher suites from the list of standard
* cipher suite names in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation, and may also
* include other cipher suites that the provider supports.
@@ -170,7 +170,7 @@
*
* @param cipherSuites the array of ciphersuites (or null). Note that the
* standard list of cipher suite names may be found in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation. Providers
* may support cipher suite names not found in this list or might not
@@ -675,4 +675,3 @@
applicationProtocols = tempProtocols;
}
}
-
--- a/jdk/src/java.base/share/classes/javax/net/ssl/SSLPermission.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/SSLPermission.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -44,14 +44,17 @@
* and for each provides a description of what the permission allows
* and a discussion of the risks of granting code the permission.
*
- * <table border=1 cellpadding=5
- * summary="permission name, what it allows, and associated risks">
+ * <table class="striped">
+ * <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>
* </tr>
+ * </thead>
*
+ * <tbody>
* <tr>
* <td>setHostnameVerifier</td>
* <td>The ability to set a callback which can decide whether to
@@ -84,6 +87,7 @@
* </td>
* </tr>
*
+ * </tbody>
* </table>
*
* @see java.security.BasicPermission
--- a/jdk/src/java.base/share/classes/javax/net/ssl/SSLServerSocket.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/SSLServerSocket.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -198,7 +198,7 @@
* <P>
* The returned array includes cipher suites from the list of standard
* cipher suite names in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation, and may also
* include other cipher suites that the provider supports.
@@ -224,7 +224,7 @@
* <P>
* Note that the standard list of cipher suite names may be found in the
* <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation. Providers
* may support cipher suite names not found in this list or might not
@@ -254,7 +254,7 @@
* <P>
* The returned array includes cipher suites from the list of standard
* cipher suite names in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation, and may also
* include other cipher suites that the provider supports.
--- a/jdk/src/java.base/share/classes/javax/net/ssl/SSLServerSocketFactory.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/SSLServerSocketFactory.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -126,7 +126,7 @@
* <P>
* The returned array includes cipher suites from the list of standard
* cipher suite names in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation, and may also
* include other cipher suites that the provider supports.
@@ -147,7 +147,7 @@
* <P>
* The returned array includes cipher suites from the list of standard
* cipher suite names in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation, and may also
* include other cipher suites that the provider supports.
--- a/jdk/src/java.base/share/classes/javax/net/ssl/SSLSocket.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/SSLSocket.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -270,7 +270,7 @@
* <P>
* The returned array includes cipher suites from the list of standard
* cipher suite names in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation, and may also
* include other cipher suites that the provider supports.
@@ -296,7 +296,7 @@
* <P>
* The returned array includes cipher suites from the list of standard
* cipher suite names in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation, and may also
* include other cipher suites that the provider supports.
@@ -318,7 +318,7 @@
* <P>
* Note that the standard list of cipher suite names may be found in the
* <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation. Providers
* may support cipher suite names not found in this list or might not
--- a/jdk/src/java.base/share/classes/javax/net/ssl/SSLSocketFactory.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/SSLSocketFactory.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -151,7 +151,7 @@
* <P>
* The returned array includes cipher suites from the list of standard
* cipher suite names in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation, and may also
* include other cipher suites that the provider supports.
@@ -170,7 +170,7 @@
* <P>
* The returned array includes cipher suites from the list of standard
* cipher suite names in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#ciphersuites">
+ * "{@docRoot}/../specs/security/standard-names.html#jsse-cipher-suite-names">
* JSSE Cipher Suite Names</a> section of the Java Cryptography
* Architecture Standard Algorithm Name Documentation, and may also
* include other cipher suites that the provider supports.
--- a/jdk/src/java.base/share/classes/javax/net/ssl/TrustManagerFactory.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/TrustManagerFactory.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -43,9 +43,9 @@
* <li>{@code PKIX}</li>
* </ul>
* This algorithm is described in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#TrustManagerFactory">
+ * "{@docRoot}/../specs/security/standard-names.html#trustmanagerfactory-algorithms">
* TrustManagerFactory section</a> of the
- * Java Cryptography Architecture Standard Algorithm Name Documentation.
+ * Java Security Standard Algorithm Names Specification.
* Consult the release documentation for your implementation to see if any
* other algorithms are supported.
*
--- a/jdk/src/java.base/share/classes/javax/net/ssl/package-info.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/package-info.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -31,9 +31,9 @@
* the communicating peers.
*
* <ul>
- * <li><a href="{@docRoot}/../technotes/guides/security/StandardNames.html">
- * <b>Java™ Cryptography Architecture Standard Algorithm Name
- * Documentation</b></a></li>
+ * <li><a href="{@docRoot}/../specs/security/standard-names.html">
+ * <b>Java™ Security Standard Algorithm Names Specification
+ * </b></a></li>
* </ul>
*
* @since 1.4
--- a/jdk/src/java.base/share/classes/javax/security/auth/login/Configuration.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/Configuration.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -178,8 +178,8 @@
* constructed by invoking one of the {@code getInstance} factory methods
* with a standard type. The default policy type is "JavaLoginConfig".
* See the Configuration section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Configuration">
- * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * "{@docRoot}/../specs/security/standard-names.html#configuration-types">
+ * Java Security Standard Algorithm Names Specification</a>
* for a list of standard Configuration types.
*
* @see javax.security.auth.login.LoginContext
@@ -323,9 +323,9 @@
*
* @param type the specified Configuration type. See the Configuration
* section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Configuration">
- * Java Cryptography Architecture Standard Algorithm Name
- * Documentation</a> for a list of standard Configuration types.
+ * "{@docRoot}/../specs/security/standard-names.html#configuration-types">
+ * Java Security Standard Algorithm Names Specification</a>
+ * for a list of standard Configuration types.
*
* @param params parameters for the Configuration, which may be null.
*
@@ -381,9 +381,9 @@
*
* @param type the specified Configuration type. See the Configuration
* section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Configuration">
- * Java Cryptography Architecture Standard Algorithm Name
- * Documentation</a> for a list of standard Configuration types.
+ * "{@docRoot}/../specs/security/standard-names.html#configuration-types">
+ * Java Security Standard Algorithm Names Specification</a>
+ * for a list of standard Configuration types.
*
* @param params parameters for the Configuration, which may be null.
*
@@ -448,9 +448,9 @@
*
* @param type the specified Configuration type. See the Configuration
* section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Configuration">
- * Java Cryptography Architecture Standard Algorithm Name
- * Documentation</a> for a list of standard Configuration types.
+ * "{@docRoot}/../specs/security/standard-names.html#configuration-types">
+ * Java Security Standard Algorithm Names Specification</a>
+ * for a list of standard Configuration types.
*
* @param params parameters for the Configuration, which may be null.
*
--- a/jdk/src/java.base/share/classes/javax/security/auth/login/package-info.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/security/auth/login/package-info.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -28,10 +28,9 @@
* <h2>Package Specification</h2>
*
* <ul>
- * <li><a href="{@docRoot}/../technotes/guides/security/StandardNames.html">
- * <b>Java™
- * Cryptography Architecture Standard Algorithm Name
- * Documentation</b></a></li>
+ * <li><a href="{@docRoot}/../specs/security/standard-names.html">
+ * <b>Java™ Security Standard Algorithm Names Specification
+ * </b></a></li>
* </ul>
*
* @since 1.4
--- a/jdk/src/java.base/share/classes/module-info.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/module-info.java Thu May 11 18:10:40 2017 +0000
@@ -190,7 +190,8 @@
jdk.unsupported;
exports jdk.internal.vm.annotation to
jdk.unsupported,
- jdk.internal.vm.ci;
+ jdk.internal.vm.ci,
+ jdk.incubator.httpclient;
exports jdk.internal.util.jar to
jdk.jartool,
jdk.jdeps,
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpRequestImpl.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpRequestImpl.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -123,7 +123,7 @@
this.method = method;
this.systemHeaders = new HttpHeadersImpl();
this.userHeaders = ImmutableHeaders.empty();
- this.uri = null;
+ this.uri = URI.create("socket://" + authority.getHostString() + ":" + Integer.toString(authority.getPort()) + "/");
this.requestProcessor = HttpRequest.noBody();
this.authority = authority;
this.secure = false;
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainTunnelingConnection.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainTunnelingConnection.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
import jdk.incubator.http.internal.common.ByteBufferReference;
import jdk.incubator.http.internal.common.MinimalFuture;
+import jdk.incubator.http.HttpResponse.BodyHandler;
import java.io.IOException;
import java.net.InetSocketAddress;
@@ -72,7 +73,8 @@
public void connect() throws IOException, InterruptedException {
delegate.connect();
HttpRequestImpl req = new HttpRequestImpl("CONNECT", client, address);
- Exchange<?> connectExchange = new Exchange<>(req, null);
+ MultiExchange<Void,Void> mul = new MultiExchange<>(req, client, BodyHandler.<Void>discard(null));
+ Exchange<Void> connectExchange = new Exchange<>(req, mul);
Response r = connectExchange.responseImpl(delegate);
if (r.statusCode() != 200) {
throw new IOException("Tunnel failed");
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/WebSocket.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/WebSocket.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -43,7 +43,7 @@
* <p> To create a {@code WebSocket} use a {@linkplain HttpClient#newWebSocketBuilder(
* URI, Listener) builder}. Once a {@code WebSocket} is built, it's ready
* to send and receive messages. When the {@code WebSocket} is no longer needed
- * it must be closed: a Close message must both be {@linkplain #sendClose()
+ * it must be closed: a Close message must both be {@linkplain #sendClose
* sent} and {@linkplain Listener#onClose(WebSocket, int, String) received}.
* The {@code WebSocket} may be also closed {@linkplain #abort() abruptly}.
*
@@ -94,17 +94,6 @@
int NORMAL_CLOSURE = 1000;
/**
- * The WebSocket Close message status code (<code>{@value}</code>), is
- * designated for use in applications expecting a status code to indicate
- * that the connection was closed abnormally, e.g., without sending or
- * receiving a Close message.
- *
- * @see Listener#onClose(WebSocket, int, String)
- * @see #abort()
- */
- int CLOSED_ABNORMALLY = 1006;
-
- /**
* A builder for creating {@code WebSocket} instances.
* {@Incubating}
*
@@ -509,7 +498,7 @@
*
* <p> The {@code WebSocket} will close at the earliest of completion of
* the returned {@code CompletionStage} or sending a Close message. In
- * particular, if a Close message has been {@link WebSocket#sendClose()
+ * particular, if a Close message has been {@linkplain WebSocket#sendClose
* sent} before, then this invocation completes the closing handshake
* and by the time this method is invoked, the {@code WebSocket} will
* have been closed.
@@ -643,44 +632,6 @@
CompletableFuture<WebSocket> sendText(CharSequence message, boolean isLast);
/**
- * Sends a whole Text message with characters from the given {@code
- * CharSequence}.
- *
- * <p> This is a convenience method. For the general case, use {@link
- * #sendText(CharSequence, boolean)}.
- *
- * <p> Returns a {@code CompletableFuture<WebSocket>} which completes
- * normally when the message has been sent or completes exceptionally if an
- * error occurs.
- *
- * <p> The {@code CharSequence} must not be modified until the returned
- * {@code CompletableFuture} completes (either normally or exceptionally).
- *
- * <p> The returned {@code CompletableFuture} can complete exceptionally
- * with:
- * <ul>
- * <li> {@link IllegalArgumentException} -
- * if {@code message} is a malformed UTF-16 sequence
- * <li> {@link IllegalStateException} -
- * if the {@code WebSocket} is closed;
- * or if a Close message has been sent;
- * or if there is an outstanding send operation;
- * or if a previous Binary message was sent with {@code isLast == false}
- * <li> {@link IOException} -
- * if an I/O error occurs during this operation;
- * or if the {@code WebSocket} has been closed due to an error;
- * </ul>
- *
- * @param message
- * the message
- *
- * @return a {@code CompletableFuture} with this {@code WebSocket}
- */
- default CompletableFuture<WebSocket> sendText(CharSequence message) {
- return sendText(message, true);
- }
-
- /**
* Sends a Binary message with bytes from the given {@code ByteBuffer}.
*
* <p> Returns a {@code CompletableFuture<WebSocket>} which completes
@@ -831,47 +782,10 @@
* the reason
*
* @return a {@code CompletableFuture} with this {@code WebSocket}
- *
- * @see #sendClose()
*/
CompletableFuture<WebSocket> sendClose(int statusCode, String reason);
/**
- * Sends an empty Close message.
- *
- * <p> When this method has been invoked, no further messages can be sent.
- *
- * <p> For more details on Close message see RFC 6455 section
- * <a href="https://tools.ietf.org/html/rfc6455#section-5.5.1">5.5.1. Close</a>
- *
- * <p> The method returns a {@code CompletableFuture<WebSocket>} which
- * completes normally when the message has been sent or completes
- * exceptionally if an error occurs.
- *
- * <p> The returned {@code CompletableFuture} can complete exceptionally
- * with:
- * <ul>
- * <li> {@link IOException} -
- * if an I/O error occurs during this operation;
- * or the {@code WebSocket} has been closed due to an error
- * </ul>
- *
- * <p> If this method has already been invoked or the {@code WebSocket} is
- * closed, then subsequent invocations of this method have no effect and the
- * returned {@code CompletableFuture} completes normally.
- *
- * <p> If a Close message has been {@linkplain Listener#onClose(WebSocket,
- * int, String) received} before, then this invocation completes the closing
- * handshake and by the time the returned {@code CompletableFuture}
- * completes, the {@code WebSocket} will have been closed.
- *
- * @return a {@code CompletableFuture} with this {@code WebSocket}
- *
- * @see #sendClose(int, String)
- */
- CompletableFuture<WebSocket> sendClose();
-
- /**
* Allows {@code n} more messages to be received by the {@link Listener
* Listener}.
*
@@ -928,8 +842,7 @@
* state.
*
* <p> As the result {@link Listener#onClose(WebSocket, int, String)
- * Listener.onClose} will be invoked with the status code {@link
- * #CLOSED_ABNORMALLY} unless either {@code onClose} or {@link
+ * Listener.onClose} will be invoked unless either {@code onClose} or {@link
* Listener#onError(WebSocket, Throwable) onError} has been invoked before.
* In which case no additional invocation will happen.
*
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/hpack/Decoder.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/hpack/Decoder.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,8 @@
*/
package jdk.incubator.http.internal.hpack;
+import jdk.internal.vm.annotation.Stable;
+
import java.io.IOException;
import java.io.UncheckedIOException;
import java.net.ProtocolException;
@@ -60,6 +62,7 @@
*/
public final class Decoder {
+ @Stable
private static final State[] states = new State[256];
static {
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/hpack/HeaderTable.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/hpack/HeaderTable.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,8 @@
*/
package jdk.incubator.http.internal.hpack;
+import jdk.internal.vm.annotation.Stable;
+
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -40,6 +42,7 @@
//
final class HeaderTable {
+ @Stable
private static final HeaderField[] staticTable = {
null, // To make index 1-based, instead of 0-based
new HeaderField(":authority"),
@@ -110,7 +113,7 @@
private static final Map<String, LinkedHashMap<String, Integer>> staticIndexes;
static {
- staticIndexes = new HashMap<>(STATIC_TABLE_LENGTH);
+ staticIndexes = new HashMap<>(STATIC_TABLE_LENGTH); // TODO: Map.of
for (int i = 1; i <= STATIC_TABLE_LENGTH; i++) {
HeaderField f = staticTable[i];
Map<String, Integer> values = staticIndexes
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/BuilderImpl.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/BuilderImpl.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -46,7 +46,7 @@
private final HttpClient client;
private final URI uri;
private final Listener listener;
- private final List<Pair<String, String>> headers = new LinkedList<>();
+ private final Collection<Pair<String, String>> headers = new LinkedList<>();
private final Collection<String> subprotocols = new LinkedList<>();
private Duration timeout;
@@ -65,17 +65,18 @@
}
@Override
- public Builder subprotocols(String mostPreferred, String... lesserPreferred)
+ public Builder subprotocols(String mostPreferred,
+ String... lesserPreferred)
{
requireNonNull(mostPreferred, "mostPreferred");
requireNonNull(lesserPreferred, "lesserPreferred");
List<String> subprotocols = new LinkedList<>();
+ subprotocols.add(mostPreferred);
for (int i = 0; i < lesserPreferred.length; i++) {
String p = lesserPreferred[i];
requireNonNull(p, "lesserPreferred[" + i + "]");
subprotocols.add(p);
}
- subprotocols.add(0, mostPreferred);
this.subprotocols.clear();
this.subprotocols.addAll(subprotocols);
return this;
@@ -98,20 +99,9 @@
Listener getListener() { return listener; }
- List<Pair<String, String>> getHeaders() { return headers; }
+ Collection<Pair<String, String>> getHeaders() { return headers; }
Collection<String> getSubprotocols() { return subprotocols; }
Duration getConnectTimeout() { return timeout; }
-
- @Override
- public String toString() {
- return "WebSocket.Builder{"
- + ", uri=" + uri
- + ", listener=" + listener
- + (!headers.isEmpty() ? ", headers=" + headers : "")
- + (!subprotocols.isEmpty() ? ", subprotocols=" + subprotocols : "")
- + ( timeout != null ? ", connectTimeout=" + timeout : "")
- + '}';
- }
}
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/CooperativeHandler.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/CooperativeHandler.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -25,70 +25,184 @@
package jdk.incubator.http.internal.websocket;
-import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Consumer;
import static java.util.Objects.requireNonNull;
-final class CooperativeHandler {
+/*
+ * A synchronization aid that assists a number of parties in running a task
+ * in a mutually exclusive fashion.
+ *
+ * To run the task, a party invokes `handle`. To permanently prevent the task
+ * from subsequent runs, the party invokes `stop`.
+ *
+ * The parties do not have to operate in different threads.
+ *
+ * The task can be either synchronous or asynchronous.
+ *
+ * If the task is synchronous, it is represented with `Runnable`.
+ * The handler invokes `Runnable.run` to run the task.
+ *
+ * If the task is asynchronous, it is represented with `Consumer<Runnable>`.
+ * The handler invokes `Consumer.accept(end)` to begin the task. The task
+ * invokes `end.run()` when it has ended.
+ *
+ * The next run of the task will not begin until the previous run has finished.
+ *
+ * The task may invoke `handle()` by itself, it's a normal situation.
+ */
+public final class CooperativeHandler {
- private static final long CONTINUE = 0;
- private static final long OFF = 1;
- private static final long ON = 2;
- private static final long STOP = 4;
+ /*
+ Since the task is fixed and known beforehand, no blocking synchronization
+ (locks, queues, etc.) is required. The job can be done solely using
+ nonblocking primitives.
+
+ The machinery below addresses two problems:
+
+ 1. Running the task in a sequential order (no concurrent runs):
+
+ begin, end, begin, end...
+
+ 2. Avoiding indefinite recursion:
- private final AtomicLong state = new AtomicLong(OFF);
+ begin
+ end
+ begin
+ end
+ ...
+
+ Problem #1 is solved with a finite state machine with 4 states:
+
+ BEGIN, AGAIN, END, and STOP.
+
+ Problem #2 is solved with a "state modifier" OFFLOAD.
+
+ Parties invoke `handle()` to signal the task must run. A party that has
+ invoked `handle()` either begins the task or exploits the party that is
+ either beginning the task or ending it.
+
+ The party that is trying to end the task either ends it or begins it
+ again.
- private final Runnable task;
+ To avoid indefinite recursion, before re-running the task tryEnd() sets
+ OFFLOAD bit, signalling to its "child" tryEnd() that this ("parent")
+ tryEnd() is available and the "child" must offload the task on to the
+ "parent". Then a race begins. Whichever invocation of tryEnd() manages
+ to unset OFFLOAD bit first does not do the work.
+
+ There is at most 1 thread that is beginning the task and at most 2
+ threads that are trying to end it: "parent" and "child". In case of a
+ synchronous task "parent" and "child" are the same thread.
+ */
- CooperativeHandler(Runnable task) {
- this.task = requireNonNull(task);
+ private static final int OFFLOAD = 1;
+ private static final int AGAIN = 2;
+ private static final int BEGIN = 4;
+ private static final int STOP = 8;
+ private static final int END = 16;
+
+ private final AtomicInteger state = new AtomicInteger(END);
+ private final Consumer<Runnable> begin;
+
+ public CooperativeHandler(Runnable task) {
+ this(asyncOf(task));
+ }
+
+ public CooperativeHandler(Consumer<Runnable> begin) {
+ this.begin = requireNonNull(begin);
}
/*
- * Causes the task supplied to the constructor to run. The task may be run
- * by this thread as well as by any other that has invoked this method.
+ * Runs the task (though maybe by a different party).
*
* The recursion which is possible here will have the maximum depth of 1:
*
- * task.run()
- * this.startOrContinue()
- * task.run()
+ * this.handle()
+ * begin.accept()
+ * this.handle()
*/
- void startOrContinue() {
- long s;
+ public void handle() {
while (true) {
- s = state.get();
- if (s == OFF && state.compareAndSet(OFF, ON)) {
- // No one is running the task, we are going to run it
- break;
- }
- if (s == ON && state.compareAndSet(ON, CONTINUE)) {
- // Some other thread is running the task. We have managed to
- // update the state, it will be surely noticed by that thread.
+ int s = state.get();
+ if (s == END) {
+ if (state.compareAndSet(END, BEGIN)) {
+ break;
+ }
+ } else if ((s & BEGIN) != 0) {
+ // Tries to change the state to AGAIN, preserving OFFLOAD bit
+ if (state.compareAndSet(s, AGAIN | (s & OFFLOAD))) {
+ return;
+ }
+ } else if ((s & AGAIN) != 0 || s == STOP) {
return;
- }
- if (s == CONTINUE || s == STOP) {
- return;
+ } else {
+ throw new InternalError(String.valueOf(s));
}
}
+ begin.accept(this::tryEnd);
+ }
+
+ private void tryEnd() {
while (true) {
- task.run();
- // State checks are ordered by the probability of expected values
- // (it might be different in different usage patterns, say, when
- // invocations to `startOrContinue()` are concurrent)
- if (state.compareAndSet(ON, OFF)) {
- break; // The state hasn't changed, all done
+ int s;
+ while (((s = state.get()) & OFFLOAD) != 0) {
+ // Tries to offload ending of the task to the parent
+ if (state.compareAndSet(s, s & ~OFFLOAD)) {
+ return;
+ }
}
- if (state.compareAndSet(CONTINUE, ON)) {
- continue;
+ while (true) {
+ if (s == BEGIN) {
+ if (state.compareAndSet(BEGIN, END)) {
+ return;
+ }
+ } else if (s == AGAIN) {
+ if (state.compareAndSet(AGAIN, BEGIN | OFFLOAD)) {
+ break;
+ }
+ } else if (s == STOP) {
+ return;
+ } else {
+ throw new InternalError(String.valueOf(s));
+ }
+ s = state.get();
}
- // Other threads can change the state from CONTINUE to STOP only
- // So if it's not ON and not CONTINUE, it can only be STOP
- break;
+ begin.accept(this::tryEnd);
}
}
- void stop() {
+ /*
+ * Checks whether or not this handler has been permanently stopped.
+ *
+ * Should be used from inside the task to poll the status of the handler,
+ * pretty much the same way as it is done for threads:
+ *
+ * if (!Thread.currentThread().isInterrupted()) {
+ * ...
+ * }
+ */
+ public boolean isStopped() {
+ return state.get() == STOP;
+ }
+
+ /*
+ * Signals this handler to ignore subsequent invocations to `handle()`.
+ *
+ * If the task has already begun, this invocation will not affect it,
+ * unless the task itself uses `isStopped()` method to check the state
+ * of the handler.
+ */
+ public void stop() {
state.set(STOP);
}
+
+ private static Consumer<Runnable> asyncOf(Runnable task) {
+ requireNonNull(task);
+ return ender -> {
+ task.run();
+ ender.run();
+ };
+ }
}
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/Frame.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/Frame.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,8 @@
package jdk.incubator.http.internal.websocket;
+import jdk.internal.vm.annotation.Stable;
+
import java.nio.ByteBuffer;
import static jdk.incubator.http.internal.common.Utils.dump;
@@ -58,6 +60,7 @@
CONTROL_0xE (0xE),
CONTROL_0xF (0xF);
+ @Stable
private static final Opcode[] opcodes;
static {
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/FrameConsumer.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/FrameConsumer.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -38,7 +38,7 @@
import static java.util.Objects.requireNonNull;
import static jdk.incubator.http.internal.common.Utils.dump;
import static jdk.incubator.http.internal.websocket.StatusCodes.NO_STATUS_CODE;
-import static jdk.incubator.http.internal.websocket.StatusCodes.checkIncomingCode;
+import static jdk.incubator.http.internal.websocket.StatusCodes.isLegalToReceiveFromServer;
/*
* Consumes frame parts and notifies a message consumer, when there is
@@ -212,20 +212,20 @@
}
switch (opcode) {
case CLOSE:
- int statusCode = NO_STATUS_CODE;
+ char statusCode = NO_STATUS_CODE;
String reason = "";
if (payloadLen != 0) {
int len = binaryData.remaining();
assert 2 <= len && len <= 125 : dump(len, payloadLen);
+ statusCode = binaryData.getChar();
+ if (!isLegalToReceiveFromServer(statusCode)) {
+ throw new FailWebSocketException(
+ "Illegal status code: " + statusCode);
+ }
try {
- statusCode = checkIncomingCode(binaryData.getChar());
reason = UTF_8.newDecoder().decode(binaryData).toString();
- } catch (CheckFailedException e) {
- throw new FailWebSocketException("Incorrect status code")
- .initCause(e);
} catch (CharacterCodingException e) {
- throw new FailWebSocketException(
- "Close reason is a malformed UTF-8 sequence")
+ throw new FailWebSocketException("Illegal close reason")
.initCause(e);
}
}
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/OpeningHandshake.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/OpeningHandshake.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,8 @@
import jdk.incubator.http.HttpResponse;
import jdk.incubator.http.HttpResponse.BodyHandler;
import jdk.incubator.http.WebSocketHandshakeException;
+import jdk.incubator.http.internal.common.Pair;
+
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@@ -66,7 +68,6 @@
private static final String HEADER_KEY = "Sec-WebSocket-Key";
private static final String HEADER_PROTOCOL = "Sec-WebSocket-Protocol";
private static final String HEADER_VERSION = "Sec-WebSocket-Version";
- private static final String VALUE_VERSION = "13"; // WebSocket's lucky number
private static final Set<String> FORBIDDEN_HEADERS;
@@ -106,12 +107,18 @@
if (connectTimeout != null) {
requestBuilder.timeout(connectTimeout);
}
+ for (Pair<String, String> p : b.getHeaders()) {
+ if (FORBIDDEN_HEADERS.contains(p.first)) {
+ throw illegal("Illegal header: " + p.first);
+ }
+ requestBuilder.header(p.first, p.second);
+ }
this.subprotocols = createRequestSubprotocols(b.getSubprotocols());
if (!this.subprotocols.isEmpty()) {
String p = this.subprotocols.stream().collect(Collectors.joining(", "));
requestBuilder.header(HEADER_PROTOCOL, p);
}
- requestBuilder.header(HEADER_VERSION, VALUE_VERSION);
+ requestBuilder.header(HEADER_VERSION, "13"); // WebSocket's lucky number
this.nonce = createNonce();
requestBuilder.header(HEADER_KEY, this.nonce);
// Setting request version to HTTP/1.1 forcibly, since it's not possible
@@ -133,11 +140,7 @@
if (s.trim().isEmpty() || !isValidName(s)) {
throw illegal("Bad subprotocol syntax: " + s);
}
- if (FORBIDDEN_HEADERS.contains(s)) {
- throw illegal("Forbidden header: " + s);
- }
- boolean unique = sp.add(s);
- if (!unique) {
+ if (!sp.add(s)) {
throw illegal("Duplicating subprotocol: " + s);
}
}
@@ -176,7 +179,7 @@
CompletableFuture<Result> send() {
return client.sendAsync(this.request, BodyHandler.<Void>discard(null))
- .thenCompose(this::resultFrom);
+ .thenCompose(this::resultFrom);
}
/*
@@ -283,7 +286,6 @@
private static String requireSingle(HttpHeaders responseHeaders,
String headerName)
- throws CheckFailedException
{
List<String> values = responseHeaders.allValues(headerName);
if (values.isEmpty()) {
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/OutgoingMessage.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/OutgoingMessage.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -60,6 +60,7 @@
*/
abstract class OutgoingMessage {
+ // Share per WebSocket?
private static final SecureRandom maskingKeys = new SecureRandom();
protected ByteBuffer[] frame;
@@ -71,6 +72,8 @@
* convenient moment (up to the point where sentTo is invoked).
*/
protected void contextualize(Context context) {
+ // masking and charset decoding should be performed here rather than in
+ // the constructor (as of today)
if (context.isCloseSent()) {
throw new IllegalStateException("Close sent");
}
@@ -101,7 +104,7 @@
private final boolean isLast;
Text(CharSequence characters, boolean isLast) {
- CharsetEncoder encoder = UTF_8.newEncoder();
+ CharsetEncoder encoder = UTF_8.newEncoder(); // Share per WebSocket?
try {
payload = encoder.encode(CharBuffer.wrap(characters));
} catch (CharacterCodingException e) {
@@ -172,11 +175,11 @@
Close(int statusCode, CharSequence reason) {
ByteBuffer payload = ByteBuffer.allocate(125)
- .putChar((char) statusCode);
+ .putChar((char) statusCode);
CoderResult result = UTF_8.newEncoder()
- .encode(CharBuffer.wrap(reason),
- payload,
- true);
+ .encode(CharBuffer.wrap(reason),
+ payload,
+ true);
if (result.isOverflow()) {
throw new IllegalArgumentException("Long reason");
} else if (result.isError()) {
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/Receiver.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/Receiver.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -58,8 +58,8 @@
private final Frame.Reader reader = new Frame.Reader();
private final RawChannel.RawEvent event = createHandler();
private final AtomicLong demand = new AtomicLong();
- private final CooperativeHandler receiveHandler =
- new CooperativeHandler(this::tryDeliver);
+ private final CooperativeHandler handler =
+ new CooperativeHandler(this::pushContinuously);
/*
* Used to ensure registering the channel event at most once (i.e. to avoid
* multiple registrations).
@@ -72,8 +72,8 @@
this.channel = channel;
this.data = channel.initialByteBuffer();
this.frameConsumer = new FrameConsumer(this.messageConsumer);
- // To ensure the initial `data` will be read correctly (happens-before)
- // after readable.get()
+ // To ensure the initial non-final `data` will be read correctly
+ // (happens-before) by reader after executing readable.get()
readable.set(true);
}
@@ -88,7 +88,7 @@
@Override
public void handle() {
readable.set(true);
- receiveHandler.startOrContinue();
+ handler.handle();
}
};
}
@@ -98,7 +98,7 @@
throw new IllegalArgumentException("Negative: " + n);
}
demand.accumulateAndGet(n, (p, i) -> p + i < 0 ? Long.MAX_VALUE : p + i);
- receiveHandler.startOrContinue();
+ handler.handle();
}
void acknowledge() {
@@ -113,41 +113,21 @@
* regardless of the current demand.
*/
void close() {
- receiveHandler.stop();
+ handler.stop();
}
- private void tryDeliver() {
- if (readable.get() && demand.get() > 0) {
- deliverAtMostOne();
+ private void pushContinuously() {
+ while (readable.get() && demand.get() > 0 && !handler.isStopped()) {
+ pushOnce();
}
}
- private void deliverAtMostOne() {
- if (data == null) {
- try {
- data = channel.read();
- } catch (IOException e) {
- readable.set(false);
- messageConsumer.onError(e);
- return;
- }
- if (data == null || !data.hasRemaining()) {
- readable.set(false);
- if (!data.hasRemaining()) {
- try {
- channel.registerEvent(event);
- } catch (IOException e) {
- messageConsumer.onError(e);
- return;
- }
- } else if (data == null) {
- messageConsumer.onComplete();
- }
- return;
- }
+ private void pushOnce() {
+ if (data == null && !readData()) {
+ return;
}
try {
- reader.readFrame(data, frameConsumer);
+ reader.readFrame(data, frameConsumer); // Pushing frame parts to the consumer
} catch (FailWebSocketException e) {
messageConsumer.onError(e);
return;
@@ -156,4 +136,28 @@
data = null;
}
}
+
+ private boolean readData() {
+ try {
+ data = channel.read();
+ } catch (IOException e) {
+ messageConsumer.onError(e);
+ return false;
+ }
+ if (data == null) { // EOF
+ messageConsumer.onComplete();
+ return false;
+ } else if (!data.hasRemaining()) { // No data in the socket at the moment
+ data = null;
+ readable.set(false);
+ try {
+ channel.registerEvent(event);
+ } catch (IOException e) {
+ messageConsumer.onError(e);
+ }
+ return false;
+ }
+ assert data.hasRemaining();
+ return true;
+ }
}
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/StatusCodes.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/StatusCodes.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -25,120 +25,72 @@
package jdk.incubator.http.internal.websocket;
-import static jdk.incubator.http.WebSocket.CLOSED_ABNORMALLY;
-
/*
- * Utilities and common constants for WebSocket status codes. For more details
- * on status codes and their meaning see:
+ * Utilities for WebSocket status codes.
*
* 1. https://tools.ietf.org/html/rfc6455#section-7.4
* 2. http://www.iana.org/assignments/websocket/websocket.xhtml#close-code-number
*/
final class StatusCodes {
- static final int PROTOCOL_ERROR = 1002;
- static final int CANNOT_ACCEPT = 1003;
- static final int NO_STATUS_CODE = 1005;
- static final int NOT_CONSISTENT = 1007;
- static final int TOO_BIG = 1009;
- static final int NO_EXTENSION = 1010;
- static final int SERVICE_RESTART = 1012;
- static final int TRY_AGAIN_LATER = 1013;
- static final int TLS_HANDSHAKE_FAILURE = 1015;
+ static final int PROTOCOL_ERROR = 1002;
+ static final int NO_STATUS_CODE = 1005;
+ static final int CLOSED_ABNORMALLY = 1006;
+ static final int NOT_CONSISTENT = 1007;
private StatusCodes() { }
- /*
- * Returns the given code if it doesn't violate any rules for outgoing
- * codes, otherwise throws a CFE with a detailed description.
- */
- static int checkOutgoingCode(int code) {
- checkCommon(code);
- if (code > 4999) {
- throw new CheckFailedException("Unspecified: " + code);
- }
- if (isNotUserSettable(code)) {
- throw new CheckFailedException("Cannot set: " + code);
- }
- return code;
- }
-
- /*
- * Returns the given code if it doesn't violate any rules for incoming
- * codes, otherwise throws a CFE with a detailed description.
- */
- static int checkIncomingCode(int code) {
- checkCommon(code);
- if (code == NO_EXTENSION) {
- throw new CheckFailedException("Bad server code: " + code);
+ static boolean isLegalToSendFromClient(int code) {
+ if (!isLegal(code)) {
+ return false;
}
- return code;
- }
-
- private static int checkCommon(int code) {
- if (isOutOfRange(code)) {
- throw new CheckFailedException("Out of range: " + code);
- }
- if (isForbidden(code)) {
- throw new CheckFailedException("Forbidden: " + code);
+ // Codes from unreserved range
+ if (code > 4999) {
+ return false;
}
- if (isUnassigned(code)) {
- throw new CheckFailedException("Unassigned: " + code);
- }
- return code;
- }
-
- /*
- * Returns true if the given code cannot be set by a user of the WebSocket
- * API. e.g. this code means something which only a WebSocket implementation
- * is responsible for or it doesn't make sense to be send by a WebSocket
- * client.
- */
- private static boolean isNotUserSettable(int code) {
+ // Codes below are not allowed to be sent using a WebSocket client API
switch (code) {
case PROTOCOL_ERROR:
- case CANNOT_ACCEPT:
case NOT_CONSISTENT:
- case TOO_BIG:
- case NO_EXTENSION:
- case TRY_AGAIN_LATER:
- case SERVICE_RESTART:
+ case 1003:
+ case 1009:
+ case 1010:
+ case 1012: // code sent by servers
+ case 1013: // code sent by servers
+ case 1014: // code sent by servers
+ return false;
+ default:
return true;
- default:
- return false;
}
}
- /*
- * Returns true if the given code cannot appear on the wire. It's always an
- * error to send a frame with such a code or to receive one.
- */
- private static boolean isForbidden(int code) {
+ static boolean isLegalToReceiveFromServer(int code) {
+ if (!isLegal(code)) {
+ return false;
+ }
+ return code != 1010; // code sent by clients
+ }
+
+ private static boolean isLegal(int code) {
+ // 2-byte unsigned integer excluding first 1000 numbers from the range
+ // [0, 999] which are never used
+ if (code < 1000 || code > 65535) {
+ return false;
+ }
+ // Codes from the range below has no known meaning under the WebSocket
+ // specification (i.e. unassigned/undefined)
+ if ((code >= 1016 && code <= 2999) || code == 1004) {
+ return false;
+ }
+ // Codes below cannot appear on the wire. It's always an error either
+ // to send a frame with such a code or to receive one.
switch (code) {
case NO_STATUS_CODE:
case CLOSED_ABNORMALLY:
- case TLS_HANDSHAKE_FAILURE:
+ case 1015:
+ return false;
+ default:
return true;
- default:
- return false;
}
}
-
- /*
- * Returns true if the given code has no known meaning under the WebSocket
- * specification (i.e. unassigned/undefined).
- */
- private static boolean isUnassigned(int code) {
- return (code >= 1016 && code <= 2999) || code == 1004 || code == 1014;
- }
-
- /*
- * Returns true if the given code is not in domain of status codes:
- *
- * 2-byte unsigned integer minus first 1000 numbers from the range [0, 999]
- * that are never used.
- */
- private static boolean isOutOfRange(int code) {
- return code < 1000 || code > 65535;
- }
}
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/Transmitter.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/Transmitter.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -37,11 +37,12 @@
*
* No matter whether the message has been fully sent or an error has occurred,
* the transmitter reports the outcome to the supplied handler and becomes ready
- * to accept a new message. Until then, it is considered "busy" and an
- * IllegalStateException will be thrown on each attempt to invoke send.
+ * to accept a new message. Until then, the transmitter is considered "busy" and
+ * an IllegalStateException will be thrown on each attempt to invoke send.
*/
final class Transmitter {
+ /* This flag is used solely for assertions */
private final AtomicBoolean busy = new AtomicBoolean();
private OutgoingMessage message;
private Consumer<Exception> completionHandler;
@@ -53,9 +54,10 @@
this.event = createHandler();
}
- /*
- * The supplied handler may be invoked in the calling thread, so watch out
- * for stack overflow.
+ /**
+ * The supplied handler may be invoked in the calling thread.
+ * A {@code StackOverflowError} may thus occur if there's a possibility
+ * that this method is called again by the supplied handler.
*/
void send(OutgoingMessage message, Consumer<Exception> completionHandler) {
requireNonNull(message);
@@ -86,8 +88,9 @@
private void send0(OutgoingMessage message, Consumer<Exception> handler) {
boolean b = busy.get();
assert b; // Please don't inline this, as busy.get() has memory
- // visibility effects and we don't want the correctness
- // of the algorithm to depend on assertions flag
+ // visibility effects and we don't want the program behaviour
+ // to depend on whether the assertions are turned on
+ // or turned off
try {
boolean sent = message.sendTo(channel);
if (sent) {
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/WebSocketImpl.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/WebSocketImpl.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -51,9 +51,9 @@
import static java.util.Objects.requireNonNull;
import static java.util.concurrent.CompletableFuture.failedFuture;
import static jdk.incubator.http.internal.common.Pair.pair;
+import static jdk.incubator.http.internal.websocket.StatusCodes.CLOSED_ABNORMALLY;
import static jdk.incubator.http.internal.websocket.StatusCodes.NO_STATUS_CODE;
-import static jdk.incubator.http.internal.websocket.StatusCodes.TLS_HANDSHAKE_FAILURE;
-import static jdk.incubator.http.internal.websocket.StatusCodes.checkOutgoingCode;
+import static jdk.incubator.http.internal.websocket.StatusCodes.isLegalToSendFromClient;
/*
* A WebSocket client.
@@ -74,8 +74,8 @@
private final AtomicBoolean outstandingSend = new AtomicBoolean();
private final CooperativeHandler sendHandler =
new CooperativeHandler(this::sendFirst);
- private final Queue<Pair<OutgoingMessage, Consumer<Exception>>> queue =
- new ConcurrentLinkedQueue<>();
+ private final Queue<Pair<OutgoingMessage, CompletableFuture<WebSocket>>>
+ queue = new ConcurrentLinkedQueue<>();
private final Context context = new OutgoingMessage.Context();
private final Transmitter transmitter;
private final Receiver receiver;
@@ -110,6 +110,9 @@
r.subprotocol,
r.channel,
b.getListener());
+ // The order of calls might cause a subtle effects, like CF will be
+ // returned from the buildAsync _after_ onOpen has been signalled.
+ // This means if onOpen is lengthy, it might cause some problems.
ws.signalOpen();
return ws;
};
@@ -125,7 +128,8 @@
WebSocketImpl(URI uri,
String subprotocol,
RawChannel channel,
- Listener listener) {
+ Listener listener)
+ {
this.uri = requireNonNull(uri);
this.subprotocol = requireNonNull(subprotocol);
this.channel = requireNonNull(channel);
@@ -182,15 +186,17 @@
* Processes a Close event that came from the channel. Invoked at most once.
*/
private void processClose(int statusCode, String reason) {
- assert statusCode != TLS_HANDSHAKE_FAILURE; // TLS problems happen long before WebSocket is alive
receiver.close();
try {
channel.shutdownInput();
} catch (IOException e) {
Log.logError(e);
}
- boolean wasComplete = !closeReceived.complete(null);
- if (wasComplete) {
+ boolean alreadyCompleted = !closeReceived.complete(null);
+ if (alreadyCompleted) {
+ // This CF is supposed to be completed only once, the first time a
+ // Close message is received. No further messages are pulled from
+ // the socket.
throw new InternalError();
}
int code;
@@ -261,19 +267,17 @@
@Override
public CompletableFuture<WebSocket> sendClose(int statusCode,
String reason) {
- try {
- checkOutgoingCode(statusCode);
- } catch (CheckFailedException e) {
- IllegalArgumentException ex = new IllegalArgumentException(
- "Bad status code: " + statusCode, e);
- failedFuture(ex);
+ if (!isLegalToSendFromClient(statusCode)) {
+ return failedFuture(
+ new IllegalArgumentException("statusCode: " + statusCode));
}
- return enqueueClose(new Close(statusCode, reason));
- }
-
- @Override
- public CompletableFuture<WebSocket> sendClose() {
- return enqueueClose(new Close());
+ Close msg;
+ try {
+ msg = new Close(statusCode, reason);
+ } catch (IllegalArgumentException e) {
+ return failedFuture(e);
+ }
+ return enqueueClose(msg);
}
/*
@@ -288,8 +292,8 @@
} catch (IOException e) {
Log.logError(e);
}
- boolean wasComplete = !closeSent.complete(null);
- if (wasComplete) {
+ boolean alreadyCompleted = !closeSent.complete(null);
+ if (alreadyCompleted) {
// Shouldn't happen as this callback must run at most once
throw new InternalError();
}
@@ -316,40 +320,41 @@
private CompletableFuture<WebSocket> enqueue(OutgoingMessage m) {
CompletableFuture<WebSocket> cf = new CompletableFuture<>();
- Consumer<Exception> h = e -> {
- if (e == null) {
- cf.complete(WebSocketImpl.this);
- sendHandler.startOrContinue();
- } else {
-
-// what if this is not a users message? (must be different entry points for different messages)
-
- // TODO: think about correct behaviour in the face of error in
- // the queue, for now it seems like the best solution is to
- // deliver the error and stop
- cf.completeExceptionally(e);
- }
- };
- queue.add(pair(m, h)); // Always returns true
- sendHandler.startOrContinue();
+ boolean added = queue.add(pair(m, cf));
+ if (!added) {
+ // The queue is supposed to be unbounded
+ throw new InternalError();
+ }
+ sendHandler.handle();
return cf;
}
- private void sendFirst() {
- Pair<OutgoingMessage, Consumer<Exception>> p = queue.poll();
+ /*
+ * This is the main sending method. It may be run in different threads,
+ * but never concurrently.
+ */
+ private void sendFirst(Runnable whenSent) {
+ Pair<OutgoingMessage, CompletableFuture<WebSocket>> p = queue.poll();
if (p == null) {
+ whenSent.run();
return;
}
OutgoingMessage message = p.first;
- Consumer<Exception> h = p.second;
+ CompletableFuture<WebSocket> cf = p.second;
try {
- // At this point messages are finally ordered and will be written
- // one by one in a mutually exclusive fashion; thus it's a pretty
- // convenient place to contextualize them
message.contextualize(context);
+ Consumer<Exception> h = e -> {
+ if (e == null) {
+ cf.complete(WebSocketImpl.this);
+ } else {
+ cf.completeExceptionally(e);
+ }
+ sendHandler.handle();
+ whenSent.run();
+ };
transmitter.send(message, h);
} catch (Exception t) {
- h.accept(t);
+ cf.completeExceptionally(t);
}
}
@@ -381,7 +386,7 @@
@Override
public String toString() {
return super.toString()
- + "[" + (closed.get() ? "OPEN" : "CLOSED") + "]: " + uri
+ + "[" + (closed.get() ? "CLOSED" : "OPEN") + "]: " + uri
+ (!subprotocol.isEmpty() ? ", subprotocol=" + subprotocol : "");
}
@@ -476,7 +481,9 @@
int code = ((FailWebSocketException) error).getStatusCode();
enqueueClose(new Close(code, ""))
.whenComplete((r, e) -> {
- ex.addSuppressed(e);
+ if (e != null) {
+ ex.addSuppressed(e);
+ }
try {
channel.close();
} catch (IOException e1) {
--- a/jdk/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSigner.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSigner.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -172,7 +172,7 @@
*
* @param algorithm the standard name of the algorithm. See
* the {@code MessageDigest} section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#MessageDigest">
+ * "{@docRoot}/../specs/security/standard-names.html#messagedigest-algorithms">
* Java Cryptography Architecture Standard Algorithm Name
* Documentation</a> for information about standard algorithm names.
* @return the {@code JarSigner.Builder} itself.
@@ -192,7 +192,7 @@
*
* @param algorithm the standard name of the algorithm. See
* the {@code MessageDigest} section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#MessageDigest">
+ * "{@docRoot}/../specs/security/standard-names.html#messagedigest-algorithms">
* Java Cryptography Architecture Standard Algorithm Name
* Documentation</a> for information about standard algorithm names.
* @param provider the provider.
@@ -218,7 +218,7 @@
*
* @param algorithm the standard name of the algorithm. See
* the {@code Signature} section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Signature">
+ * "{@docRoot}/../specs/security/standard-names.html#signature-algorithms">
* Java Cryptography Architecture Standard Algorithm Name
* Documentation</a> for information about standard algorithm names.
* @return the {@code JarSigner.Builder} itself.
@@ -245,7 +245,7 @@
*
* @param algorithm the standard name of the algorithm. See
* the {@code Signature} section in the <a href=
- * "{@docRoot}/../technotes/guides/security/StandardNames.html#Signature">
+ * "{@docRoot}/../specs/security/standard-names.html#signature-algorithms">
* Java Cryptography Architecture Standard Algorithm Name
* Documentation</a> for information about standard algorithm names.
* @param provider the provider.
--- a/jdk/test/java/net/MulticastSocket/SetOutgoingIf.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/test/java/net/MulticastSocket/SetOutgoingIf.java Thu May 11 18:10:40 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -40,6 +40,10 @@
return osname.contains("Windows");
}
+ static boolean isMacOS() {
+ return System.getProperty("os.name").contains("OS X");
+ }
+
private static boolean hasIPv6() throws Exception {
List<NetworkInterface> nics = Collections.list(
NetworkInterface.getNetworkInterfaces());
@@ -71,7 +75,7 @@
int index = 1;
for (NetworkInterface nic : Collections.list(NetworkInterface.getNetworkInterfaces())) {
// we should use only network interfaces with multicast support which are in "up" state
- if (!nic.isLoopback() && nic.supportsMulticast() && nic.isUp()) {
+ if (!nic.isLoopback() && nic.supportsMulticast() && nic.isUp() && !isTestExcludedInterface(nic)) {
NetIf netIf = NetIf.create(nic);
// now determine what (if any) type of addresses are assigned to this interface
@@ -91,6 +95,8 @@
netIfs.add(netIf);
debug("Using: " + nic);
}
+ } else {
+ System.out.println("Ignore NetworkInterface nic == " + nic);
}
}
if (netIfs.size() <= 1) {
@@ -170,6 +176,15 @@
}
}
+ private static boolean isTestExcludedInterface(NetworkInterface nif) {
+ if (isMacOS() && nif.getName().contains("awdl"))
+ return true;
+ String dName = nif.getDisplayName();
+ if (isWindows() && dName != null && dName.contains("Teredo"))
+ return true;
+ return false;
+ }
+
private static boolean debug = true;
static void debug(String message) {
--- a/jdk/test/java/net/httpclient/whitebox/Driver.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/test/java/net/httpclient/whitebox/Driver.java Thu May 11 18:10:40 2017 +0000
@@ -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
@@ -26,5 +26,6 @@
* @bug 8151299 8164704
* @modules jdk.incubator.httpclient
* @run testng jdk.incubator.httpclient/jdk.incubator.http.SelectorTest
+ * @run testng jdk.incubator.httpclient/jdk.incubator.http.RawChannelTest
* @run testng jdk.incubator.httpclient/jdk.incubator.http.ResponseHeadersTest
*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/httpclient/whitebox/jdk.incubator.httpclient/jdk/incubator/http/RawChannelTest.java Thu May 11 18:10:40 2017 +0000
@@ -0,0 +1,287 @@
+/*
+ * 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 jdk.incubator.http;
+
+import jdk.incubator.http.internal.websocket.RawChannel;
+import org.testng.annotations.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UncheckedIOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.URI;
+import java.nio.ByteBuffer;
+import java.nio.channels.SelectionKey;
+import java.util.Random;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+
+import static jdk.incubator.http.HttpResponse.BodyHandler.discard;
+import static org.testng.Assert.assertEquals;
+
+/*
+ * This test exercises mechanics of _independent_ reads and writes on the
+ * RawChannel. It verifies that the underlying implementation can manage more
+ * than a single type of notifications at the same time.
+ */
+public class RawChannelTest {
+
+ private final AtomicLong clientWritten = new AtomicLong();
+ private final AtomicLong serverWritten = new AtomicLong();
+ private final AtomicLong clientRead = new AtomicLong();
+ private final AtomicLong serverRead = new AtomicLong();
+
+ /*
+ * Since at this level we don't have any control over the low level socket
+ * parameters, this latch ensures a write to the channel will stall at least
+ * once (socket's send buffer filled up).
+ */
+ private final CountDownLatch writeStall = new CountDownLatch(1);
+
+ /*
+ * This one works similarly by providing means to ensure a read from the
+ * channel will stall at least once (no more data available on the socket).
+ */
+ private final CountDownLatch readStall = new CountDownLatch(1);
+
+ private final AtomicInteger writeHandles = new AtomicInteger();
+ private final AtomicInteger readHandles = new AtomicInteger();
+
+ private final CountDownLatch exit = new CountDownLatch(1);
+
+ @Test
+ public void test() throws Exception {
+ try (ServerSocket server = new ServerSocket(0)) {
+ int port = server.getLocalPort();
+ new TestServer(server).start();
+ final RawChannel chan = channelOf(port);
+
+ // It's very important not to forget the initial bytes, possibly
+ // left from the HTTP thingy
+ int initialBytes = chan.initialByteBuffer().remaining();
+ print("RawChannel has %s initial bytes", initialBytes);
+ clientRead.addAndGet(initialBytes);
+
+ chan.registerEvent(new RawChannel.RawEvent() {
+
+ private final ByteBuffer reusableBuffer = ByteBuffer.allocate(32768);
+
+ @Override
+ public int interestOps() {
+ return SelectionKey.OP_WRITE;
+ }
+
+ @Override
+ public void handle() {
+ int i = writeHandles.incrementAndGet();
+ print("OP_WRITE #%s", i);
+ if (i > 3) { // Fill up the send buffer not more than 3 times
+ try {
+ chan.shutdownOutput();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return;
+ }
+ long total = 0;
+ try {
+ long n;
+ do {
+ ByteBuffer[] array = {reusableBuffer.slice()};
+ n = chan.write(array, 0, 1);
+ total += n;
+ } while (n > 0);
+ print("OP_WRITE clogged SNDBUF with %s bytes", total);
+ clientWritten.addAndGet(total);
+ chan.registerEvent(this);
+ writeStall.countDown(); // signal send buffer is full
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+ });
+
+ chan.registerEvent(new RawChannel.RawEvent() {
+
+ @Override
+ public int interestOps() {
+ return SelectionKey.OP_READ;
+ }
+
+ @Override
+ public void handle() {
+ int i = readHandles.incrementAndGet();
+ print("OP_READ #%s", i);
+ ByteBuffer read = null;
+ long total = 0;
+ while (true) {
+ try {
+ read = chan.read();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ if (read == null) {
+ print("OP_READ EOF");
+ break;
+ } else if (!read.hasRemaining()) {
+ print("OP_READ stall");
+ try {
+ chan.registerEvent(this);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ readStall.countDown();
+ break;
+ }
+ int r = read.remaining();
+ total += r;
+ clientRead.addAndGet(r);
+ }
+ print("OP_READ read %s bytes", total);
+ }
+ });
+ exit.await(); // All done, we need to compare results:
+ assertEquals(clientRead.get(), serverWritten.get());
+ assertEquals(serverRead.get(), clientWritten.get());
+ }
+ }
+
+ private static RawChannel channelOf(int port) throws Exception {
+ URI uri = URI.create("http://127.0.0.1:" + port + "/");
+ print("raw channel to %s", uri.toString());
+ HttpRequest req = HttpRequest.newBuilder(uri).build();
+ HttpResponse<?> r = HttpClient.newHttpClient().send(req, discard(null));
+ r.body();
+ return ((HttpResponseImpl) r).rawChannel();
+ }
+
+ private class TestServer extends Thread { // Powered by Slowpokes
+
+ private final ServerSocket server;
+
+ TestServer(ServerSocket server) throws IOException {
+ this.server = server;
+ }
+
+ @Override
+ public void run() {
+ try (Socket s = server.accept()) {
+ InputStream is = s.getInputStream();
+ OutputStream os = s.getOutputStream();
+
+ processHttp(is, os);
+
+ Thread reader = new Thread(() -> {
+ try {
+ long n = readSlowly(is);
+ print("Server read %s bytes", n);
+ serverRead.addAndGet(n);
+ s.shutdownInput();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ });
+
+ Thread writer = new Thread(() -> {
+ try {
+ long n = writeSlowly(os);
+ print("Server written %s bytes", n);
+ serverWritten.addAndGet(n);
+ s.shutdownOutput();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ });
+
+ reader.start();
+ writer.start();
+
+ reader.join();
+ writer.join();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ exit.countDown();
+ }
+ }
+
+ private void processHttp(InputStream is, OutputStream os)
+ throws IOException
+ {
+ os.write("HTTP/1.1 200 OK\r\nContent-length: 0\r\n\r\n".getBytes());
+ byte[] buf = new byte[1024];
+ String s = "";
+ while (true) {
+ int n = is.read(buf);
+ if (n <= 0) {
+ throw new RuntimeException("Unexpected end of request");
+ }
+ s = s + new String(buf, 0, n);
+ if (s.contains("\r\n\r\n")) {
+ break;
+ }
+ }
+ }
+
+ private long writeSlowly(OutputStream os) throws Exception {
+ byte[] first = byteArrayOfSize(1024);
+ long total = first.length;
+ os.write(first);
+ // Let's wait for the signal from the raw channel that its read has
+ // stalled, and then continue sending a bit more stuff
+ readStall.await();
+ for (int i = 0; i < 32; i++) {
+ byte[] b = byteArrayOfSize(1024);
+ os.write(b);
+ total += b.length;
+ TimeUnit.MILLISECONDS.sleep(1);
+ }
+ return total;
+ }
+
+ private long readSlowly(InputStream is) throws Exception {
+ // Wait for the raw channel to fill up the its send buffer
+ writeStall.await();
+ long overall = 0;
+ byte[] array = new byte[1024];
+ for (int n = 0; n != -1; n = is.read(array)) {
+ TimeUnit.MILLISECONDS.sleep(1);
+ overall += n;
+ }
+ return overall;
+ }
+ }
+
+ private static void print(String format, Object... args) {
+ System.out.println(Thread.currentThread() + ": " + String.format(format, args));
+ }
+
+ private static byte[] byteArrayOfSize(int bound) {
+ return new byte[new Random().nextInt(1 + bound)];
+ }
+}
--- a/jdk/test/java/nio/channels/SocketChannel/VectorIO.java Thu May 11 16:26:50 2017 +0000
+++ b/jdk/test/java/nio/channels/SocketChannel/VectorIO.java Thu May 11 18:10:40 2017 +0000
@@ -87,8 +87,11 @@
while (rem > 0L) {
long bytesWritten = sc.write(bufs);
if (bytesWritten == 0) {
- if (sc.isBlocking())
+ if (sc.isBlocking()) {
throw new RuntimeException("write did not block");
+ } else {
+ System.err.println("Non-blocking write() wrote zero bytes");
+ }
Thread.sleep(50);
} else {
rem -= bytesWritten;
@@ -140,8 +143,10 @@
for (;;) {
sc = ssc.accept();
- if (sc != null)
+ if (sc != null) {
+ System.err.println("accept() succeeded");
break;
+ }
Thread.sleep(50);
}
@@ -154,8 +159,12 @@
if (bytesRead < 0)
break;
if (bytesRead == 0) {
- if (sc.isBlocking())
+ if (sc.isBlocking()) {
throw new RuntimeException("read did not block");
+ } else {
+ System.err.println
+ ("Non-blocking read() read zero bytes");
+ }
Thread.sleep(50);
}
avail -= bytesRead;