Merge
This commit is contained in:
commit
4573808948
@ -30,6 +30,8 @@ include MakeBase.gmk
|
||||
include JavaCompilation.gmk
|
||||
include SetupJavaCompilers.gmk
|
||||
|
||||
################################################################################
|
||||
|
||||
$(eval $(call IncludeCustomExtension, jdk, CompileTools.gmk))
|
||||
|
||||
################################################################################
|
||||
|
@ -54,7 +54,7 @@ $(GENSRC_CHARSETCODER_DST)/CharsetDecoder.java: $(GENSRC_CHARSETCODER_TEMPLATE)
|
||||
-DOtherCoder='Encoder' \
|
||||
-DreplTypeName='string' \
|
||||
-DdefaultRepl='"\\uFFFD"' \
|
||||
-DdefaultReplName='<tt>"\\uFFFD"<\/tt>' \
|
||||
-DdefaultReplName='<code>"\\uFFFD"<\/code>' \
|
||||
-DreplType='String' \
|
||||
-DreplFQType='java.lang.String' \
|
||||
-DreplLength='length()' \
|
||||
@ -89,7 +89,7 @@ $(GENSRC_CHARSETCODER_DST)/CharsetEncoder.java: $(GENSRC_CHARSETCODER_TEMPLATE)
|
||||
-DOtherCoder='Decoder' \
|
||||
-DreplTypeName='byte array' \
|
||||
-DdefaultRepl='new byte[] { (byte)'"'"\\?"'"' }' \
|
||||
-DdefaultReplName='<tt>{<\/tt>\ <tt>(byte)'"'"\\?"'"'<\/tt>\ <tt>}<\/tt>' \
|
||||
-DdefaultReplName='<code>{<\/code>\ <code>(byte)'"'"\\?"'"'<\/code>\ <code>}<\/code>' \
|
||||
-DreplType='byte[]' \
|
||||
-DreplFQType='byte[]' \
|
||||
-DreplLength='length' \
|
||||
|
109
jdk/make/src/classes/build/tools/taglet/ExtLink.java
Normal file
109
jdk/make/src/classes/build/tools/taglet/ExtLink.java
Normal file
@ -0,0 +1,109 @@
|
||||
/*
|
||||
* 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. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package build.tools.taglet;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import javax.lang.model.element.Element;
|
||||
|
||||
import com.sun.source.doctree.DocTree;
|
||||
import com.sun.source.doctree.UnknownInlineTagTree;
|
||||
import jdk.javadoc.doclet.Taglet;
|
||||
|
||||
import static com.sun.source.doctree.DocTree.Kind.*;
|
||||
import static jdk.javadoc.doclet.Taglet.Location.*;
|
||||
|
||||
/**
|
||||
* An inline tag to conveniently insert an external link.
|
||||
* The tag can be used as follows:
|
||||
* {@extLink name description}, for example
|
||||
* <p>
|
||||
* {@code Please see {@extLink Borealis a spectacular} sight.}
|
||||
* <p>
|
||||
* will produce the following html
|
||||
* <p>
|
||||
* {@code
|
||||
* Please see <a href="https://www.oracle.com/pls/topic/lookup?ctx=javase9&id=Borealis">a spectacular</a> sight.
|
||||
* }
|
||||
*/
|
||||
public class ExtLink implements Taglet {
|
||||
|
||||
static final String TAG_NAME = "extLink";
|
||||
|
||||
static final String URL = "https://www.oracle.com/pls/topic/lookup?ctx=javase9&id=";
|
||||
|
||||
static final Pattern TAG_PATTERN = Pattern.compile("(\\s*)(?<name>\\w+)(\\s+)(?<desc>.*)");
|
||||
|
||||
/**
|
||||
* Returns the set of locations in which the tag may be used.
|
||||
*/
|
||||
@Override
|
||||
public Set<Location> getAllowedLocations() {
|
||||
return EnumSet.allOf(jdk.javadoc.doclet.Taglet.Location.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInlineTag() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return TAG_NAME;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(List<? extends DocTree> tags, Element elem) {
|
||||
|
||||
if (tags.isEmpty())
|
||||
return "";
|
||||
|
||||
DocTree tag = tags.get(0);
|
||||
if (tag.getKind() != UNKNOWN_INLINE_TAG)
|
||||
return "";
|
||||
|
||||
UnknownInlineTagTree uitree = (UnknownInlineTagTree) tag;
|
||||
if (uitree.getContent().isEmpty())
|
||||
return "";
|
||||
|
||||
String tagText = uitree.getContent().get(0).toString();
|
||||
Matcher m = TAG_PATTERN.matcher(tagText);
|
||||
if (!m.find())
|
||||
return "";
|
||||
|
||||
StringBuilder sb = new StringBuilder("<a href=\"");
|
||||
sb.append(URL)
|
||||
.append(m.group("name"))
|
||||
.append("\">")
|
||||
.append(m.group("desc"))
|
||||
.append("</a>");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
@ -48,7 +48,7 @@ package java.io;
|
||||
* may be thrown if the input stream has been
|
||||
* closed.
|
||||
*
|
||||
* <h3><a name="modified-utf-8">Modified UTF-8</a></h3>
|
||||
* <h3><a id="modified-utf-8">Modified UTF-8</a></h3>
|
||||
* <p>
|
||||
* Implementations of the DataInput and DataOutput interfaces represent
|
||||
* Unicode strings in a format that is a slight modification of UTF-8.
|
||||
@ -72,8 +72,8 @@ package java.io;
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <th id="byte1_a">Byte 1</th>
|
||||
* <td><center>0</center>
|
||||
* <td colspan="7"><center>bits 6-0</center>
|
||||
* <td style="text-align:center">0
|
||||
* <td colspan="7" style="text-align:center">bits 6-0
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <th colspan="9"><span style="font-weight:normal">
|
||||
@ -87,16 +87,16 @@ package java.io;
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <th id="byte1_b">Byte 1</th>
|
||||
* <td><center>1</center>
|
||||
* <td><center>1</center>
|
||||
* <td><center>0</center>
|
||||
* <td colspan="5"><center>bits 10-6</center>
|
||||
* <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>
|
||||
* <td><center>1</center>
|
||||
* <td><center>0</center>
|
||||
* <td colspan="6"><center>bits 5-0</center>
|
||||
* <td style="text-align:center">1
|
||||
* <td style="text-align:center">0
|
||||
* <td colspan="6" style="text-align:center">bits 5-0
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <th colspan="9"><span style="font-weight:normal">
|
||||
@ -109,23 +109,23 @@ package java.io;
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <th id="byte1_c">Byte 1</th>
|
||||
* <td><center>1</center>
|
||||
* <td><center>1</center>
|
||||
* <td><center>1</center>
|
||||
* <td><center>0</center>
|
||||
* <td colspan="4"><center>bits 15-12</center>
|
||||
* <td style="text-align:center">1
|
||||
* <td style="text-align:center">1
|
||||
* <td style="text-align:center">1
|
||||
* <td style="text-align:center">0
|
||||
* <td colspan="4" style="text-align:center">bits 15-12
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <th id="byte2_b">Byte 2</th>
|
||||
* <td><center>1</center>
|
||||
* <td><center>0</center>
|
||||
* <td colspan="6"><center>bits 11-6</center>
|
||||
* <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>
|
||||
* <td><center>1</center>
|
||||
* <td><center>0</center>
|
||||
* <td colspan="6"><center>bits 5-0</center>
|
||||
* <td style="text-align:center">1
|
||||
* <td style="text-align:center">0
|
||||
* <td colspan="6" style="text-align:center">bits 5-0
|
||||
* </tr>
|
||||
* </table>
|
||||
* </blockquote>
|
||||
|
@ -113,7 +113,7 @@ import sun.security.action.GetPropertyAction;
|
||||
* operating system-specific portion of storage for a file system. A single
|
||||
* storage device (e.g. a physical disk-drive, flash memory, CD-ROM) may
|
||||
* contain multiple partitions. The object, if any, will reside on the
|
||||
* partition <a name="partName">named</a> by some ancestor of the absolute
|
||||
* partition <a id="partName">named</a> by some ancestor of the absolute
|
||||
* form of this pathname.
|
||||
*
|
||||
* <p> A file system may implement restrictions to certain operations on the
|
||||
|
@ -39,7 +39,7 @@ package java.io;
|
||||
* the stream; it only changes the value that will be returned by
|
||||
* {@code getLineNumber()}.
|
||||
*
|
||||
* <p> A line is considered to be <a name="lt">terminated</a> by any one of a
|
||||
* <p> A line is considered to be <a id="lt">terminated</a> by any one of a
|
||||
* line feed ('\n'), a carriage return ('\r'), or a carriage return followed
|
||||
* immediately by a linefeed.
|
||||
*
|
||||
|
@ -39,7 +39,7 @@ package java.io;
|
||||
* The piped input stream contains a buffer,
|
||||
* decoupling read operations from write operations,
|
||||
* within limits.
|
||||
* A pipe is said to be <a name="BROKEN"> <i>broken</i> </a> if a
|
||||
* A pipe is said to be <a id="BROKEN"> <i>broken</i> </a> if a
|
||||
* thread that was providing data bytes to the connected
|
||||
* piped output stream is no longer alive.
|
||||
*
|
||||
|
@ -35,7 +35,7 @@ import java.io.*;
|
||||
* read from the connected <code>PipedInputStream</code> by some
|
||||
* other thread. Attempting to use both objects from a single thread
|
||||
* is not recommended as it may deadlock the thread.
|
||||
* The pipe is said to be <a name=BROKEN> <i>broken</i> </a> if a
|
||||
* The pipe is said to be <a id=BROKEN> <i>broken</i> </a> if a
|
||||
* thread that was reading data bytes from the connected piped input
|
||||
* stream is no longer alive.
|
||||
*
|
||||
|
@ -132,24 +132,24 @@ public class RandomAccessFile implements DataOutput, DataInput, Closeable {
|
||||
* write to, the file specified by the {@link File} argument. A new {@link
|
||||
* FileDescriptor} object is created to represent this file connection.
|
||||
*
|
||||
* <p>The <a name="mode">{@code mode}</a> argument specifies the access mode
|
||||
* <p>The <a id="mode">{@code mode}</a> argument specifies the access mode
|
||||
* in which the file is to be opened. The permitted values and their
|
||||
* meanings are:
|
||||
*
|
||||
* <table summary="Access mode permitted values and meanings">
|
||||
* <tr><th align="left">Value</th><th align="left">Meaning</th></tr>
|
||||
* <tr><td valign="top">{@code "r"}</td>
|
||||
* <tr><th style="text-align:left">Value</th><th style="text-align:left">Meaning</th></tr>
|
||||
* <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
|
||||
* {@link java.io.IOException} to be thrown.</td></tr>
|
||||
* <tr><td valign="top">{@code "rw"}</td>
|
||||
* <tr><td style="vertical-align:top">{@code "rw"}</td>
|
||||
* <td> Open for reading and writing. If the file does not already
|
||||
* exist then an attempt will be made to create it.</td></tr>
|
||||
* <tr><td valign="top">{@code "rws"}</td>
|
||||
* <tr><td style="vertical-align:top">{@code "rws"}</td>
|
||||
* <td> Open for reading and writing, as with {@code "rw"}, and also
|
||||
* require that every update to the file's content or metadata be
|
||||
* written synchronously to the underlying storage device.</td></tr>
|
||||
* <tr><td valign="top">{@code "rwd"}</td>
|
||||
* <tr><td style="vertical-align:top">{@code "rwd"}</td>
|
||||
* <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>
|
||||
|
@ -56,7 +56,7 @@ import jdk.internal.HotSpotIntrinsicCandidate;
|
||||
* <li><a href="http://www.unicode.org">http://www.unicode.org</a>
|
||||
* </ul>
|
||||
*
|
||||
* <h3><a name="unicode">Unicode Character Representations</a></h3>
|
||||
* <h3><a id="unicode">Unicode Character Representations</a></h3>
|
||||
*
|
||||
* <p>The {@code char} data type (and therefore the value that a
|
||||
* {@code Character} object encapsulates) are based on the
|
||||
@ -70,9 +70,9 @@ import jdk.internal.HotSpotIntrinsicCandidate;
|
||||
* definition</i></a> of the U+<i>n</i> notation in the Unicode
|
||||
* Standard.)
|
||||
*
|
||||
* <p><a name="BMP">The set of characters from U+0000 to U+FFFF</a> is
|
||||
* <p><a id="BMP">The set of characters from U+0000 to U+FFFF</a> is
|
||||
* sometimes referred to as the <em>Basic Multilingual Plane (BMP)</em>.
|
||||
* <a name="supplementary">Characters</a> whose code points are greater
|
||||
* <a id="supplementary">Characters</a> whose code points are greater
|
||||
* than U+FFFF are called <em>supplementary character</em>s. The Java
|
||||
* platform uses the UTF-16 representation in {@code char} arrays and
|
||||
* in the {@code String} and {@code StringBuffer} classes. In
|
||||
|
@ -726,16 +726,16 @@ public final class Class<T> implements java.io.Serializable,
|
||||
*
|
||||
* <blockquote><table summary="Element types and encodings">
|
||||
* <tr><th> Element Type <th> <th> Encoding
|
||||
* <tr><td> boolean <td> <td align=center> Z
|
||||
* <tr><td> byte <td> <td align=center> B
|
||||
* <tr><td> char <td> <td align=center> C
|
||||
* <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
|
||||
* <tr><td> class or interface
|
||||
* <td> <td align=center> L<i>classname</i>;
|
||||
* <tr><td> double <td> <td align=center> D
|
||||
* <tr><td> float <td> <td align=center> F
|
||||
* <tr><td> int <td> <td align=center> I
|
||||
* <tr><td> long <td> <td align=center> J
|
||||
* <tr><td> short <td> <td align=center> S
|
||||
* <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
|
||||
* </table></blockquote>
|
||||
*
|
||||
* <p> The class or interface name <i>classname</i> is the binary name of
|
||||
|
@ -114,7 +114,7 @@ import sun.security.util.SecurityConstants;
|
||||
* duration of the class loading process (see {@link #loadClass
|
||||
* loadClass} methods).
|
||||
*
|
||||
* <h3> <a name="builtinLoaders">Run-time Built-in Class Loaders</a></h3>
|
||||
* <h3> <a id="builtinLoaders">Run-time Built-in Class Loaders</a></h3>
|
||||
*
|
||||
* The Java run-time has the following built-in class loaders:
|
||||
*
|
||||
@ -183,7 +183,7 @@ import sun.security.util.SecurityConstants;
|
||||
* }
|
||||
* </pre></blockquote>
|
||||
*
|
||||
* <h3> <a name="name">Binary names</a> </h3>
|
||||
* <h3> <a id="name">Binary names</a> </h3>
|
||||
*
|
||||
* <p> Any class name provided as a {@code String} parameter to methods in
|
||||
* {@code ClassLoader} must be a binary name as defined by
|
||||
|
@ -71,7 +71,7 @@ import sun.security.action.GetPropertyAction;
|
||||
* working directory of the current process, usually the directory
|
||||
* named by the system property {@code user.dir}.
|
||||
*
|
||||
* <li><a name="redirect-input">a source of <i>standard input</i></a>.
|
||||
* <li><a id="redirect-input">a source of <i>standard input</i></a>.
|
||||
* By default, the subprocess reads input from a pipe. Java code
|
||||
* can access this pipe via the output stream returned by
|
||||
* {@link Process#getOutputStream()}. However, standard input may
|
||||
@ -86,7 +86,7 @@ import sun.security.action.GetPropertyAction;
|
||||
* <li>the {@link OutputStream#close() close} method does nothing
|
||||
* </ul>
|
||||
*
|
||||
* <li><a name="redirect-output">a destination for <i>standard output</i>
|
||||
* <li><a id="redirect-output">a destination for <i>standard output</i>
|
||||
* and <i>standard error</i></a>. By default, the subprocess writes standard
|
||||
* output and standard error to pipes. Java code can access these pipes
|
||||
* via the input streams returned by {@link Process#getOutputStream()} and
|
||||
|
@ -950,7 +950,7 @@ public class Runtime {
|
||||
* Java SE Platform. A version string consists of a version number
|
||||
* optionally followed by pre-release and build information.
|
||||
*
|
||||
* <h2><a name="verNum">Version numbers</a></h2>
|
||||
* <h2><a id="verNum">Version numbers</a></h2>
|
||||
*
|
||||
* <p> A <em>version number</em>, {@code $VNUM}, is a non-empty sequence
|
||||
* of elements separated by period characters (U+002E). An element is
|
||||
@ -971,7 +971,7 @@ public class Runtime {
|
||||
*
|
||||
* <ul>
|
||||
*
|
||||
* <li><p> <a name="major">{@code $MAJOR}</a> --- The major version
|
||||
* <li><p> <a id="major">{@code $MAJOR}</a> --- The major version
|
||||
* number, incremented for a major release that contains significant new
|
||||
* features as specified in a new edition of the Java SE Platform
|
||||
* Specification, <em>e.g.</em>, <a
|
||||
@ -983,7 +983,7 @@ public class Runtime {
|
||||
* number of JDK 9 is {@code 9}. When {@code $MAJOR} is incremented,
|
||||
* all subsequent elements are removed. </p></li>
|
||||
*
|
||||
* <li><p> <a name="minor">{@code $MINOR}</a> --- The minor version
|
||||
* <li><p> <a id="minor">{@code $MINOR}</a> --- The minor version
|
||||
* number, incremented for a minor update release that may contain
|
||||
* compatible bug fixes, revisions to standard APIs mandated by a
|
||||
* <a href="https://jcp.org/en/procedures/jcp2#5.3">Maintenance Release</a>
|
||||
@ -992,7 +992,7 @@ public class Runtime {
|
||||
* additional service providers, new garbage collectors, and ports to new
|
||||
* hardware architectures. </p></li>
|
||||
*
|
||||
* <li><p> <a name="security">{@code $SECURITY}</a> --- The security
|
||||
* <li><p> <a id="security">{@code $SECURITY}</a> --- The security
|
||||
* level, incremented for a security update release that contains critical
|
||||
* fixes including those necessary to improve security. {@code $SECURITY}
|
||||
* is <strong>not</strong> reset when {@code $MINOR} is incremented. A
|
||||
@ -1021,7 +1021,7 @@ public class Runtime {
|
||||
* sequence; <em>e.g.</em>, {@code 9.1.2} is less than {@code 9.1.2.1}.
|
||||
* </p>
|
||||
*
|
||||
* <h2><a name="verStr">Version strings</a></h2>
|
||||
* <h2><a id="verStr">Version strings</a></h2>
|
||||
*
|
||||
* <p> A <em>version string</em>, {@code $VSTR}, consists of a version
|
||||
* number {@code $VNUM}, as described above, optionally followed by
|
||||
@ -1038,17 +1038,17 @@ public class Runtime {
|
||||
*
|
||||
* <ul>
|
||||
*
|
||||
* <li><p> <a name="pre">{@code $PRE}</a>, matching {@code ([a-zA-Z0-9]+)}
|
||||
* <li><p> <a id="pre">{@code $PRE}</a>, matching {@code ([a-zA-Z0-9]+)}
|
||||
* --- A pre-release identifier. Typically {@code ea}, for a
|
||||
* potentially unstable early-access release under active development,
|
||||
* or {@code internal}, for an internal developer build. </p></li>
|
||||
*
|
||||
* <li><p> <a name="build">{@code $BUILD}</a>, matching {@code
|
||||
* <li><p> <a id="build">{@code $BUILD}</a>, matching {@code
|
||||
* (0|[1-9][0-9]*)} --- The build number, incremented for each promoted
|
||||
* build. {@code $BUILD} is reset to {@code 1} when any portion of {@code
|
||||
* $VNUM} is incremented. </p></li>
|
||||
*
|
||||
* <li><p> <a name="opt">{@code $OPT}</a>, matching {@code
|
||||
* <li><p> <a id="opt">{@code $OPT}</a>, matching {@code
|
||||
* ([-a-zA-Z0-9.]+)} --- Additional build information, if desired. In
|
||||
* the case of an {@code internal} build this will often contain the date
|
||||
* and time of the build. </p></li>
|
||||
|
@ -2209,23 +2209,23 @@ public final class String
|
||||
* <th>Limit</th>
|
||||
* <th>Result</th>
|
||||
* </tr>
|
||||
* <tr><td align=center>:</td>
|
||||
* <td align=center>2</td>
|
||||
* <tr><td style="text-align:center">:</td>
|
||||
* <td style="text-align:center">2</td>
|
||||
* <td>{@code { "boo", "and:foo" }}</td></tr>
|
||||
* <tr><td align=center>:</td>
|
||||
* <td align=center>5</td>
|
||||
* <tr><td style="text-align:center">:</td>
|
||||
* <td style="text-align:center">5</td>
|
||||
* <td>{@code { "boo", "and", "foo" }}</td></tr>
|
||||
* <tr><td align=center>:</td>
|
||||
* <td align=center>-2</td>
|
||||
* <tr><td style="text-align:center">:</td>
|
||||
* <td style="text-align:center">-2</td>
|
||||
* <td>{@code { "boo", "and", "foo" }}</td></tr>
|
||||
* <tr><td align=center>o</td>
|
||||
* <td align=center>5</td>
|
||||
* <tr><td style="text-align:center">o</td>
|
||||
* <td style="text-align:center">5</td>
|
||||
* <td>{@code { "b", "", ":and:f", "", "" }}</td></tr>
|
||||
* <tr><td align=center>o</td>
|
||||
* <td align=center>-2</td>
|
||||
* <tr><td style="text-align:center">o</td>
|
||||
* <td style="text-align:center">-2</td>
|
||||
* <td>{@code { "b", "", ":and:f", "", "" }}</td></tr>
|
||||
* <tr><td align=center>o</td>
|
||||
* <td align=center>0</td>
|
||||
* <tr><td style="text-align:center">o</td>
|
||||
* <td style="text-align:center">0</td>
|
||||
* <td>{@code { "b", "", ":and:f" }}</td></tr>
|
||||
* </table></blockquote>
|
||||
*
|
||||
@ -2331,9 +2331,9 @@ public final class String
|
||||
* <th>Regex</th>
|
||||
* <th>Result</th>
|
||||
* </tr>
|
||||
* <tr><td align=center>:</td>
|
||||
* <tr><td style="text-align:center">:</td>
|
||||
* <td>{@code { "boo", "and", "foo" }}</td></tr>
|
||||
* <tr><td align=center>o</td>
|
||||
* <tr><td style="text-align:center">o</td>
|
||||
* <td>{@code { "b", "", ":and:f" }}</td></tr>
|
||||
* </table></blockquote>
|
||||
*
|
||||
|
@ -899,7 +899,7 @@ public final class System {
|
||||
* being thrown. If no exception is thrown the value of the
|
||||
* variable <code>name</code> is returned.
|
||||
*
|
||||
* <p><a name="EnvironmentVSSystemProperties"><i>System
|
||||
* <p><a id="EnvironmentVSSystemProperties"><i>System
|
||||
* properties</i> and <i>environment variables</i></a> are both
|
||||
* conceptually mappings between names and values. Both
|
||||
* mechanisms can be used to pass user-defined information to a
|
||||
|
@ -310,7 +310,7 @@ mh.invokeExact(System.out, "Hello, world.");
|
||||
* throwables locally, rethrowing only those which are legal in the context,
|
||||
* and wrapping ones which are illegal.
|
||||
*
|
||||
* <h1><a name="sigpoly"></a>Signature polymorphism</h1>
|
||||
* <h1><a id="sigpoly"></a>Signature polymorphism</h1>
|
||||
* The unusual compilation and linkage behavior of
|
||||
* {@code invokeExact} and plain {@code invoke}
|
||||
* is referenced by the term <em>signature polymorphism</em>.
|
||||
@ -404,7 +404,7 @@ mh.invokeExact(System.out, "Hello, world.");
|
||||
* genericity with a Java type parameter.</li>
|
||||
* </ul>
|
||||
*
|
||||
* <h1><a name="maxarity"></a>Arity limits</h1>
|
||||
* <h1><a id="maxarity"></a>Arity limits</h1>
|
||||
* The JVM imposes on all methods and constructors of any kind an absolute
|
||||
* limit of 255 stacked arguments. This limit can appear more restrictive
|
||||
* in certain cases:
|
||||
|
@ -35,7 +35,7 @@ import static java.lang.invoke.MethodHandleStatics.*;
|
||||
* A symbolic reference obtained by cracking a direct method handle
|
||||
* into its consitutent symbolic parts.
|
||||
* To crack a direct method handle, call {@link Lookup#revealDirect Lookup.revealDirect}.
|
||||
* <h1><a name="directmh"></a>Direct Method Handles</h1>
|
||||
* <h1><a id="directmh"></a>Direct Method Handles</h1>
|
||||
* A <em>direct method handle</em> represents a method, constructor, or field without
|
||||
* any intervening argument bindings or other transformations.
|
||||
* The method, constructor, or field referred to by a direct method handle is called
|
||||
@ -77,7 +77,7 @@ import static java.lang.invoke.MethodHandleStatics.*;
|
||||
* handle with symbolic information (or caller binding) from an unexpected scope.
|
||||
* Use {@link java.lang.invoke.MethodHandles#reflectAs} to override this limitation.
|
||||
*
|
||||
* <h1><a name="refkinds"></a>Reference kinds</h1>
|
||||
* <h1><a id="refkinds"></a>Reference kinds</h1>
|
||||
* 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:
|
||||
|
@ -257,7 +257,7 @@ public class MethodHandles {
|
||||
* This includes all methods, constructors, and fields which are allowed to the lookup class,
|
||||
* even private ones.
|
||||
*
|
||||
* <h1><a name="lookups"></a>Lookup Factory Methods</h1>
|
||||
* <h1><a id="lookups"></a>Lookup Factory Methods</h1>
|
||||
* The factory methods on a {@code Lookup} object correspond to all major
|
||||
* use cases for methods, constructors, and fields.
|
||||
* Each method handle created by a factory method is the functional
|
||||
@ -267,7 +267,7 @@ public class MethodHandles {
|
||||
* the behavior of the resulting method handles:
|
||||
* <table border=1 cellpadding=5 summary="lookup method behaviors">
|
||||
* <tr>
|
||||
* <th><a name="equiv"></a>lookup expression</th>
|
||||
* <th><a id="equiv"></a>lookup expression</th>
|
||||
* <th>member</th>
|
||||
* <th>bytecode behavior</th>
|
||||
* </tr>
|
||||
@ -378,7 +378,7 @@ public class MethodHandles {
|
||||
* type having too many parameters.
|
||||
* </ul>
|
||||
*
|
||||
* <h1><a name="access"></a>Access checking</h1>
|
||||
* <h1><a id="access"></a>Access checking</h1>
|
||||
* Access checks are applied in the factory methods of {@code Lookup},
|
||||
* when a method handle is created.
|
||||
* This is a key difference from the Core Reflection API, since
|
||||
@ -483,7 +483,7 @@ public class MethodHandles {
|
||||
* with fewer access modes than the original lookup object.
|
||||
*
|
||||
* <p style="font-size:smaller;">
|
||||
* <a name="privacc"></a>
|
||||
* <a id="privacc"></a>
|
||||
* <em>Discussion of private access:</em>
|
||||
* We say that a lookup has <em>private access</em>
|
||||
* if its {@linkplain #lookupModes lookup modes}
|
||||
@ -506,7 +506,7 @@ public class MethodHandles {
|
||||
* whose <a href="MethodHandles.Lookup.html#equiv">bytecode behaviors</a> and Java language access permissions
|
||||
* can be reliably determined and emulated by method handles.
|
||||
*
|
||||
* <h1><a name="secmgr"></a>Security manager interactions</h1>
|
||||
* <h1><a id="secmgr"></a>Security manager interactions</h1>
|
||||
* Although bytecode instructions can only refer to classes in
|
||||
* a related class loader, this API can search for methods in any
|
||||
* class, as long as a reference to its {@code Class} object is
|
||||
@ -565,7 +565,7 @@ public class MethodHandles {
|
||||
* or else that is being accessed from a lookup class that has
|
||||
* rights to access the member or class.
|
||||
*
|
||||
* <h1><a name="callsens"></a>Caller sensitive methods</h1>
|
||||
* <h1><a id="callsens"></a>Caller sensitive methods</h1>
|
||||
* A small number of Java methods have a special property called caller sensitivity.
|
||||
* A <em>caller-sensitive</em> method can behave differently depending on the
|
||||
* identity of its immediate caller.
|
||||
@ -4497,7 +4497,7 @@ assertEquals("boojum", (String) catTrace.invokeExact("boo", "jum"));
|
||||
* The init functions can observe initial pre-loop state, in the form {@code (a...)}.
|
||||
* Most clause functions will not need all of this information, but they will be formally connected to it
|
||||
* as if by {@link #dropArguments}.
|
||||
* <a name="astar"></a>
|
||||
* <a id="astar"></a>
|
||||
* More specifically, we shall use the notation {@code (V*)} to express an arbitrary prefix of a full
|
||||
* sequence {@code (V...)} (and likewise for {@code (v*)}, {@code (A*)}, {@code (a*)}).
|
||||
* In that notation, the general form of an init function parameter list
|
||||
@ -4510,7 +4510,7 @@ assertEquals("boojum", (String) catTrace.invokeExact("boo", "jum"));
|
||||
* met by the inputs to the loop combinator.
|
||||
* <p>
|
||||
* <em>Effectively identical sequences:</em>
|
||||
* <a name="effid"></a>
|
||||
* <a id="effid"></a>
|
||||
* A parameter list {@code A} is defined to be <em>effectively identical</em> to another parameter list {@code B}
|
||||
* if {@code A} and {@code B} are identical, or if {@code A} is shorter and is identical with a proper prefix of {@code B}.
|
||||
* When speaking of an unordered set of parameter lists, we say they the set is "effectively identical"
|
||||
|
@ -247,7 +247,7 @@ import static java.lang.invoke.MethodHandleStatics.newInternalError;
|
||||
* except the null reference.
|
||||
*
|
||||
*
|
||||
* <h1><a name="invoke">Invocation of an access mode's method</a></h1>
|
||||
* <h1><a id="invoke">Invocation of an access mode's method</a></h1>
|
||||
* The first time an {@code invokevirtual} instruction is executed it is linked
|
||||
* by symbolically resolving the names in the instruction and verifying that
|
||||
* the method call is statically legal. This also holds for calls to access mode
|
||||
|
@ -119,7 +119,7 @@ import java.util.function.Function;
|
||||
* Using a static nested class, as above, will avoid accidentally retaining the
|
||||
* object reference.
|
||||
* <p>
|
||||
* <a name="compatible-cleaners"></a>
|
||||
* <a id="compatible-cleaners"></a>
|
||||
* Cleaning actions should be prepared to be invoked concurrently with
|
||||
* other cleaning actions.
|
||||
* Typically the cleaning actions should be very quick to execute
|
||||
|
@ -93,7 +93,7 @@
|
||||
* structure, this check will add little overhead to the hashtable
|
||||
* access methods.
|
||||
*
|
||||
* <a name="reachability"></a>
|
||||
* <a id="reachability"></a>
|
||||
* <h3>Reachability</h3>
|
||||
*
|
||||
* Going from strongest to weakest, the different levels of
|
||||
|
@ -109,22 +109,22 @@ import sun.reflect.annotation.AnnotationType;
|
||||
* <caption>Overview of kind of presence detected by different AnnotatedElement methods</caption>
|
||||
* <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>
|
||||
* <tr><td align=right>{@code T}</td><td>{@link #getAnnotation(Class) getAnnotation(Class<T>)}
|
||||
* <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>
|
||||
* <tr><td align=right>{@code Annotation[]}</td><td>{@link #getAnnotations getAnnotations()}
|
||||
* <tr><td style="text-align:right">{@code Annotation[]}</td><td>{@link #getAnnotations getAnnotations()}
|
||||
* <td></td><td></td><td>X</td><td></td>
|
||||
* </tr>
|
||||
* <tr><td align=right>{@code T[]}</td><td>{@link #getAnnotationsByType(Class) getAnnotationsByType(Class<T>)}
|
||||
* <tr><td style="text-align:right">{@code T[]}</td><td>{@link #getAnnotationsByType(Class) getAnnotationsByType(Class<T>)}
|
||||
* <td></td><td></td><td></td><td>X</td>
|
||||
* </tr>
|
||||
* <tr><td align=right>{@code T}</td><td>{@link #getDeclaredAnnotation(Class) getDeclaredAnnotation(Class<T>)}
|
||||
* <tr><td style="text-align:right">{@code T}</td><td>{@link #getDeclaredAnnotation(Class) getDeclaredAnnotation(Class<T>)}
|
||||
* <td>X</td><td></td><td></td><td></td>
|
||||
* </tr>
|
||||
* <tr><td align=right>{@code Annotation[]}</td><td>{@link #getDeclaredAnnotations getDeclaredAnnotations()}
|
||||
* <tr><td style="text-align:right">{@code Annotation[]}</td><td>{@link #getDeclaredAnnotations getDeclaredAnnotations()}
|
||||
* <td>X</td><td></td><td></td><td></td>
|
||||
* </tr>
|
||||
* <tr><td align=right>{@code T[]}</td><td>{@link #getDeclaredAnnotationsByType(Class) getDeclaredAnnotationsByType(Class<T>)}
|
||||
* <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>
|
||||
* </table>
|
||||
|
@ -157,7 +157,7 @@ import static java.lang.module.ModuleDescriptor.Modifier.SYNTHETIC;
|
||||
* like they do for instances of {@code java.lang.Object}.
|
||||
* </ul>
|
||||
*
|
||||
* <h3><a name="membership">Package and Module Membership of Proxy Class</a></h3>
|
||||
* <h3><a id="membership">Package and Module Membership of Proxy Class</a></h3>
|
||||
*
|
||||
* The package and module to which a proxy class belongs are chosen such that
|
||||
* the accessibility of the proxy class is in line with the accessibility of
|
||||
@ -218,7 +218,7 @@ import static java.lang.module.ModuleDescriptor.Modifier.SYNTHETIC;
|
||||
* a package that either is not exported/open by its containing module or is
|
||||
* exported/open in a qualified fashion by its containing module.
|
||||
*
|
||||
* <h3><a name="dynamicmodule">Dynamic Modules</a></h3>
|
||||
* <h3><a id="dynamicmodule">Dynamic Modules</a></h3>
|
||||
* <p>
|
||||
* A dynamic module is a named module generated at runtime. A proxy class
|
||||
* defined in a dynamic module is encapsulated and not accessible to any module.
|
||||
@ -894,7 +894,7 @@ public class Proxy implements java.io.Serializable {
|
||||
* that dispatches method invocations to the specified invocation
|
||||
* handler.
|
||||
* <p>
|
||||
* <a name="restrictions">{@code IllegalArgumentException} will be thrown
|
||||
* <a id="restrictions">{@code IllegalArgumentException} will be thrown
|
||||
* if any of the following restrictions is violated:</a>
|
||||
* <ul>
|
||||
* <li>All of {@code Class} objects in the given {@code interfaces} array
|
||||
|
@ -55,7 +55,7 @@ package java.math;
|
||||
* <caption><b>Summary of Rounding Operations Under Different Rounding Modes</b></caption>
|
||||
* <tr><th></th><th colspan=8>Result of rounding input to one digit with the given
|
||||
* rounding mode</th>
|
||||
* <tr valign=top>
|
||||
* <tr style="vertical-align:top">
|
||||
* <th>Input Number</th> <th>{@code UP}</th>
|
||||
* <th>{@code DOWN}</th>
|
||||
* <th>{@code CEILING}</th>
|
||||
@ -65,16 +65,16 @@ package java.math;
|
||||
* <th>{@code HALF_EVEN}</th>
|
||||
* <th>{@code UNNECESSARY}</th>
|
||||
*
|
||||
* <tr 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 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>
|
||||
* <tr align=right><td>1.6</td> <td>2</td> <td>1</td> <td>2</td> <td>1</td> <td>2</td> <td>2</td> <td>2</td> <td>throw {@code ArithmeticException}</td>
|
||||
* <tr align=right><td>1.1</td> <td>2</td> <td>1</td> <td>2</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>throw {@code ArithmeticException}</td>
|
||||
* <tr align=right><td>1.0</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td>
|
||||
* <tr align=right><td>-1.0</td> <td>-1</td> <td>-1</td> <td>-1</td> <td>-1</td> <td>-1</td> <td>-1</td> <td>-1</td> <td>-1</td>
|
||||
* <tr align=right><td>-1.1</td> <td>-2</td> <td>-1</td> <td>-1</td> <td>-2</td> <td>-1</td> <td>-1</td> <td>-1</td> <td>throw {@code ArithmeticException}</td>
|
||||
* <tr 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 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 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>
|
||||
* <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>
|
||||
* <tr style="text-align:right"><td>1.6</td> <td>2</td> <td>1</td> <td>2</td> <td>1</td> <td>2</td> <td>2</td> <td>2</td> <td>throw {@code ArithmeticException}</td>
|
||||
* <tr style="text-align:right"><td>1.1</td> <td>2</td> <td>1</td> <td>2</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>throw {@code ArithmeticException}</td>
|
||||
* <tr style="text-align:right"><td>1.0</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td> <td>1</td>
|
||||
* <tr style="text-align:right"><td>-1.0</td> <td>-1</td> <td>-1</td> <td>-1</td> <td>-1</td> <td>-1</td> <td>-1</td> <td>-1</td> <td>-1</td>
|
||||
* <tr style="text-align:right"><td>-1.1</td> <td>-2</td> <td>-1</td> <td>-1</td> <td>-2</td> <td>-1</td> <td>-1</td> <td>-1</td> <td>throw {@code ArithmeticException}</td>
|
||||
* <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>
|
||||
*
|
||||
*
|
||||
@ -102,18 +102,18 @@ public enum RoundingMode {
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode UP Examples</b></caption>
|
||||
*<tr valign=top><th>Input Number</th>
|
||||
*<tr style="vertical-align:top"><th>Input Number</th>
|
||||
* <th>Input rounded to one digit<br> with {@code UP} rounding
|
||||
*<tr align=right><td>5.5</td> <td>6</td>
|
||||
*<tr align=right><td>2.5</td> <td>3</td>
|
||||
*<tr align=right><td>1.6</td> <td>2</td>
|
||||
*<tr align=right><td>1.1</td> <td>2</td>
|
||||
*<tr align=right><td>1.0</td> <td>1</td>
|
||||
*<tr align=right><td>-1.0</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.1</td> <td>-2</td>
|
||||
*<tr align=right><td>-1.6</td> <td>-2</td>
|
||||
*<tr align=right><td>-2.5</td> <td>-3</td>
|
||||
*<tr align=right><td>-5.5</td> <td>-6</td>
|
||||
*<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>
|
||||
*<tr style="text-align:right"><td>1.1</td> <td>2</td>
|
||||
*<tr style="text-align:right"><td>1.0</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
|
||||
*<tr style="text-align:right"><td>-1.1</td> <td>-2</td>
|
||||
*<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>
|
||||
*</table>
|
||||
*/
|
||||
UP(BigDecimal.ROUND_UP),
|
||||
@ -126,18 +126,18 @@ public enum RoundingMode {
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode DOWN Examples</b></caption>
|
||||
*<tr valign=top><th>Input Number</th>
|
||||
*<tr style="vertical-align:top"><th>Input Number</th>
|
||||
* <th>Input rounded to one digit<br> with {@code DOWN} rounding
|
||||
*<tr align=right><td>5.5</td> <td>5</td>
|
||||
*<tr align=right><td>2.5</td> <td>2</td>
|
||||
*<tr align=right><td>1.6</td> <td>1</td>
|
||||
*<tr align=right><td>1.1</td> <td>1</td>
|
||||
*<tr align=right><td>1.0</td> <td>1</td>
|
||||
*<tr align=right><td>-1.0</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.1</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.6</td> <td>-1</td>
|
||||
*<tr align=right><td>-2.5</td> <td>-2</td>
|
||||
*<tr align=right><td>-5.5</td> <td>-5</td>
|
||||
*<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>
|
||||
*<tr style="text-align:right"><td>1.1</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>1.0</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
|
||||
*<tr style="text-align:right"><td>-1.1</td> <td>-1</td>
|
||||
*<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>
|
||||
*</table>
|
||||
*/
|
||||
DOWN(BigDecimal.ROUND_DOWN),
|
||||
@ -151,18 +151,18 @@ public enum RoundingMode {
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode CEILING Examples</b></caption>
|
||||
*<tr valign=top><th>Input Number</th>
|
||||
*<tr style="vertical-align:top"><th>Input Number</th>
|
||||
* <th>Input rounded to one digit<br> with {@code CEILING} rounding
|
||||
*<tr align=right><td>5.5</td> <td>6</td>
|
||||
*<tr align=right><td>2.5</td> <td>3</td>
|
||||
*<tr align=right><td>1.6</td> <td>2</td>
|
||||
*<tr align=right><td>1.1</td> <td>2</td>
|
||||
*<tr align=right><td>1.0</td> <td>1</td>
|
||||
*<tr align=right><td>-1.0</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.1</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.6</td> <td>-1</td>
|
||||
*<tr align=right><td>-2.5</td> <td>-2</td>
|
||||
*<tr align=right><td>-5.5</td> <td>-5</td>
|
||||
*<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>
|
||||
*<tr style="text-align:right"><td>1.1</td> <td>2</td>
|
||||
*<tr style="text-align:right"><td>1.0</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
|
||||
*<tr style="text-align:right"><td>-1.1</td> <td>-1</td>
|
||||
*<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>
|
||||
*</table>
|
||||
*/
|
||||
CEILING(BigDecimal.ROUND_CEILING),
|
||||
@ -176,18 +176,18 @@ public enum RoundingMode {
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode FLOOR Examples</b></caption>
|
||||
*<tr valign=top><th>Input Number</th>
|
||||
*<tr style="vertical-align:top"><th>Input Number</th>
|
||||
* <th>Input rounded to one digit<br> with {@code FLOOR} rounding
|
||||
*<tr align=right><td>5.5</td> <td>5</td>
|
||||
*<tr align=right><td>2.5</td> <td>2</td>
|
||||
*<tr align=right><td>1.6</td> <td>1</td>
|
||||
*<tr align=right><td>1.1</td> <td>1</td>
|
||||
*<tr align=right><td>1.0</td> <td>1</td>
|
||||
*<tr align=right><td>-1.0</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.1</td> <td>-2</td>
|
||||
*<tr align=right><td>-1.6</td> <td>-2</td>
|
||||
*<tr align=right><td>-2.5</td> <td>-3</td>
|
||||
*<tr align=right><td>-5.5</td> <td>-6</td>
|
||||
*<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>
|
||||
*<tr style="text-align:right"><td>1.1</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>1.0</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
|
||||
*<tr style="text-align:right"><td>-1.1</td> <td>-2</td>
|
||||
*<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>
|
||||
*</table>
|
||||
*/
|
||||
FLOOR(BigDecimal.ROUND_FLOOR),
|
||||
@ -203,18 +203,18 @@ public enum RoundingMode {
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode HALF_UP Examples</b></caption>
|
||||
*<tr valign=top><th>Input Number</th>
|
||||
*<tr style="vertical-align:top"><th>Input Number</th>
|
||||
* <th>Input rounded to one digit<br> with {@code HALF_UP} rounding
|
||||
*<tr align=right><td>5.5</td> <td>6</td>
|
||||
*<tr align=right><td>2.5</td> <td>3</td>
|
||||
*<tr align=right><td>1.6</td> <td>2</td>
|
||||
*<tr align=right><td>1.1</td> <td>1</td>
|
||||
*<tr align=right><td>1.0</td> <td>1</td>
|
||||
*<tr align=right><td>-1.0</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.1</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.6</td> <td>-2</td>
|
||||
*<tr align=right><td>-2.5</td> <td>-3</td>
|
||||
*<tr align=right><td>-5.5</td> <td>-6</td>
|
||||
*<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>
|
||||
*<tr style="text-align:right"><td>1.1</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>1.0</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
|
||||
*<tr style="text-align:right"><td>-1.1</td> <td>-1</td>
|
||||
*<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>
|
||||
*</table>
|
||||
*/
|
||||
HALF_UP(BigDecimal.ROUND_HALF_UP),
|
||||
@ -229,18 +229,18 @@ public enum RoundingMode {
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode HALF_DOWN Examples</b></caption>
|
||||
*<tr valign=top><th>Input Number</th>
|
||||
*<tr style="vertical-align:top"><th>Input Number</th>
|
||||
* <th>Input rounded to one digit<br> with {@code HALF_DOWN} rounding
|
||||
*<tr align=right><td>5.5</td> <td>5</td>
|
||||
*<tr align=right><td>2.5</td> <td>2</td>
|
||||
*<tr align=right><td>1.6</td> <td>2</td>
|
||||
*<tr align=right><td>1.1</td> <td>1</td>
|
||||
*<tr align=right><td>1.0</td> <td>1</td>
|
||||
*<tr align=right><td>-1.0</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.1</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.6</td> <td>-2</td>
|
||||
*<tr align=right><td>-2.5</td> <td>-2</td>
|
||||
*<tr align=right><td>-5.5</td> <td>-5</td>
|
||||
*<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>
|
||||
*<tr style="text-align:right"><td>1.1</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>1.0</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
|
||||
*<tr style="text-align:right"><td>-1.1</td> <td>-1</td>
|
||||
*<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>
|
||||
*</table>
|
||||
*/
|
||||
HALF_DOWN(BigDecimal.ROUND_HALF_DOWN),
|
||||
@ -262,18 +262,18 @@ public enum RoundingMode {
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode HALF_EVEN Examples</b></caption>
|
||||
*<tr valign=top><th>Input Number</th>
|
||||
*<tr style="vertical-align:top"><th>Input Number</th>
|
||||
* <th>Input rounded to one digit<br> with {@code HALF_EVEN} rounding
|
||||
*<tr align=right><td>5.5</td> <td>6</td>
|
||||
*<tr align=right><td>2.5</td> <td>2</td>
|
||||
*<tr align=right><td>1.6</td> <td>2</td>
|
||||
*<tr align=right><td>1.1</td> <td>1</td>
|
||||
*<tr align=right><td>1.0</td> <td>1</td>
|
||||
*<tr align=right><td>-1.0</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.1</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.6</td> <td>-2</td>
|
||||
*<tr align=right><td>-2.5</td> <td>-2</td>
|
||||
*<tr align=right><td>-5.5</td> <td>-6</td>
|
||||
*<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>
|
||||
*<tr style="text-align:right"><td>1.1</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>1.0</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
|
||||
*<tr style="text-align:right"><td>-1.1</td> <td>-1</td>
|
||||
*<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>
|
||||
*</table>
|
||||
*/
|
||||
HALF_EVEN(BigDecimal.ROUND_HALF_EVEN),
|
||||
@ -286,18 +286,18 @@ public enum RoundingMode {
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode UNNECESSARY Examples</b></caption>
|
||||
*<tr valign=top><th>Input Number</th>
|
||||
*<tr style="vertical-align:top"><th>Input Number</th>
|
||||
* <th>Input rounded to one digit<br> with {@code UNNECESSARY} rounding
|
||||
*<tr align=right><td>5.5</td> <td>throw {@code ArithmeticException}</td>
|
||||
*<tr align=right><td>2.5</td> <td>throw {@code ArithmeticException}</td>
|
||||
*<tr align=right><td>1.6</td> <td>throw {@code ArithmeticException}</td>
|
||||
*<tr align=right><td>1.1</td> <td>throw {@code ArithmeticException}</td>
|
||||
*<tr align=right><td>1.0</td> <td>1</td>
|
||||
*<tr align=right><td>-1.0</td> <td>-1</td>
|
||||
*<tr align=right><td>-1.1</td> <td>throw {@code ArithmeticException}</td>
|
||||
*<tr align=right><td>-1.6</td> <td>throw {@code ArithmeticException}</td>
|
||||
*<tr align=right><td>-2.5</td> <td>throw {@code ArithmeticException}</td>
|
||||
*<tr align=right><td>-5.5</td> <td>throw {@code ArithmeticException}</td>
|
||||
*<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>
|
||||
*<tr style="text-align:right"><td>1.1</td> <td>throw {@code ArithmeticException}</td>
|
||||
*<tr style="text-align:right"><td>1.0</td> <td>1</td>
|
||||
*<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
|
||||
*<tr style="text-align:right"><td>-1.1</td> <td>throw {@code ArithmeticException}</td>
|
||||
*<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>
|
||||
*</table>
|
||||
*/
|
||||
UNNECESSARY(BigDecimal.ROUND_UNNECESSARY);
|
||||
|
@ -36,7 +36,7 @@ import java.io.ObjectStreamException;
|
||||
* and <a href="http://www.ietf.org/rfc/rfc2365.txt"><i>RFC 2365:
|
||||
* Administratively Scoped IP Multicast</i></a>
|
||||
*
|
||||
* <h3> <A NAME="format">Textual representation of IP addresses</a> </h3>
|
||||
* <h3> <a id="format">Textual representation of IP addresses</a> </h3>
|
||||
*
|
||||
* Textual representation of IPv4 address used as input to methods
|
||||
* takes one of the following forms:
|
||||
|
@ -38,13 +38,13 @@ import java.util.Arrays;
|
||||
* Defined by <a href="http://www.ietf.org/rfc/rfc2373.txt">
|
||||
* <i>RFC 2373: IP Version 6 Addressing Architecture</i></a>.
|
||||
*
|
||||
* <h3> <A NAME="format">Textual representation of IP addresses</a> </h3>
|
||||
* <h3> <a id="format">Textual representation of IP addresses</a> </h3>
|
||||
*
|
||||
* Textual representation of IPv6 address used as input to methods
|
||||
* takes one of the following forms:
|
||||
*
|
||||
* <ol>
|
||||
* <li><p> <A NAME="lform">The preferred form</a> is x:x:x:x:x:x:x:x,
|
||||
* <li><p> <a id="lform">The preferred form</a> is x:x:x:x:x:x:x:x,
|
||||
* where the 'x's are
|
||||
* the hexadecimal values of the eight 16-bit pieces of the
|
||||
* address. This is the full form. For example,
|
||||
@ -134,7 +134,7 @@ import java.util.Arrays;
|
||||
* address.</td></tr>
|
||||
* </table></blockquote>
|
||||
*
|
||||
* <h4><A NAME="scoped">Textual representation of IPv6 scoped addresses</a></h4>
|
||||
* <h4><a id="scoped">Textual representation of IPv6 scoped addresses</a></h4>
|
||||
*
|
||||
* <p> The textual representation of IPv6 addresses as described above can be
|
||||
* extended to specify IPv6 scoped addresses. This extension to the basic
|
||||
|
@ -281,7 +281,7 @@ import java.lang.NullPointerException; // for javadoc
|
||||
* limited to US-ASCII)</i></td></tr>
|
||||
* </table></blockquote>
|
||||
*
|
||||
* <p><a name="legal-chars"></a> The set of all legal URI characters consists of
|
||||
* <p><a id="legal-chars"></a> The set of all legal URI characters consists of
|
||||
* the <i>unreserved</i>, <i>reserved</i>, <i>escaped</i>, and <i>other</i>
|
||||
* characters.
|
||||
*
|
||||
@ -308,20 +308,20 @@ import java.lang.NullPointerException; // for javadoc
|
||||
*
|
||||
* <ul>
|
||||
*
|
||||
* <li><p><a name="encode"></a> A character is <i>encoded</i> by replacing it
|
||||
* <li><p><a id="encode"></a> A character is <i>encoded</i> by replacing it
|
||||
* with the sequence of escaped octets that represent that character in the
|
||||
* UTF-8 character set. The Euro currency symbol ({@code '\u005Cu20AC'}),
|
||||
* for example, is encoded as {@code "%E2%82%AC"}. <i>(<b>Deviation from
|
||||
* RFC 2396</b>, which does not specify any particular character
|
||||
* set.)</i> </p></li>
|
||||
*
|
||||
* <li><p><a name="quote"></a> An illegal character is <i>quoted</i> simply by
|
||||
* <li><p><a id="quote"></a> An illegal character is <i>quoted</i> simply by
|
||||
* encoding it. The space character, for example, is quoted by replacing it
|
||||
* with {@code "%20"}. UTF-8 contains US-ASCII, hence for US-ASCII
|
||||
* characters this transformation has exactly the effect required by
|
||||
* RFC 2396. </p></li>
|
||||
*
|
||||
* <li><p><a name="decode"></a>
|
||||
* <li><p><a id="decode"></a>
|
||||
* A sequence of escaped octets is <i>decoded</i> by
|
||||
* replacing it with the sequence of characters that it represents in the
|
||||
* UTF-8 character set. UTF-8 contains US-ASCII, hence decoding has the
|
||||
@ -983,7 +983,7 @@ public final class URI
|
||||
* <p> If the given URI is already absolute, or if this URI is opaque, then
|
||||
* the given URI is returned.
|
||||
*
|
||||
* <p><a name="resolve-frag"></a> If the given URI's fragment component is
|
||||
* <p><a id="resolve-frag"></a> If the given URI's fragment component is
|
||||
* defined, its path component is empty, and its scheme, authority, and
|
||||
* query components are undefined, then a URI with the given fragment but
|
||||
* with all other components equal to those of this URI is returned. This
|
||||
|
@ -54,7 +54,7 @@ import sun.security.action.GetPropertyAction;
|
||||
* read from and to write to the resource referenced by the URL. In
|
||||
* general, creating a connection to a URL is a multistep process:
|
||||
*
|
||||
* <center><table border=2 summary="Describes the process of creating a connection to a URL: openConnection() and connect() over time.">
|
||||
* <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.">
|
||||
* <tr><th>{@code openConnection()}</th>
|
||||
* <th>{@code connect()}</th></tr>
|
||||
* <tr><td>Manipulate parameters that affect the connection to the remote
|
||||
@ -63,7 +63,7 @@ import sun.security.action.GetPropertyAction;
|
||||
* contents.</td></tr>
|
||||
* </table>
|
||||
* ---------------------------->
|
||||
* <br>time</center>
|
||||
* <br>time</div>
|
||||
*
|
||||
* <ol>
|
||||
* <li>The connection object is created by invoking the
|
||||
|
@ -45,7 +45,7 @@ import jdk.internal.misc.Unsafe;
|
||||
* this program or another. Whether or not such changes occur, and when they
|
||||
* occur, is operating-system dependent and therefore unspecified.
|
||||
*
|
||||
* <a name="inaccess"></a><p> All or part of a mapped byte buffer may become
|
||||
* <a id="inaccess"></a><p> All or part of a mapped byte buffer may become
|
||||
* inaccessible at any time, for example if the mapped file is truncated. An
|
||||
* attempt to access an inaccessible region of a mapped byte buffer will not
|
||||
* change the buffer's content and will cause an unspecified exception to be
|
||||
|
@ -88,7 +88,7 @@ import java.util.concurrent.TimeUnit;
|
||||
* </tr>
|
||||
* </table>
|
||||
*
|
||||
* <a name="threading"></a><h2>Threading</h2>
|
||||
* <a id="threading"></a><h2>Threading</h2>
|
||||
*
|
||||
* <p> The completion handler for an I/O operation initiated on a channel bound
|
||||
* to a group is guaranteed to be invoked by one of the pooled threads in the
|
||||
@ -103,7 +103,7 @@ import java.util.concurrent.TimeUnit;
|
||||
* handler directly by the initiating thread (see {@link
|
||||
* AsynchronousServerSocketChannel#accept(Object,CompletionHandler) accept}).
|
||||
*
|
||||
* <a name="shutdown"></a><h2>Shutdown and Termination</h2>
|
||||
* <a id="shutdown"></a><h2>Shutdown and Termination</h2>
|
||||
*
|
||||
* <p> The {@link #shutdown() shutdown} method is used to initiate an <em>orderly
|
||||
* shutdown</em> of a group. An orderly shutdown marks the group as shutdown;
|
||||
|
@ -118,7 +118,7 @@ import java.util.Collections;
|
||||
* versa. Changing the file's content by writing bytes will change the content
|
||||
* seen by the originating object, and vice versa.
|
||||
*
|
||||
* <a name="open-mode"></a> <p> At various points this class specifies that an
|
||||
* <a id="open-mode"></a> <p> At various points this class specifies that an
|
||||
* instance that is "open for reading," "open for writing," or "open for
|
||||
* reading and writing" is required. A channel obtained via the {@link
|
||||
* java.io.FileInputStream#getChannel getChannel} method of a {@link
|
||||
@ -131,7 +131,7 @@ import java.util.Collections;
|
||||
* was created with mode {@code "r"} and will be open for reading and writing
|
||||
* if the instance was created with mode {@code "rw"}.
|
||||
*
|
||||
* <a name="append-mode"></a><p> A file channel that is open for writing may be in
|
||||
* <a id="append-mode"></a><p> A file channel that is open for writing may be in
|
||||
* <i>append mode</i>, for example if it was obtained from a file-output stream
|
||||
* that was created by invoking the {@link
|
||||
* java.io.FileOutputStream#FileOutputStream(java.io.File,boolean)
|
||||
|
@ -73,7 +73,7 @@ import java.util.Objects;
|
||||
* <p> File-lock objects are safe for use by multiple concurrent threads.
|
||||
*
|
||||
*
|
||||
* <a name="pdep"></a><h2> Platform dependencies </h2>
|
||||
* <a id="pdep"></a><h2> Platform dependencies </h2>
|
||||
*
|
||||
* <p> This file-locking API is intended to map directly to the native locking
|
||||
* facility of the underlying operating system. Thus the locks held on a file
|
||||
|
@ -64,7 +64,7 @@ import java.nio.channels.spi.SelectorProvider;
|
||||
* threads. </p>
|
||||
*
|
||||
*
|
||||
* <a name="bm"></a>
|
||||
* <a id="bm"></a>
|
||||
* <h2>Blocking mode</h2>
|
||||
*
|
||||
* A selectable channel is either in <i>blocking</i> mode or in
|
||||
|
@ -40,7 +40,7 @@ import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
|
||||
* next selection operation. The validity of a key may be tested by invoking
|
||||
* its {@link #isValid isValid} method.
|
||||
*
|
||||
* <a name="opsets"></a>
|
||||
* <a id="opsets"></a>
|
||||
*
|
||||
* <p> A selection key contains two <i>operation sets</i> represented as
|
||||
* integer values. Each bit of an operation set denotes a category of
|
||||
|
@ -42,7 +42,7 @@ import java.util.Set;
|
||||
* method of a custom selector provider. A selector remains open until it is
|
||||
* closed via its {@link #close close} method.
|
||||
*
|
||||
* <a name="ks"></a>
|
||||
* <a id="ks"></a>
|
||||
*
|
||||
* <p> A selectable channel's registration with a selector is represented by a
|
||||
* {@link SelectionKey} object. A selector maintains three sets of selection
|
||||
@ -80,7 +80,7 @@ import java.util.Set;
|
||||
* during the next selection operation, at which time the key will removed from
|
||||
* all of the selector's key sets.
|
||||
*
|
||||
* <a name="sks"></a><p> Keys are added to the selected-key set by selection
|
||||
* <a id="sks"></a><p> Keys are added to the selected-key set by selection
|
||||
* operations. A key may be removed directly from the selected-key set by
|
||||
* invoking the set's {@link java.util.Set#remove(java.lang.Object) remove}
|
||||
* method or by invoking the {@link java.util.Iterator#remove() remove} method
|
||||
@ -90,7 +90,7 @@ import java.util.Set;
|
||||
* operations. Keys may not be added directly to the selected-key set. </p>
|
||||
*
|
||||
*
|
||||
* <a name="selop"></a>
|
||||
* <a id="selop"></a>
|
||||
* <h2>Selection</h2>
|
||||
*
|
||||
* <p> During each selection operation, keys may be added to and removed from a
|
||||
@ -183,7 +183,7 @@ import java.util.Set;
|
||||
* <p> The {@link #close close} method synchronizes on the selector and all
|
||||
* three key sets in the same order as in a selection operation.
|
||||
*
|
||||
* <a name="ksc"></a>
|
||||
* <a id="ksc"></a>
|
||||
*
|
||||
* <p> A selector's key and selected-key sets are not, in general, safe for use
|
||||
* by multiple concurrent threads. If such a thread might modify one of these
|
||||
|
@ -67,7 +67,7 @@ import sun.security.action.GetPropertyAction;
|
||||
* concurrent threads.
|
||||
*
|
||||
*
|
||||
* <a name="names"></a><a name="charenc"></a>
|
||||
* <a id="names"></a><a id="charenc"></a>
|
||||
* <h2>Charset names</h2>
|
||||
*
|
||||
* <p> Charsets are named by strings composed of the following characters:
|
||||
@ -113,14 +113,14 @@ import sun.security.action.GetPropertyAction;
|
||||
* The aliases of a charset are returned by the {@link #aliases() aliases}
|
||||
* method.
|
||||
*
|
||||
* <p><a name="hn">Some charsets have an <i>historical name</i> that is defined for
|
||||
* <p><a id="hn">Some charsets have an <i>historical name</i> that is defined for
|
||||
* compatibility with previous versions of the Java platform.</a> A charset's
|
||||
* historical name is either its canonical name or one of its aliases. The
|
||||
* historical name is returned by the {@code getEncoding()} methods of the
|
||||
* {@link java.io.InputStreamReader#getEncoding InputStreamReader} and {@link
|
||||
* java.io.OutputStreamWriter#getEncoding OutputStreamWriter} classes.
|
||||
*
|
||||
* <p><a name="iana"> </a>If a charset listed in the <a
|
||||
* <p><a id="iana"> </a>If a charset listed in the <a
|
||||
* href="http://www.iana.org/assignments/character-sets"><i>IANA Charset
|
||||
* Registry</i></a> is supported by an implementation of the Java platform then
|
||||
* its canonical name must be the name listed in the registry. Many charsets
|
||||
@ -142,27 +142,27 @@ import sun.security.action.GetPropertyAction;
|
||||
*
|
||||
*
|
||||
*
|
||||
* <p><a name="standard">Every implementation of the Java platform is required to support the
|
||||
* <p><a id="standard">Every implementation of the Java platform is required to support the
|
||||
* following standard charsets.</a> Consult the release documentation for your
|
||||
* implementation to see if any other charsets are supported. The behavior
|
||||
* of such optional charsets may differ between implementations.
|
||||
*
|
||||
* <blockquote><table width="80%" summary="Description of standard charsets">
|
||||
* <tr><th align="left">Charset</th><th align="left">Description</th></tr>
|
||||
* <tr><td valign=top>{@code US-ASCII}</td>
|
||||
* <tr><th style="text-align:left">Charset</th><th style="text-align:left">Description</th></tr>
|
||||
* <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>
|
||||
* <tr><td valign=top><code>ISO-8859-1 </code></td>
|
||||
* <tr><td style="vertical-align:top"><code>ISO-8859-1 </code></td>
|
||||
* <td>ISO Latin Alphabet No. 1, a.k.a. {@code ISO-LATIN-1}</td></tr>
|
||||
* <tr><td valign=top>{@code UTF-8}</td>
|
||||
* <tr><td style="vertical-align:top">{@code UTF-8}</td>
|
||||
* <td>Eight-bit UCS Transformation Format</td></tr>
|
||||
* <tr><td valign=top>{@code UTF-16BE}</td>
|
||||
* <tr><td style="vertical-align:top">{@code UTF-16BE}</td>
|
||||
* <td>Sixteen-bit UCS Transformation Format,
|
||||
* big-endian byte order</td></tr>
|
||||
* <tr><td valign=top>{@code UTF-16LE}</td>
|
||||
* <tr><td style="vertical-align:top">{@code UTF-16LE}</td>
|
||||
* <td>Sixteen-bit UCS Transformation Format,
|
||||
* little-endian byte order</td></tr>
|
||||
* <tr><td valign=top>{@code UTF-16}</td>
|
||||
* <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>
|
||||
* </table></blockquote>
|
||||
|
@ -76,7 +76,7 @@ import java.util.NoSuchElementException;
|
||||
* BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);
|
||||
* </pre>
|
||||
*
|
||||
* <a name="interop"></a><h2>Interoperability</h2>
|
||||
* <a id="interop"></a><h2>Interoperability</h2>
|
||||
* <p> Paths associated with the default {@link
|
||||
* java.nio.file.spi.FileSystemProvider provider} are generally interoperable
|
||||
* with the {@link java.io.File java.io.File} class. Paths created by other
|
||||
|
@ -68,19 +68,19 @@ import sun.util.locale.provider.LocaleServiceProviderPool;
|
||||
* (word, line, sentence, and so on). You must use a different iterator
|
||||
* for each unit boundary analysis you wish to perform.
|
||||
*
|
||||
* <p><a name="line"></a>
|
||||
* <p><a id="line"></a>
|
||||
* Line boundary analysis determines where a text string can be
|
||||
* broken when line-wrapping. The mechanism correctly handles
|
||||
* punctuation and hyphenated words. Actual line breaking needs
|
||||
* to also consider the available line width and is handled by
|
||||
* higher-level software.
|
||||
*
|
||||
* <p><a name="sentence"></a>
|
||||
* <p><a id="sentence"></a>
|
||||
* Sentence boundary analysis allows selection with correct interpretation
|
||||
* of periods within numbers and abbreviations, and trailing punctuation
|
||||
* marks such as quotation marks and parentheses.
|
||||
*
|
||||
* <p><a name="word"></a>
|
||||
* <p><a id="word"></a>
|
||||
* Word boundary analysis is used by search and replace functions, as
|
||||
* well as within text editing applications that allow the user to
|
||||
* select words with a double click. Word selection provides correct
|
||||
@ -88,7 +88,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool;
|
||||
* words. Characters that are not part of a word, such as symbols
|
||||
* or punctuation marks, have word-breaks on both sides.
|
||||
*
|
||||
* <p><a name="character"></a>
|
||||
* <p><a id="character"></a>
|
||||
* Character boundary analysis allows users to interact with characters
|
||||
* as they expect to, for example, when moving the cursor through a text
|
||||
* string. Character boundary analysis provides correct navigation
|
||||
|
@ -151,7 +151,7 @@ import java.util.Arrays;
|
||||
* }</pre>
|
||||
* </blockquote>
|
||||
*
|
||||
* <h3><a name="synchronization">Synchronization</a></h3>
|
||||
* <h3><a id="synchronization">Synchronization</a></h3>
|
||||
*
|
||||
* <p>
|
||||
* Choice formats are not synchronized.
|
||||
|
@ -133,7 +133,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool;
|
||||
* on the screen.
|
||||
* </ul>
|
||||
*
|
||||
* <h3><a name="synchronization">Synchronization</a></h3>
|
||||
* <h3><a id="synchronization">Synchronization</a></h3>
|
||||
*
|
||||
* <p>
|
||||
* Date formats are not synchronized.
|
||||
|
@ -175,11 +175,11 @@ import sun.util.locale.provider.ResourceBundleBasedAdapter;
|
||||
* <table border=0 cellspacing=3 cellpadding=0 summary="Chart showing symbol,
|
||||
* location, localized, and meaning.">
|
||||
* <tr style="background-color: rgb(204, 204, 255);">
|
||||
* <th align=left>Symbol
|
||||
* <th align=left>Location
|
||||
* <th align=left>Localized?
|
||||
* <th align=left>Meaning
|
||||
* <tr valign=top>
|
||||
* <th style="text-align:left">Symbol
|
||||
* <th style="text-align:left">Location
|
||||
* <th style="text-align:left">Localized?
|
||||
* <th style="text-align:left">Meaning
|
||||
* <tr style="vertical-align:top">
|
||||
* <td><code>0</code>
|
||||
* <td>Number
|
||||
* <td>Yes
|
||||
@ -189,7 +189,7 @@ import sun.util.locale.provider.ResourceBundleBasedAdapter;
|
||||
* <td>Number
|
||||
* <td>Yes
|
||||
* <td>Digit, zero shows as absent
|
||||
* <tr valign=top>
|
||||
* <tr style="vertical-align:top">
|
||||
* <td><code>.</code>
|
||||
* <td>Number
|
||||
* <td>Yes
|
||||
@ -199,7 +199,7 @@ import sun.util.locale.provider.ResourceBundleBasedAdapter;
|
||||
* <td>Number
|
||||
* <td>Yes
|
||||
* <td>Minus sign
|
||||
* <tr valign=top>
|
||||
* <tr style="vertical-align:top">
|
||||
* <td><code>,</code>
|
||||
* <td>Number
|
||||
* <td>Yes
|
||||
@ -210,7 +210,7 @@ import sun.util.locale.provider.ResourceBundleBasedAdapter;
|
||||
* <td>Yes
|
||||
* <td>Separates mantissa and exponent in scientific notation.
|
||||
* <em>Need not be quoted in prefix or suffix.</em>
|
||||
* <tr valign=top>
|
||||
* <tr style="vertical-align:top">
|
||||
* <td><code>;</code>
|
||||
* <td>Subpattern boundary
|
||||
* <td>Yes
|
||||
@ -220,7 +220,7 @@ import sun.util.locale.provider.ResourceBundleBasedAdapter;
|
||||
* <td>Prefix or suffix
|
||||
* <td>Yes
|
||||
* <td>Multiply by 100 and show as percentage
|
||||
* <tr valign=top>
|
||||
* <tr style="vertical-align:top">
|
||||
* <td><code>\u2030</code>
|
||||
* <td>Prefix or suffix
|
||||
* <td>Yes
|
||||
@ -233,7 +233,7 @@ import sun.util.locale.provider.ResourceBundleBasedAdapter;
|
||||
* doubled, replaced by international currency symbol.
|
||||
* If present in a pattern, the monetary decimal separator
|
||||
* is used instead of the decimal separator.
|
||||
* <tr valign=top>
|
||||
* <tr style="vertical-align:top">
|
||||
* <td><code>'</code>
|
||||
* <td>Prefix or suffix
|
||||
* <td>No
|
||||
@ -327,7 +327,7 @@ import sun.util.locale.provider.ResourceBundleBasedAdapter;
|
||||
* and <code>isParseIntegerOnly()</code> are false.
|
||||
* </ul>
|
||||
*
|
||||
* <h4><a name="synchronization">Synchronization</a></h4>
|
||||
* <h4><a id="synchronization">Synchronization</a></h4>
|
||||
*
|
||||
* <p>
|
||||
* Decimal formats are generally not synchronized.
|
||||
|
@ -115,7 +115,7 @@ import java.io.Serializable;
|
||||
* the field. For examples of these constants, see <code>ERA_FIELD</code> and its
|
||||
* friends in {@link DateFormat}.
|
||||
*
|
||||
* <h4><a name="synchronization">Synchronization</a></h4>
|
||||
* <h4><a id="synchronization">Synchronization</a></h4>
|
||||
*
|
||||
* <p>
|
||||
* Formats are generally not synchronized.
|
||||
|
@ -68,7 +68,7 @@ import java.util.Locale;
|
||||
* behavior is defined by the pattern that you provide as well as the
|
||||
* subformats used for inserted arguments.
|
||||
*
|
||||
* <h3><a name="patterns">Patterns and Their Interpretation</a></h3>
|
||||
* <h3><a id="patterns">Patterns and Their Interpretation</a></h3>
|
||||
*
|
||||
* <code>MessageFormat</code> uses patterns of the following form:
|
||||
* <blockquote><pre>
|
||||
@ -321,7 +321,7 @@ import java.util.Locale;
|
||||
* // result now equals {new String("z")}
|
||||
* </pre></blockquote>
|
||||
*
|
||||
* <h4><a name="synchronization">Synchronization</a></h4>
|
||||
* <h4><a id="synchronization">Synchronization</a></h4>
|
||||
*
|
||||
* <p>
|
||||
* Message formats are not synchronized.
|
||||
|
@ -166,7 +166,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool;
|
||||
* numbers: "(12)" for -12.
|
||||
* </ol>
|
||||
*
|
||||
* <h3><a name="synchronization">Synchronization</a></h3>
|
||||
* <h3><a id="synchronization">Synchronization</a></h3>
|
||||
*
|
||||
* <p>
|
||||
* Number formats are generally not synchronized.
|
||||
|
@ -94,10 +94,10 @@ import sun.util.locale.provider.LocaleProviderAdapter;
|
||||
* <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);">
|
||||
* <th align=left>Letter
|
||||
* <th align=left>Date or Time Component
|
||||
* <th align=left>Presentation
|
||||
* <th align=left>Examples
|
||||
* <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
|
||||
* <tr>
|
||||
* <td><code>G</code>
|
||||
* <td>Era designator
|
||||
@ -218,18 +218,18 @@ import sun.util.locale.provider.LocaleProviderAdapter;
|
||||
* Pattern letters are usually repeated, as their number determines the
|
||||
* exact presentation:
|
||||
* <ul>
|
||||
* <li><strong><a name="text">Text:</a></strong>
|
||||
* <li><strong><a id="text">Text:</a></strong>
|
||||
* For formatting, if the number of pattern letters is 4 or more,
|
||||
* the full form is used; otherwise a short or abbreviated form
|
||||
* is used if available.
|
||||
* For parsing, both forms are accepted, independent of the number
|
||||
* of pattern letters.<br><br></li>
|
||||
* <li><strong><a name="number">Number:</a></strong>
|
||||
* <li><strong><a id="number">Number:</a></strong>
|
||||
* For formatting, the number of pattern letters is the minimum
|
||||
* number of digits, and shorter numbers are zero-padded to this amount.
|
||||
* For parsing, the number of pattern letters is ignored unless
|
||||
* it's needed to separate two adjacent fields.<br><br></li>
|
||||
* <li><strong><a name="year">Year:</a></strong>
|
||||
* <li><strong><a id="year">Year:</a></strong>
|
||||
* If the formatter's {@link #getCalendar() Calendar} is the Gregorian
|
||||
* calendar, the following rules are applied.<br>
|
||||
* <ul>
|
||||
@ -270,7 +270,7 @@ import sun.util.locale.provider.LocaleProviderAdapter;
|
||||
* DateFormat#getCalendar() getCalendar()}.{@link
|
||||
* java.util.Calendar#isWeekDateSupported()
|
||||
* isWeekDateSupported()}.<br><br></li>
|
||||
* <li><strong><a name="month">Month:</a></strong>
|
||||
* <li><strong><a id="month">Month:</a></strong>
|
||||
* If the number of pattern letters is 3 or more, the month is
|
||||
* interpreted as <a href="#text">text</a>; otherwise,
|
||||
* it is interpreted as a <a href="#number">number</a>.<br>
|
||||
@ -291,12 +291,12 @@ import sun.util.locale.provider.LocaleProviderAdapter;
|
||||
* <li>Letter <em>L</em> produces the standalone form of month names.</li>
|
||||
* </ul>
|
||||
* <br></li>
|
||||
* <li><strong><a name="timezone">General time zone:</a></strong>
|
||||
* <li><strong><a id="timezone">General time zone:</a></strong>
|
||||
* Time zones are interpreted as <a href="#text">text</a> if they have
|
||||
* names. For time zones representing a GMT offset value, the
|
||||
* following syntax is used:
|
||||
* <pre>
|
||||
* <a name="GMTOffsetTimeZone"><i>GMTOffsetTimeZone:</i></a>
|
||||
* <a id="GMTOffsetTimeZone"><i>GMTOffsetTimeZone:</i></a>
|
||||
* <code>GMT</code> <i>Sign</i> <i>Hours</i> <code>:</code> <i>Minutes</i>
|
||||
* <i>Sign:</i> one of
|
||||
* <code>+ -</code>
|
||||
@ -312,7 +312,7 @@ import sun.util.locale.provider.LocaleProviderAdapter;
|
||||
* from the Basic Latin block of the Unicode standard.
|
||||
* <p>For parsing, <a href="#rfc822timezone">RFC 822 time zones</a> are also
|
||||
* accepted.<br><br></li>
|
||||
* <li><strong><a name="rfc822timezone">RFC 822 time zone:</a></strong>
|
||||
* <li><strong><a id="rfc822timezone">RFC 822 time zone:</a></strong>
|
||||
* For formatting, the RFC 822 4-digit time zone format is used:
|
||||
*
|
||||
* <pre>
|
||||
@ -325,7 +325,7 @@ import sun.util.locale.provider.LocaleProviderAdapter;
|
||||
*
|
||||
* <p>For parsing, <a href="#timezone">general time zones</a> are also
|
||||
* accepted.
|
||||
* <li><strong><a name="iso8601timezone">ISO 8601 Time zone:</a></strong>
|
||||
* <li><strong><a id="iso8601timezone">ISO 8601 Time zone:</a></strong>
|
||||
* The number of pattern letters designates the format for both formatting
|
||||
* and parsing as follows:
|
||||
* <pre>
|
||||
@ -372,8 +372,8 @@ import sun.util.locale.provider.LocaleProviderAdapter;
|
||||
* <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);">
|
||||
* <th align=left>Date and Time Pattern
|
||||
* <th align=left>Result
|
||||
* <th style="text-align:left">Date and Time Pattern
|
||||
* <th style="text-align:left">Result
|
||||
* <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>
|
||||
@ -410,7 +410,7 @@ import sun.util.locale.provider.LocaleProviderAdapter;
|
||||
* </table>
|
||||
* </blockquote>
|
||||
*
|
||||
* <h4><a name="synchronization">Synchronization</a></h4>
|
||||
* <h4><a id="synchronization">Synchronization</a></h4>
|
||||
*
|
||||
* <p>
|
||||
* Date formats are not synchronized.
|
||||
|
@ -106,10 +106,10 @@ import sun.util.logging.PlatformLogger;
|
||||
* <table cellpadding="2" summary="Variants of Hijrah Calendars">
|
||||
* <thead>
|
||||
* <tr class="tableSubHeadingColor">
|
||||
* <th class="colFirst" align="left" >Chronology ID</th>
|
||||
* <th class="colFirst" align="left" >Calendar Type</th>
|
||||
* <th class="colFirst" align="left" >Locale extension, see {@link java.util.Locale}</th>
|
||||
* <th class="colLast" align="left" >Description</th>
|
||||
* <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>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
@ -150,9 +150,9 @@ import sun.util.logging.PlatformLogger;
|
||||
* <table cellpadding="2" summary="Configuration of Hijrah Calendar">
|
||||
* <thead>
|
||||
* <tr class="tableSubHeadingColor">
|
||||
* <th class="colFirst" align="left" > Property Name</th>
|
||||
* <th class="colFirst" align="left" > Property value</th>
|
||||
* <th class="colLast" align="left" > Description </th>
|
||||
* <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>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
|
@ -73,9 +73,9 @@ import java.time.DateTimeException;
|
||||
* <table summary="ISO years and eras" cellpadding="2" cellspacing="3" border="0" >
|
||||
* <thead>
|
||||
* <tr class="tableSubHeadingColor">
|
||||
* <th class="colFirst" align="left">year-of-era</th>
|
||||
* <th class="colFirst" align="left">era</th>
|
||||
* <th class="colLast" align="left">proleptic-year</th>
|
||||
* <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>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
|
@ -74,10 +74,10 @@ import java.time.DateTimeException;
|
||||
* <table summary="Minguo years and eras" cellpadding="2" cellspacing="3" border="0" >
|
||||
* <thead>
|
||||
* <tr class="tableSubHeadingColor">
|
||||
* <th class="colFirst" align="left">year-of-era</th>
|
||||
* <th class="colFirst" align="left">era</th>
|
||||
* <th class="colFirst" align="left">proleptic-year</th>
|
||||
* <th class="colLast" align="left">ISO proleptic-year</th>
|
||||
* <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>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
|
@ -74,10 +74,10 @@ import java.time.DateTimeException;
|
||||
* <table summary="Buddhist years and eras" cellpadding="2" cellspacing="3" border="0" >
|
||||
* <thead>
|
||||
* <tr class="tableSubHeadingColor">
|
||||
* <th class="colFirst" align="left">year-of-era</th>
|
||||
* <th class="colFirst" align="left">era</th>
|
||||
* <th class="colFirst" align="left">proleptic-year</th>
|
||||
* <th class="colLast" align="left">ISO proleptic-year</th>
|
||||
* <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>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
|
@ -153,9 +153,9 @@ import java.util.Set;
|
||||
* <table summary="Predefined Formatters" cellpadding="2" cellspacing="3" border="0" >
|
||||
* <thead>
|
||||
* <tr class="tableSubHeadingColor">
|
||||
* <th class="colFirst" align="left">Formatter</th>
|
||||
* <th class="colFirst" align="left">Description</th>
|
||||
* <th class="colLast" align="left">Example</th>
|
||||
* <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>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
|
@ -41,21 +41,21 @@ import java.nio.charset.StandardCharsets;
|
||||
* <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>.
|
||||
*
|
||||
* <ul>
|
||||
* <li><a name="basic"><b>Basic</b></a>
|
||||
* <li><a id="basic"><b>Basic</b></a>
|
||||
* <p> Uses "The Base64 Alphabet" as specified in Table 1 of
|
||||
* RFC 4648 and RFC 2045 for encoding and decoding operation.
|
||||
* The encoder does not add any line feed (line separator)
|
||||
* character. The decoder rejects data that contains characters
|
||||
* outside the base64 alphabet.</p></li>
|
||||
*
|
||||
* <li><a name="url"><b>URL and Filename safe</b></a>
|
||||
* <li><a id="url"><b>URL and Filename safe</b></a>
|
||||
* <p> Uses the "URL and Filename safe Base64 Alphabet" as specified
|
||||
* in Table 2 of RFC 4648 for encoding and decoding. The
|
||||
* encoder does not add any line feed (line separator) character.
|
||||
* The decoder rejects data that contains characters outside the
|
||||
* base64 alphabet.</p></li>
|
||||
*
|
||||
* <li><a name="mime"><b>MIME</b></a>
|
||||
* <li><a id="mime"><b>MIME</b></a>
|
||||
* <p> Uses the "The Base64 Alphabet" as specified in Table 1 of
|
||||
* RFC 2045 for encoding and decoding operation. The encoded output
|
||||
* must be represented in lines of no more than 76 characters each
|
||||
|
@ -67,7 +67,7 @@ import sun.util.spi.CalendarProvider;
|
||||
* <code>DAY_OF_MONTH</code>, <code>HOUR</code>, and so on, and for
|
||||
* manipulating the calendar fields, such as getting the date of the next
|
||||
* week. An instant in time can be represented by a millisecond value that is
|
||||
* an offset from the <a name="Epoch"><em>Epoch</em></a>, January 1, 1970
|
||||
* an offset from the <a id="Epoch"><em>Epoch</em></a>, January 1, 1970
|
||||
* 00:00:00.000 GMT (Gregorian).
|
||||
*
|
||||
* <p>The class also provides additional fields and methods for
|
||||
@ -124,7 +124,7 @@ import sun.util.spi.CalendarProvider;
|
||||
* calculating its time or calendar field values if any out-of-range field
|
||||
* value has been set.
|
||||
*
|
||||
* <h4><a name="first_week">First Week</a></h4>
|
||||
* <h4><a id="first_week">First Week</a></h4>
|
||||
*
|
||||
* <code>Calendar</code> defines a locale-specific seven day week using two
|
||||
* parameters: the first day of the week and the minimal days in first week
|
||||
@ -154,13 +154,13 @@ import sun.util.spi.CalendarProvider;
|
||||
* calendar field values to determine the date and time in the
|
||||
* following way.
|
||||
*
|
||||
* <p><a name="resolution">If there is any conflict in calendar field values,
|
||||
* <p><a id="resolution">If there is any conflict in calendar field values,
|
||||
* <code>Calendar</code> gives priorities to calendar fields that have been set
|
||||
* more recently.</a> The following are the default combinations of the
|
||||
* calendar fields. The most recent combination, as determined by the
|
||||
* most recently set single field, will be used.
|
||||
*
|
||||
* <p><a name="date_resolution">For the date fields</a>:
|
||||
* <p><a id="date_resolution">For the date fields</a>:
|
||||
* <blockquote>
|
||||
* <pre>
|
||||
* YEAR + MONTH + DAY_OF_MONTH
|
||||
@ -170,7 +170,7 @@ import sun.util.spi.CalendarProvider;
|
||||
* YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
|
||||
* </pre></blockquote>
|
||||
*
|
||||
* <a name="time_resolution">For the time of day fields</a>:
|
||||
* <a id="time_resolution">For the time of day fields</a>:
|
||||
* <blockquote>
|
||||
* <pre>
|
||||
* HOUR_OF_DAY
|
||||
|
@ -64,7 +64,7 @@ import java.util.stream.StreamSupport;
|
||||
* but is not required to, throw the exception if the collection to be added
|
||||
* is empty.
|
||||
*
|
||||
* <p><a name="optional-restrictions">
|
||||
* <p><a id="optional-restrictions">
|
||||
* Some collection implementations have restrictions on the elements that
|
||||
* they may contain.</a> For example, some implementations prohibit null elements,
|
||||
* and some have restrictions on the types of their elements. Attempting to
|
||||
|
@ -60,15 +60,15 @@ package java.util;
|
||||
* <caption>Summary of Deque methods</caption>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td ALIGN=CENTER COLSPAN = 2> <b>First Element (Head)</b></td>
|
||||
* <td ALIGN=CENTER COLSPAN = 2> <b>Last Element (Tail)</b></td>
|
||||
* <td style="text-align:center" COLSPAN = 2> <b>First Element (Head)</b></td>
|
||||
* <td style="text-align:center" COLSPAN = 2> <b>Last Element (Tail)</b></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td ALIGN=CENTER><em>Throws exception</em></td>
|
||||
* <td ALIGN=CENTER><em>Special value</em></td>
|
||||
* <td ALIGN=CENTER><em>Throws exception</em></td>
|
||||
* <td ALIGN=CENTER><em>Special value</em></td>
|
||||
* <td style="text-align:center"><em>Throws exception</em></td>
|
||||
* <td style="text-align:center"><em>Special value</em></td>
|
||||
* <td style="text-align:center"><em>Throws exception</em></td>
|
||||
* <td style="text-align:center"><em>Special value</em></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Insert</b></td>
|
||||
@ -102,8 +102,8 @@ package java.util;
|
||||
* <table BORDER CELLPADDING=3 CELLSPACING=1>
|
||||
* <caption>Comparison of Queue and Deque methods</caption>
|
||||
* <tr>
|
||||
* <td ALIGN=CENTER> <b>{@code Queue} Method</b></td>
|
||||
* <td ALIGN=CENTER> <b>Equivalent {@code Deque} Method</b></td>
|
||||
* <td style="text-align:center"> <b>{@code Queue} Method</b></td>
|
||||
* <td style="text-align:center"> <b>Equivalent {@code Deque} Method</b></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link java.util.Queue#add add(e)}</td>
|
||||
@ -140,8 +140,8 @@ package java.util;
|
||||
* <table BORDER CELLPADDING=3 CELLSPACING=1>
|
||||
* <caption>Comparison of Stack and Deque methods</caption>
|
||||
* <tr>
|
||||
* <td ALIGN=CENTER> <b>Stack Method</b></td>
|
||||
* <td ALIGN=CENTER> <b>Equivalent {@code Deque} Method</b></td>
|
||||
* <td style="text-align:center"> <b>Stack Method</b></td>
|
||||
* <td style="text-align:center"> <b>Equivalent {@code Deque} Method</b></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #push push(e)}</td>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -91,7 +91,7 @@ import sun.util.calendar.ZoneInfo;
|
||||
* adjustment may be made if desired for dates that are prior to the Gregorian
|
||||
* changeover and which fall between January 1 and March 24.
|
||||
*
|
||||
* <h3><a name="week_and_year">Week Of Year and Week Year</a></h3>
|
||||
* <h3><a id="week_and_year">Week Of Year and Week Year</a></h3>
|
||||
*
|
||||
* <p>Values calculated for the {@link Calendar#WEEK_OF_YEAR
|
||||
* WEEK_OF_YEAR} field range from 1 to 53. The first week of a
|
||||
@ -108,7 +108,7 @@ import sun.util.calendar.ZoneInfo;
|
||||
* <p>The {@code getFirstDayOfWeek()} and {@code
|
||||
* getMinimalDaysInFirstWeek()} values are initialized using
|
||||
* locale-dependent resources when constructing a {@code
|
||||
* GregorianCalendar}. <a name="iso8601_compatible_setting">The week
|
||||
* GregorianCalendar}. <a id="iso8601_compatible_setting">The week
|
||||
* determination is compatible</a> with the ISO 8601 standard when {@code
|
||||
* getFirstDayOfWeek()} is {@code MONDAY} and {@code
|
||||
* getMinimalDaysInFirstWeek()} is 4, which values are used in locales
|
||||
@ -117,7 +117,7 @@ import sun.util.calendar.ZoneInfo;
|
||||
* {@link Calendar#setMinimalDaysInFirstWeek(int)
|
||||
* setMinimalDaysInFirstWeek()}.
|
||||
*
|
||||
* <p>A <a name="week_year"><em>week year</em></a> is in sync with a
|
||||
* <p>A <a id="week_year"><em>week year</em></a> is in sync with a
|
||||
* {@code WEEK_OF_YEAR} cycle. All weeks between the first and last
|
||||
* weeks (inclusive) have the same <em>week year</em> value.
|
||||
* Therefore, the first and last days of a week year may have
|
||||
|
@ -87,7 +87,7 @@ import java.util.function.UnaryOperator;
|
||||
* Such exceptions are marked as "optional" in the specification for this
|
||||
* interface.
|
||||
*
|
||||
* <h2><a name="immutable">Immutable List Static Factory Methods</a></h2>
|
||||
* <h2><a id="immutable">Immutable List Static Factory Methods</a></h2>
|
||||
* <p>The {@link List#of(Object...) List.of()} static factory methods
|
||||
* provide a convenient way to create immutable lists. The {@code List}
|
||||
* instances created by these methods have the following characteristics:
|
||||
|
@ -56,7 +56,7 @@ import sun.util.ResourceBundleEnumeration;
|
||||
* that key.
|
||||
*
|
||||
* <p>
|
||||
* The following <a name="sample">example</a> shows two members of a resource
|
||||
* The following <a id="sample">example</a> shows two members of a resource
|
||||
* bundle family with the base name "MyResources".
|
||||
* "MyResources" is the default member of the bundle family, and
|
||||
* "MyResources_fr" is the French member.
|
||||
|
@ -83,7 +83,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool;
|
||||
* described below.
|
||||
*
|
||||
* <dl>
|
||||
* <dt><a name="def_language"><b>language</b></a></dt>
|
||||
* <dt><a id="def_language"><b>language</b></a></dt>
|
||||
*
|
||||
* <dd>ISO 639 alpha-2 or alpha-3 language code, or registered
|
||||
* language subtags up to 8 alpha letters (for future enhancements).
|
||||
@ -101,7 +101,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool;
|
||||
*
|
||||
* <dd>Example: "en" (English), "ja" (Japanese), "kok" (Konkani)</dd>
|
||||
*
|
||||
* <dt><a name="def_script"><b>script</b></a></dt>
|
||||
* <dt><a id="def_script"><b>script</b></a></dt>
|
||||
*
|
||||
* <dd>ISO 15924 alpha-4 script code. You can find a full list of
|
||||
* valid script codes in the IANA Language Subtag Registry (search
|
||||
@ -115,7 +115,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool;
|
||||
*
|
||||
* <dd>Example: "Latn" (Latin), "Cyrl" (Cyrillic)</dd>
|
||||
*
|
||||
* <dt><a name="def_region"><b>country (region)</b></a></dt>
|
||||
* <dt><a id="def_region"><b>country (region)</b></a></dt>
|
||||
*
|
||||
* <dd>ISO 3166 alpha-2 country code or UN M.49 numeric-3 area code.
|
||||
* You can find a full list of valid country and region codes in the
|
||||
@ -129,7 +129,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool;
|
||||
* <dd>Example: "US" (United States), "FR" (France), "029"
|
||||
* (Caribbean)</dd>
|
||||
*
|
||||
* <dt><a name="def_variant"><b>variant</b></a></dt>
|
||||
* <dt><a id="def_variant"><b>variant</b></a></dt>
|
||||
*
|
||||
* <dd>Any arbitrary value used to indicate a variation of a
|
||||
* <code>Locale</code>. Where there are two or more variant values
|
||||
@ -160,7 +160,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool;
|
||||
*
|
||||
* <dd>Example: "polyton" (Polytonic Greek), "POSIX"</dd>
|
||||
*
|
||||
* <dt><a name="def_extensions"><b>extensions</b></a></dt>
|
||||
* <dt><a id="def_extensions"><b>extensions</b></a></dt>
|
||||
*
|
||||
* <dd>A map from single character keys to string values, indicating
|
||||
* extensions apart from language identification. The extensions in
|
||||
@ -188,7 +188,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool;
|
||||
* requirement (is well-formed), but does not validate the value
|
||||
* itself. See {@link Builder} for details.
|
||||
*
|
||||
* <h3><a name="def_locale_extension">Unicode locale/language extension</a></h3>
|
||||
* <h3><a id="def_locale_extension">Unicode locale/language extension</a></h3>
|
||||
*
|
||||
* <p>UTS#35, "Unicode Locale Data Markup Language" defines optional
|
||||
* attributes and keywords to override or refine the default behavior
|
||||
@ -269,7 +269,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool;
|
||||
* </pre>
|
||||
* </blockquote>
|
||||
*
|
||||
* <h4><a name="LocaleMatching">Locale Matching</a></h4>
|
||||
* <h4><a id="LocaleMatching">Locale Matching</a></h4>
|
||||
*
|
||||
* <p>If an application or a system is internationalized and provides localized
|
||||
* resources for multiple locales, it sometimes needs to find one or more
|
||||
@ -408,7 +408,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool;
|
||||
* Clients desiring a string representation of the complete locale can
|
||||
* then always rely on <code>toLanguageTag</code> for this purpose.
|
||||
*
|
||||
* <h5><a name="special_cases_constructor">Special cases</a></h5>
|
||||
* <h5><a id="special_cases_constructor">Special cases</a></h5>
|
||||
*
|
||||
* <p>For compatibility reasons, two
|
||||
* non-conforming locales are treated as special cases. These are
|
||||
@ -1588,7 +1588,7 @@ public final class Locale implements Cloneable, Serializable {
|
||||
* <p>Grandfathered tags with canonical replacements are as follows:
|
||||
*
|
||||
* <table summary="Grandfathered tags with canonical replacements">
|
||||
* <tbody align="center">
|
||||
* <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>
|
||||
@ -1617,7 +1617,7 @@ public final class Locale implements Cloneable, Serializable {
|
||||
* converted as follows:
|
||||
*
|
||||
* <table summary="Grandfathered tags with no modern replacement">
|
||||
* <tbody align="center">
|
||||
* <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>
|
||||
@ -2774,60 +2774,60 @@ public final class Locale implements Cloneable, Serializable {
|
||||
* <th>Language Priority List: {@code "de-*-DE"}</th>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td valign=top>
|
||||
* <td style="vertical-align:top">
|
||||
* {@link FilteringMode#AUTOSELECT_FILTERING AUTOSELECT_FILTERING}
|
||||
* </td>
|
||||
* <td valign=top>
|
||||
* <td style="vertical-align:top">
|
||||
* Performs <em>basic</em> filtering and returns {@code "de-DE"} and
|
||||
* {@code "de-DE-1996"}.
|
||||
* </td>
|
||||
* <td valign=top>
|
||||
* <td style="vertical-align:top">
|
||||
* Performs <em>extended</em> filtering and returns {@code "de-DE"},
|
||||
* {@code "de-Deva-DE"}, {@code "de-DE-1996"}, {@code "de-Latn-DE"}, and
|
||||
* {@code "de-Latn-DE-1996"}.
|
||||
* </td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td valign=top>
|
||||
* <td style="vertical-align:top">
|
||||
* {@link FilteringMode#EXTENDED_FILTERING EXTENDED_FILTERING}
|
||||
* </td>
|
||||
* <td valign=top>
|
||||
* <td style="vertical-align:top">
|
||||
* Performs <em>extended</em> filtering and returns {@code "de-DE"},
|
||||
* {@code "de-Deva-DE"}, {@code "de-DE-1996"}, {@code "de-Latn-DE"}, and
|
||||
* {@code "de-Latn-DE-1996"}.
|
||||
* </td>
|
||||
* <td valign=top>Same as above.</td>
|
||||
* <td style="vertical-align:top">Same as above.</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td valign=top>
|
||||
* <td style="vertical-align:top">
|
||||
* {@link FilteringMode#IGNORE_EXTENDED_RANGES IGNORE_EXTENDED_RANGES}
|
||||
* </td>
|
||||
* <td valign=top>
|
||||
* <td style="vertical-align:top">
|
||||
* Performs <em>basic</em> filtering and returns {@code "de-DE"} and
|
||||
* {@code "de-DE-1996"}.
|
||||
* </td>
|
||||
* <td valign=top>
|
||||
* <td style="vertical-align:top">
|
||||
* Performs <em>basic</em> filtering and returns {@code null} because
|
||||
* nothing matches.
|
||||
* </td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td valign=top>
|
||||
* <td style="vertical-align:top">
|
||||
* {@link FilteringMode#MAP_EXTENDED_RANGES MAP_EXTENDED_RANGES}
|
||||
* </td>
|
||||
* <td valign=top>Same as above.</td>
|
||||
* <td valign=top>
|
||||
* <td style="vertical-align:top">Same as above.</td>
|
||||
* <td style="vertical-align:top">
|
||||
* Performs <em>basic</em> filtering and returns {@code "de-DE"} and
|
||||
* {@code "de-DE-1996"} because {@code "de-*-DE"} is mapped to
|
||||
* {@code "de-DE"}.
|
||||
* </td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td valign=top>
|
||||
* <td style="vertical-align:top">
|
||||
* {@link FilteringMode#REJECT_EXTENDED_RANGES REJECT_EXTENDED_RANGES}
|
||||
* </td>
|
||||
* <td valign=top>Same as above.</td>
|
||||
* <td valign=top>
|
||||
* <td style="vertical-align:top">Same as above.</td>
|
||||
* <td style="vertical-align:top">
|
||||
* Throws {@link IllegalArgumentException} because {@code "de-*-DE"} is
|
||||
* not a valid basic language range.
|
||||
* </td>
|
||||
|
@ -110,7 +110,7 @@ import java.io.Serializable;
|
||||
* Implementations may optionally handle the self-referential scenario, however
|
||||
* most current implementations do not do so.
|
||||
*
|
||||
* <h2><a name="immutable">Immutable Map Static Factory Methods</a></h2>
|
||||
* <h2><a id="immutable">Immutable Map Static Factory Methods</a></h2>
|
||||
* <p>The {@link Map#of() Map.of()} and
|
||||
* {@link Map#ofEntries(Map.Entry...) Map.ofEntries()}
|
||||
* static factory methods provide a convenient way to create immutable maps.
|
||||
|
@ -290,7 +290,7 @@ class Properties extends Hashtable<Object,Object> {
|
||||
* specifies that the key is {@code "cheeses"} and the associated
|
||||
* element is the empty string {@code ""}.
|
||||
* <p>
|
||||
* <a name="unicodeescapes"></a>
|
||||
* <a id="unicodeescapes"></a>
|
||||
* Characters in keys and elements can be represented in escape
|
||||
* sequences similar to those used for character and string literals
|
||||
* (see sections 3.3 and 3.10.6 of
|
||||
|
@ -67,7 +67,7 @@ import sun.util.ResourceBundleEnumeration;
|
||||
* for a complete description of the search and instantiation strategy.
|
||||
*
|
||||
* <p>
|
||||
* The following <a name="sample">example</a> shows a member of a resource
|
||||
* The following <a id="sample">example</a> shows a member of a resource
|
||||
* bundle family with the base name "MyResources".
|
||||
* The text defines the bundle "MyResources_de",
|
||||
* the German member of the bundle family.
|
||||
|
@ -51,8 +51,8 @@ package java.util;
|
||||
* <caption>Summary of Queue methods</caption>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td ALIGN=CENTER><em>Throws exception</em></td>
|
||||
* <td ALIGN=CENTER><em>Returns special value</em></td>
|
||||
* <td style="text-align:center"><em>Throws exception</em></td>
|
||||
* <td style="text-align:center"><em>Returns special value</em></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Insert</b></td>
|
||||
|
@ -204,7 +204,7 @@ import static sun.security.util.SecurityConstants.GET_CLASSLOADER_PERMISSION;
|
||||
* known concrete subclasses {@code ListResourceBundle} and
|
||||
* {@code PropertyResourceBundle} are thread-safe.
|
||||
*
|
||||
* <h3><a name="bundleprovider">Resource Bundles in Named Modules</a></h3>
|
||||
* <h3><a id="bundleprovider">Resource Bundles in Named Modules</a></h3>
|
||||
*
|
||||
* When resource bundles are deployed in named modules, the following
|
||||
* module-specific requirements and restrictions are applied.
|
||||
@ -239,7 +239,7 @@ import static sun.security.util.SecurityConstants.GET_CLASSLOADER_PERMISSION;
|
||||
* </li>
|
||||
* </ul>
|
||||
*
|
||||
* <h3><a name="RBP_support">ResourceBundleProvider Service Providers</a></h3>
|
||||
* <h3><a id="RBP_support">ResourceBundleProvider Service Providers</a></h3>
|
||||
*
|
||||
* The {@code getBundle} factory methods load service providers of
|
||||
* {@link ResourceBundleProvider}, if available, using {@link ServiceLoader}.
|
||||
@ -266,7 +266,7 @@ import static sun.security.util.SecurityConstants.GET_CLASSLOADER_PERMISSION;
|
||||
* {@link #getBundle(String, Locale, ClassLoader, Control) getBundle}
|
||||
* factory method for details.
|
||||
*
|
||||
* <p><a name="modify_default_behavior">For the {@code getBundle} factory</a>
|
||||
* <p><a id="modify_default_behavior">For the {@code getBundle} factory</a>
|
||||
* methods that take no {@link Control} instance, their <a
|
||||
* href="#default_behavior"> default behavior</a> of resource bundle loading
|
||||
* can be modified with custom {@link
|
||||
@ -1063,7 +1063,7 @@ public abstract class ResourceBundle {
|
||||
* description of <a href="#modify_default_behavior">modifying the default
|
||||
* behavior</a>.
|
||||
*
|
||||
* <p><a name="default_behavior">The following describes the default
|
||||
* <p><a id="default_behavior">The following describes the default
|
||||
* behavior</a>.
|
||||
*
|
||||
* <p>
|
||||
@ -1170,7 +1170,7 @@ public abstract class ResourceBundle {
|
||||
* <p>If still no result bundle is found, the base name alone is looked up. If
|
||||
* this still fails, a <code>MissingResourceException</code> is thrown.
|
||||
*
|
||||
* <p><a name="parent_chain"> Once a result resource bundle has been found,
|
||||
* <p><a id="parent_chain"> Once a result resource bundle has been found,
|
||||
* its <em>parent chain</em> is instantiated</a>. If the result bundle already
|
||||
* has a parent (perhaps because it was returned from a cache) the chain is
|
||||
* complete.
|
||||
@ -1200,7 +1200,7 @@ public abstract class ResourceBundle {
|
||||
* path name (using "/") instead of a fully qualified class name (using
|
||||
* ".").
|
||||
*
|
||||
* <p><a name="default_behavior_example">
|
||||
* <p><a id="default_behavior_example">
|
||||
* <strong>Example:</strong></a>
|
||||
* <p>
|
||||
* The following class and property files are provided:
|
||||
@ -2481,7 +2481,7 @@ public abstract class ResourceBundle {
|
||||
* }
|
||||
* </pre>
|
||||
*
|
||||
* @apiNote <a name="note">{@code ResourceBundle.Control} is not supported
|
||||
* @apiNote <a id="note">{@code ResourceBundle.Control} is not supported
|
||||
* in named modules.</a> If the {@code ResourceBundle.getBundle} method with
|
||||
* a {@code ResourceBundle.Control} is called in a named module, the method
|
||||
* will throw an {@link UnsupportedOperationException}. Any service providers
|
||||
|
@ -95,7 +95,7 @@ import java.util.stream.StreamSupport;
|
||||
* s.close();
|
||||
* }</pre></blockquote>
|
||||
*
|
||||
* <p>The <a name="default-delimiter">default whitespace delimiter</a> used
|
||||
* <p>The <a id="default-delimiter">default whitespace delimiter</a> used
|
||||
* by a scanner is as recognized by {@link Character#isWhitespace(char)
|
||||
* Character.isWhitespace()}. The {@link #reset reset()}
|
||||
* method will reset the value of the scanner's delimiter to the default
|
||||
@ -152,11 +152,11 @@ import java.util.stream.StreamSupport;
|
||||
* {@link #reset} method will reset the value of the scanner's radix to
|
||||
* {@code 10} regardless of whether it was previously changed.
|
||||
*
|
||||
* <h3> <a name="localized-numbers">Localized numbers</a> </h3>
|
||||
* <h3> <a id="localized-numbers">Localized numbers</a> </h3>
|
||||
*
|
||||
* <p> An instance of this class is capable of scanning numbers in the standard
|
||||
* formats as well as in the formats of the scanner's locale. A scanner's
|
||||
* <a name="initial-locale">initial locale </a>is the value returned by the {@link
|
||||
* <a id="initial-locale">initial locale </a>is the value returned by the {@link
|
||||
* java.util.Locale#getDefault(Locale.Category)
|
||||
* Locale.getDefault(Locale.Category.FORMAT)} method; it may be changed via the {@link
|
||||
* #useLocale useLocale()} method. The {@link #reset} method will reset the value of the
|
||||
@ -213,7 +213,7 @@ import java.util.stream.StreamSupport;
|
||||
* getInfinity()}
|
||||
* </dl></blockquote>
|
||||
*
|
||||
* <h4> <a name="number-syntax">Number syntax</a> </h4>
|
||||
* <h4> <a id="number-syntax">Number syntax</a> </h4>
|
||||
*
|
||||
* <p> The strings that can be parsed as numbers by an instance of this class
|
||||
* are specified in terms of the following regular-expression grammar, where
|
||||
@ -244,7 +244,7 @@ import java.util.stream.StreamSupport;
|
||||
* <dd>{@code ( ( }<i>Digit</i>{@code + )
|
||||
* | }<i>GroupedNumeral</i>{@code )}
|
||||
*
|
||||
* <dt><a name="Integer-regex"><i>Integer</i>:</a>
|
||||
* <dt><a id="Integer-regex"><i>Integer</i>:</a>
|
||||
* <dd>{@code ( [-+]? ( }<i>Numeral</i>{@code
|
||||
* ) )}
|
||||
* <dd>{@code | }<i>LocalPositivePrefix</i> <i>Numeral</i>
|
||||
@ -263,7 +263,7 @@ import java.util.stream.StreamSupport;
|
||||
* <dt><i>Exponent</i>:
|
||||
* <dd>{@code ( [eE] [+-]? }<i>Digit</i>{@code + )}
|
||||
*
|
||||
* <dt><a name="Decimal-regex"><i>Decimal</i>:</a>
|
||||
* <dt><a id="Decimal-regex"><i>Decimal</i>:</a>
|
||||
* <dd>{@code ( [-+]? }<i>DecimalNumeral</i>
|
||||
* <i>Exponent</i>{@code ? )}
|
||||
* <dd>{@code | }<i>LocalPositivePrefix</i>
|
||||
@ -294,7 +294,7 @@ import java.util.stream.StreamSupport;
|
||||
* <i>NonNumber</i>
|
||||
* <i>LocalNegativeSuffix</i>
|
||||
*
|
||||
* <dt><a name="Float-regex"><i>Float</i></a>:
|
||||
* <dt><a id="Float-regex"><i>Float</i></a>:
|
||||
* <dd><i>Decimal</i>
|
||||
* {@code | }<i>HexFloat</i>
|
||||
* {@code | }<i>SignedNonNumber</i>
|
||||
|
@ -125,13 +125,13 @@ import jdk.internal.reflect.Reflection;
|
||||
*
|
||||
* <p> A service provider that is packaged as a JAR file for the class path is
|
||||
* identified by placing a <i>provider-configuration file</i> in the resource
|
||||
* directory <tt>META-INF/services</tt>. The file's name is the fully-qualified
|
||||
* directory {@code META-INF/services}. The file's name is the fully-qualified
|
||||
* <a href="../lang/ClassLoader.html#name">binary name</a> of the service's
|
||||
* type. The file contains a list of fully-qualified binary names of concrete
|
||||
* provider classes, one per line. Space and tab characters surrounding each
|
||||
* name, as well as blank lines, are ignored. The comment character is
|
||||
* <tt>'#'</tt> (<tt>'\u0023'</tt>,
|
||||
* <font style="font-size:smaller;">NUMBER SIGN</font>); on
|
||||
* {@code '#'} (<code>'\u0023'</code>,
|
||||
* <span style="font-size:smaller;">NUMBER SIGN</span>); on
|
||||
* each line all characters following the first comment character are ignored.
|
||||
* The file must be encoded in UTF-8.
|
||||
* If a particular concrete provider class is named in more than one
|
||||
@ -257,7 +257,7 @@ import jdk.internal.reflect.Reflection;
|
||||
* method in this class will cause a {@link NullPointerException} to be thrown.
|
||||
*
|
||||
* <h2> Example </h2>
|
||||
* <p> Suppose we have a service type <tt>com.example.CodecSet</tt> which is
|
||||
* <p> Suppose we have a service type {@code com.example.CodecSet} which is
|
||||
* intended to represent sets of encoder/decoder pairs for some protocol. In
|
||||
* this case it is an abstract class with two abstract methods:
|
||||
*
|
||||
@ -265,11 +265,11 @@ import jdk.internal.reflect.Reflection;
|
||||
* public abstract Encoder getEncoder(String encodingName);
|
||||
* public abstract Decoder getDecoder(String encodingName);</pre></blockquote>
|
||||
*
|
||||
* Each method returns an appropriate object or <tt>null</tt> if the provider
|
||||
* Each method returns an appropriate object or {@code null} if the provider
|
||||
* does not support the given encoding. Typical providers support more than
|
||||
* one encoding.
|
||||
*
|
||||
* <p> The <tt>CodecSet</tt> class creates and saves a single service instance
|
||||
* <p> The {@code CodecSet} class creates and saves a single service instance
|
||||
* at initialization:
|
||||
*
|
||||
* <pre>{@code
|
||||
@ -1402,7 +1402,7 @@ public final class ServiceLoader<S>
|
||||
*
|
||||
* @param loader
|
||||
* The class loader to be used to load provider-configuration files
|
||||
* and provider classes, or <tt>null</tt> if the system class
|
||||
* and provider classes, or {@code null} if the system class
|
||||
* loader (or, failing that, the bootstrap class loader) is to be
|
||||
* used
|
||||
*
|
||||
|
@ -63,7 +63,7 @@ package java.util;
|
||||
* Such exceptions are marked as "optional" in the specification for this
|
||||
* interface.
|
||||
*
|
||||
* <h2><a name="immutable">Immutable Set Static Factory Methods</a></h2>
|
||||
* <h2><a id="immutable">Immutable Set Static Factory Methods</a></h2>
|
||||
* <p>The {@link Set#of(Object...) Set.of()} static factory methods
|
||||
* provide a convenient way to create immutable sets. The {@code Set}
|
||||
* instances created by these methods have the following characteristics:
|
||||
|
@ -62,7 +62,7 @@ import java.util.function.LongConsumer;
|
||||
* New characteristics may be defined in the future, so implementors should not
|
||||
* assign meanings to unlisted values.
|
||||
*
|
||||
* <p><a name="binding">A Spliterator that does not report {@code IMMUTABLE} or
|
||||
* <p><a id="binding">A Spliterator that does not report {@code IMMUTABLE} or
|
||||
* {@code CONCURRENT} is expected to have a documented policy concerning:
|
||||
* when the spliterator <em>binds</em> to the element source; and detection of
|
||||
* structural interference of the element source detected after binding.</a> A
|
||||
|
@ -74,7 +74,7 @@ import sun.util.locale.provider.TimeZoneNameUtility;
|
||||
* produce a TimeZone. The syntax of a custom time zone ID is:
|
||||
*
|
||||
* <blockquote><pre>
|
||||
* <a name="CustomID"><i>CustomID:</i></a>
|
||||
* <a id="CustomID"><i>CustomID:</i></a>
|
||||
* <code>GMT</code> <i>Sign</i> <i>Hours</i> <code>:</code> <i>Minutes</i>
|
||||
* <code>GMT</code> <i>Sign</i> <i>Hours</i> <i>Minutes</i>
|
||||
* <code>GMT</code> <i>Sign</i> <i>Hours</i>
|
||||
@ -102,7 +102,7 @@ import sun.util.locale.provider.TimeZoneNameUtility;
|
||||
* When creating a <code>TimeZone</code>, the specified custom time
|
||||
* zone ID is normalized in the following syntax:
|
||||
* <blockquote><pre>
|
||||
* <a name="NormalizedCustomID"><i>NormalizedCustomID:</i></a>
|
||||
* <a id="NormalizedCustomID"><i>NormalizedCustomID:</i></a>
|
||||
* <code>GMT</code> <i>Sign</i> <i>TwoDigitHours</i> <code>:</code> <i>Minutes</i>
|
||||
* <i>Sign:</i> one of
|
||||
* <code>+ -</code>
|
||||
|
@ -56,14 +56,14 @@ import java.util.NoSuchElementException;
|
||||
* <table BORDER CELLPADDING=3 CELLSPACING=1>
|
||||
* <caption>Summary of BlockingDeque methods</caption>
|
||||
* <tr>
|
||||
* <td ALIGN=CENTER COLSPAN = 5> <b>First Element (Head)</b></td>
|
||||
* <td style="text-align:center" COLSPAN = 5> <b>First Element (Head)</b></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td ALIGN=CENTER><em>Throws exception</em></td>
|
||||
* <td ALIGN=CENTER><em>Special value</em></td>
|
||||
* <td ALIGN=CENTER><em>Blocks</em></td>
|
||||
* <td ALIGN=CENTER><em>Times out</em></td>
|
||||
* <td style="text-align:center"><em>Throws exception</em></td>
|
||||
* <td style="text-align:center"><em>Special value</em></td>
|
||||
* <td style="text-align:center"><em>Blocks</em></td>
|
||||
* <td style="text-align:center"><em>Times out</em></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Insert</b></td>
|
||||
@ -87,14 +87,14 @@ import java.util.NoSuchElementException;
|
||||
* <td><em>not applicable</em></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td ALIGN=CENTER COLSPAN = 5> <b>Last Element (Tail)</b></td>
|
||||
* <td style="text-align:center" COLSPAN = 5> <b>Last Element (Tail)</b></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td ALIGN=CENTER><em>Throws exception</em></td>
|
||||
* <td ALIGN=CENTER><em>Special value</em></td>
|
||||
* <td ALIGN=CENTER><em>Blocks</em></td>
|
||||
* <td ALIGN=CENTER><em>Times out</em></td>
|
||||
* <td style="text-align:center"><em>Throws exception</em></td>
|
||||
* <td style="text-align:center"><em>Special value</em></td>
|
||||
* <td style="text-align:center"><em>Blocks</em></td>
|
||||
* <td style="text-align:center"><em>Times out</em></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Insert</b></td>
|
||||
@ -131,11 +131,11 @@ import java.util.NoSuchElementException;
|
||||
* <table BORDER CELLPADDING=3 CELLSPACING=1>
|
||||
* <caption>Comparison of BlockingQueue and BlockingDeque methods</caption>
|
||||
* <tr>
|
||||
* <td ALIGN=CENTER> <b>{@code BlockingQueue} Method</b></td>
|
||||
* <td ALIGN=CENTER> <b>Equivalent {@code BlockingDeque} Method</b></td>
|
||||
* <td style="text-align:center"> <b>{@code BlockingQueue} Method</b></td>
|
||||
* <td style="text-align:center"> <b>Equivalent {@code BlockingDeque} Method</b></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td ALIGN=CENTER COLSPAN = 2> <b>Insert</b></td>
|
||||
* <td style="text-align:center" COLSPAN = 2> <b>Insert</b></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #add(Object) add(e)}</td>
|
||||
@ -154,7 +154,7 @@ import java.util.NoSuchElementException;
|
||||
* <td>{@link #offerLast(Object, long, TimeUnit) offerLast(e, time, unit)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td ALIGN=CENTER COLSPAN = 2> <b>Remove</b></td>
|
||||
* <td style="text-align:center" COLSPAN = 2> <b>Remove</b></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #remove() remove()}</td>
|
||||
@ -173,7 +173,7 @@ import java.util.NoSuchElementException;
|
||||
* <td>{@link #pollFirst(long, TimeUnit) pollFirst(time, unit)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td ALIGN=CENTER COLSPAN = 2> <b>Examine</b></td>
|
||||
* <td style="text-align:center" COLSPAN = 2> <b>Examine</b></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #element() element()}</td>
|
||||
|
@ -57,10 +57,10 @@ import java.util.Queue;
|
||||
* <caption>Summary of BlockingQueue methods</caption>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td ALIGN=CENTER><em>Throws exception</em></td>
|
||||
* <td ALIGN=CENTER><em>Special value</em></td>
|
||||
* <td ALIGN=CENTER><em>Blocks</em></td>
|
||||
* <td ALIGN=CENTER><em>Times out</em></td>
|
||||
* <td style="text-align:center"><em>Throws exception</em></td>
|
||||
* <td style="text-align:center"><em>Special value</em></td>
|
||||
* <td style="text-align:center"><em>Blocks</em></td>
|
||||
* <td style="text-align:center"><em>Times out</em></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Insert</b></td>
|
||||
|
@ -113,8 +113,8 @@ import java.util.concurrent.locks.LockSupport;
|
||||
* <caption>Summary of task execution methods</caption>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td ALIGN=CENTER> <b>Call from non-fork/join clients</b></td>
|
||||
* <td ALIGN=CENTER> <b>Call from within fork/join computations</b></td>
|
||||
* <td style="text-align:center"> <b>Call from non-fork/join clients</b></td>
|
||||
* <td style="text-align:center"> <b>Call from within fork/join computations</b></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td> <b>Arrange async execution</b></td>
|
||||
|
@ -48,7 +48,7 @@ import sun.security.util.SignatureFileVerifier;
|
||||
* processing multi-release jar files. The {@code Manifest} can be used
|
||||
* to specify meta-information about the jar file and its entries.
|
||||
*
|
||||
* <p><a name="multirelease">A multi-release jar file</a> is a jar file that
|
||||
* <p><a id="multirelease">A multi-release jar file</a> is a jar file that
|
||||
* contains a manifest with a main attribute named "Multi-Release",
|
||||
* a set of "base" entries, some of which are public classes with public
|
||||
* or protected methods that comprise the public interface of the jar file,
|
||||
|
@ -77,310 +77,310 @@ import java.util.stream.StreamSupport;
|
||||
* such use.
|
||||
*
|
||||
*
|
||||
* <h3><a name="sum">Summary of regular-expression constructs</a></h3>
|
||||
* <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">
|
||||
*
|
||||
* <tr align="left">
|
||||
* <th align="left" id="construct">Construct</th>
|
||||
* <th align="left" id="matches">Matches</th>
|
||||
* <tr style="text-align:left">
|
||||
* <th style="text-align:left" id="construct">Construct</th>
|
||||
* <th style="text-align:left" id="matches">Matches</th>
|
||||
* </tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="characters">Characters</th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="characters">Characters</th></tr>
|
||||
*
|
||||
* <tr><td valign="top" headers="construct characters"><i>x</i></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters"><i>x</i></td>
|
||||
* <td headers="matches">The character <i>x</i></td></tr>
|
||||
* <tr><td valign="top" headers="construct characters">{@code \\}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \\}</td>
|
||||
* <td headers="matches">The backslash character</td></tr>
|
||||
* <tr><td valign="top" headers="construct characters">{@code \0}<i>n</i></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \0}<i>n</i></td>
|
||||
* <td headers="matches">The character with octal value {@code 0}<i>n</i>
|
||||
* (0 {@code <=} <i>n</i> {@code <=} 7)</td></tr>
|
||||
* <tr><td valign="top" headers="construct characters">{@code \0}<i>nn</i></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \0}<i>nn</i></td>
|
||||
* <td headers="matches">The character with octal value {@code 0}<i>nn</i>
|
||||
* (0 {@code <=} <i>n</i> {@code <=} 7)</td></tr>
|
||||
* <tr><td valign="top" headers="construct characters">{@code \0}<i>mnn</i></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \0}<i>mnn</i></td>
|
||||
* <td headers="matches">The character with octal value {@code 0}<i>mnn</i>
|
||||
* (0 {@code <=} <i>m</i> {@code <=} 3,
|
||||
* 0 {@code <=} <i>n</i> {@code <=} 7)</td></tr>
|
||||
* <tr><td valign="top" headers="construct characters">{@code \x}<i>hh</i></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \x}<i>hh</i></td>
|
||||
* <td headers="matches">The character with hexadecimal value {@code 0x}<i>hh</i></td></tr>
|
||||
* <tr><td valign="top" headers="construct characters"><code>\u</code><i>hhhh</i></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters"><code>\u</code><i>hhhh</i></td>
|
||||
* <td headers="matches">The character with hexadecimal value {@code 0x}<i>hhhh</i></td></tr>
|
||||
* <tr><td valign="top" headers="construct characters"><code>\x</code><i>{h...h}</i></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters"><code>\x</code><i>{h...h}</i></td>
|
||||
* <td headers="matches">The character with hexadecimal value {@code 0x}<i>h...h</i>
|
||||
* ({@link java.lang.Character#MIN_CODE_POINT Character.MIN_CODE_POINT}
|
||||
* <= {@code 0x}<i>h...h</i> <=
|
||||
* {@link java.lang.Character#MAX_CODE_POINT Character.MAX_CODE_POINT})</td></tr>
|
||||
* <tr><td valign="top" headers="construct characters"><code>\N{</code><i>name</i><code>}</code></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters"><code>\N{</code><i>name</i><code>}</code></td>
|
||||
* <td headers="matches">The character with Unicode character name <i>'name'</i></td></tr>
|
||||
* <tr><td valign="top" headers="matches">{@code \t}</td>
|
||||
* <tr><td style="vertical-align:top" headers="matches">{@code \t}</td>
|
||||
* <td headers="matches">The tab character (<code>'\u0009'</code>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct characters">{@code \n}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \n}</td>
|
||||
* <td headers="matches">The newline (line feed) character (<code>'\u000A'</code>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct characters">{@code \r}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \r}</td>
|
||||
* <td headers="matches">The carriage-return character (<code>'\u000D'</code>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct characters">{@code \f}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \f}</td>
|
||||
* <td headers="matches">The form-feed character (<code>'\u000C'</code>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct characters">{@code \a}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \a}</td>
|
||||
* <td headers="matches">The alert (bell) character (<code>'\u0007'</code>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct characters">{@code \e}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \e}</td>
|
||||
* <td headers="matches">The escape character (<code>'\u001B'</code>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct characters">{@code \c}<i>x</i></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \c}<i>x</i></td>
|
||||
* <td headers="matches">The control character corresponding to <i>x</i></td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="classes">Character classes</th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="classes">Character classes</th></tr>
|
||||
*
|
||||
* <tr><td valign="top" headers="construct classes">{@code [abc]}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [abc]}</td>
|
||||
* <td headers="matches">{@code a}, {@code b}, or {@code c} (simple class)</td></tr>
|
||||
* <tr><td valign="top" headers="construct classes">{@code [^abc]}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [^abc]}</td>
|
||||
* <td headers="matches">Any character except {@code a}, {@code b}, or {@code c} (negation)</td></tr>
|
||||
* <tr><td valign="top" headers="construct classes">{@code [a-zA-Z]}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [a-zA-Z]}</td>
|
||||
* <td headers="matches">{@code a} through {@code z}
|
||||
* or {@code A} through {@code Z}, inclusive (range)</td></tr>
|
||||
* <tr><td valign="top" headers="construct classes">{@code [a-d[m-p]]}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [a-d[m-p]]}</td>
|
||||
* <td headers="matches">{@code a} through {@code d},
|
||||
* or {@code m} through {@code p}: {@code [a-dm-p]} (union)</td></tr>
|
||||
* <tr><td valign="top" headers="construct classes">{@code [a-z&&[def]]}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [a-z&&[def]]}</td>
|
||||
* <td headers="matches">{@code d}, {@code e}, or {@code f} (intersection)</tr>
|
||||
* <tr><td valign="top" headers="construct classes">{@code [a-z&&[^bc]]}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [a-z&&[^bc]]}</td>
|
||||
* <td headers="matches">{@code a} through {@code z},
|
||||
* except for {@code b} and {@code c}: {@code [ad-z]} (subtraction)</td></tr>
|
||||
* <tr><td valign="top" headers="construct classes">{@code [a-z&&[^m-p]]}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [a-z&&[^m-p]]}</td>
|
||||
* <td headers="matches">{@code a} through {@code z},
|
||||
* and not {@code m} through {@code p}: {@code [a-lq-z]}(subtraction)</td></tr>
|
||||
* <tr><th> </th></tr>
|
||||
*
|
||||
* <tr align="left"><th colspan="2" id="predef">Predefined character classes</th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="predef">Predefined character classes</th></tr>
|
||||
*
|
||||
* <tr><td valign="top" headers="construct predef">{@code .}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code .}</td>
|
||||
* <td headers="matches">Any character (may or may not match <a href="#lt">line terminators</a>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct predef">{@code \d}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \d}</td>
|
||||
* <td headers="matches">A digit: {@code [0-9]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct predef">{@code \D}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \D}</td>
|
||||
* <td headers="matches">A non-digit: {@code [^0-9]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct predef">{@code \h}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \h}</td>
|
||||
* <td headers="matches">A horizontal whitespace character:
|
||||
* <code>[ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]</code></td></tr>
|
||||
* <tr><td valign="top" headers="construct predef">{@code \H}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \H}</td>
|
||||
* <td headers="matches">A non-horizontal whitespace character: {@code [^\h]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct predef">{@code \s}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \s}</td>
|
||||
* <td headers="matches">A whitespace character: {@code [ \t\n\x0B\f\r]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct predef">{@code \S}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \S}</td>
|
||||
* <td headers="matches">A non-whitespace character: {@code [^\s]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct predef">{@code \v}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \v}</td>
|
||||
* <td headers="matches">A vertical whitespace character: <code>[\n\x0B\f\r\x85\u2028\u2029]</code>
|
||||
* </td></tr>
|
||||
* <tr><td valign="top" headers="construct predef">{@code \V}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \V}</td>
|
||||
* <td headers="matches">A non-vertical whitespace character: {@code [^\v]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct predef">{@code \w}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \w}</td>
|
||||
* <td headers="matches">A word character: {@code [a-zA-Z_0-9]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct predef">{@code \W}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \W}</td>
|
||||
* <td headers="matches">A non-word character: {@code [^\w]}</td></tr>
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="posix"><b>POSIX character classes (US-ASCII only)</b></th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="posix"><b>POSIX character classes (US-ASCII only)</b></th></tr>
|
||||
*
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{Lower}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Lower}}</td>
|
||||
* <td headers="matches">A lower-case alphabetic character: {@code [a-z]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{Upper}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Upper}}</td>
|
||||
* <td headers="matches">An upper-case alphabetic character:{@code [A-Z]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{ASCII}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{ASCII}}</td>
|
||||
* <td headers="matches">All ASCII:{@code [\x00-\x7F]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{Alpha}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Alpha}}</td>
|
||||
* <td headers="matches">An alphabetic character:{@code [\p{Lower}\p{Upper}]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{Digit}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Digit}}</td>
|
||||
* <td headers="matches">A decimal digit: {@code [0-9]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{Alnum}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Alnum}}</td>
|
||||
* <td headers="matches">An alphanumeric character:{@code [\p{Alpha}\p{Digit}]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{Punct}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Punct}}</td>
|
||||
* <td headers="matches">Punctuation: One of {@code !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~}</td></tr>
|
||||
* <!-- {@code [\!"#\$%&'\(\)\*\+,\-\./:;\<=\>\?@\[\\\]\^_`\{\|\}~]}
|
||||
* {@code [\X21-\X2F\X31-\X40\X5B-\X60\X7B-\X7E]} -->
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{Graph}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Graph}}</td>
|
||||
* <td headers="matches">A visible character: {@code [\p{Alnum}\p{Punct}]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{Print}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Print}}</td>
|
||||
* <td headers="matches">A printable character: {@code [\p{Graph}\x20]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{Blank}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Blank}}</td>
|
||||
* <td headers="matches">A space or a tab: {@code [ \t]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{Cntrl}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Cntrl}}</td>
|
||||
* <td headers="matches">A control character: {@code [\x00-\x1F\x7F]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{XDigit}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{XDigit}}</td>
|
||||
* <td headers="matches">A hexadecimal digit: {@code [0-9a-fA-F]}</td></tr>
|
||||
* <tr><td valign="top" headers="construct posix">{@code \p{Space}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Space}}</td>
|
||||
* <td headers="matches">A whitespace character: {@code [ \t\n\x0B\f\r]}</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2">java.lang.Character classes (simple <a href="#jcc">java character type</a>)</th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2">java.lang.Character classes (simple <a href="#jcc">java character type</a>)</th></tr>
|
||||
*
|
||||
* <tr><td valign="top">{@code \p{javaLowerCase}}</td>
|
||||
* <tr><td style="vertical-align:top">{@code \p{javaLowerCase}}</td>
|
||||
* <td>Equivalent to java.lang.Character.isLowerCase()</td></tr>
|
||||
* <tr><td valign="top">{@code \p{javaUpperCase}}</td>
|
||||
* <tr><td style="vertical-align:top">{@code \p{javaUpperCase}}</td>
|
||||
* <td>Equivalent to java.lang.Character.isUpperCase()</td></tr>
|
||||
* <tr><td valign="top">{@code \p{javaWhitespace}}</td>
|
||||
* <tr><td style="vertical-align:top">{@code \p{javaWhitespace}}</td>
|
||||
* <td>Equivalent to java.lang.Character.isWhitespace()</td></tr>
|
||||
* <tr><td valign="top">{@code \p{javaMirrored}}</td>
|
||||
* <tr><td style="vertical-align:top">{@code \p{javaMirrored}}</td>
|
||||
* <td>Equivalent to java.lang.Character.isMirrored()</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="unicode">Classes for Unicode scripts, blocks, categories and binary properties</th></tr>
|
||||
* <tr><td valign="top" headers="construct unicode">{@code \p{IsLatin}}</td>
|
||||
* <tr style="text-align:left"><th colspan="2" id="unicode">Classes for Unicode scripts, blocks, categories and binary properties</th></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{IsLatin}}</td>
|
||||
* <td headers="matches">A Latin script character (<a href="#usc">script</a>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct unicode">{@code \p{InGreek}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{InGreek}}</td>
|
||||
* <td headers="matches">A character in the Greek block (<a href="#ubc">block</a>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct unicode">{@code \p{Lu}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{Lu}}</td>
|
||||
* <td headers="matches">An uppercase letter (<a href="#ucc">category</a>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct unicode">{@code \p{IsAlphabetic}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{IsAlphabetic}}</td>
|
||||
* <td headers="matches">An alphabetic character (<a href="#ubpc">binary property</a>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct unicode">{@code \p{Sc}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{Sc}}</td>
|
||||
* <td headers="matches">A currency symbol</td></tr>
|
||||
* <tr><td valign="top" headers="construct unicode">{@code \P{InGreek}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code \P{InGreek}}</td>
|
||||
* <td headers="matches">Any character except one in the Greek block (negation)</td></tr>
|
||||
* <tr><td valign="top" headers="construct unicode">{@code [\p{L}&&[^\p{Lu}]]}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code [\p{L}&&[^\p{Lu}]]}</td>
|
||||
* <td headers="matches">Any letter except an uppercase letter (subtraction)</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="bounds">Boundary matchers</th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="bounds">Boundary matchers</th></tr>
|
||||
*
|
||||
* <tr><td valign="top" headers="construct bounds">{@code ^}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code ^}</td>
|
||||
* <td headers="matches">The beginning of a line</td></tr>
|
||||
* <tr><td valign="top" headers="construct bounds">{@code $}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code $}</td>
|
||||
* <td headers="matches">The end of a line</td></tr>
|
||||
* <tr><td valign="top" headers="construct bounds">{@code \b}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \b}</td>
|
||||
* <td headers="matches">A word boundary</td></tr>
|
||||
* <tr><td valign="top" headers="construct bounds">{@code \b{g}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \b{g}}</td>
|
||||
* <td headers="matches">A Unicode extended grapheme cluster boundary</td></tr>
|
||||
* <tr><td valign="top" headers="construct bounds">{@code \B}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \B}</td>
|
||||
* <td headers="matches">A non-word boundary</td></tr>
|
||||
* <tr><td valign="top" headers="construct bounds">{@code \A}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \A}</td>
|
||||
* <td headers="matches">The beginning of the input</td></tr>
|
||||
* <tr><td valign="top" headers="construct bounds">{@code \G}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \G}</td>
|
||||
* <td headers="matches">The end of the previous match</td></tr>
|
||||
* <tr><td valign="top" headers="construct bounds">{@code \Z}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \Z}</td>
|
||||
* <td headers="matches">The end of the input but for the final
|
||||
* <a href="#lt">terminator</a>, if any</td></tr>
|
||||
* <tr><td valign="top" headers="construct bounds">{@code \z}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \z}</td>
|
||||
* <td headers="matches">The end of the input</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="lineending">Linebreak matcher</th></tr>
|
||||
* <tr><td valign="top" headers="construct lineending">{@code \R}</td>
|
||||
* <tr style="text-align:left"><th colspan="2" id="lineending">Linebreak matcher</th></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct lineending">{@code \R}</td>
|
||||
* <td headers="matches">Any Unicode linebreak sequence, is equivalent to
|
||||
* <code>\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
|
||||
* </code></td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="grapheme">Unicode Extended Grapheme matcher</th></tr>
|
||||
* <tr><td valign="top" headers="construct grapheme">{@code \X}</td>
|
||||
* <tr style="text-align:left"><th colspan="2" id="grapheme">Unicode Extended Grapheme matcher</th></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct grapheme">{@code \X}</td>
|
||||
* <td headers="matches">Any Unicode extended grapheme cluster</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="greedy">Greedy quantifiers</th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="greedy">Greedy quantifiers</th></tr>
|
||||
*
|
||||
* <tr><td valign="top" headers="construct greedy"><i>X</i>{@code ?}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i>{@code ?}</td>
|
||||
* <td headers="matches"><i>X</i>, once or not at all</td></tr>
|
||||
* <tr><td valign="top" headers="construct greedy"><i>X</i>{@code *}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i>{@code *}</td>
|
||||
* <td headers="matches"><i>X</i>, zero or more times</td></tr>
|
||||
* <tr><td valign="top" headers="construct greedy"><i>X</i>{@code +}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i>{@code +}</td>
|
||||
* <td headers="matches"><i>X</i>, one or more times</td></tr>
|
||||
* <tr><td valign="top" headers="construct greedy"><i>X</i><code>{</code><i>n</i><code>}</code></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i><code>{</code><i>n</i><code>}</code></td>
|
||||
* <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr>
|
||||
* <tr><td valign="top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}}</td>
|
||||
* <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr>
|
||||
* <tr><td valign="top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}</code></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}</code></td>
|
||||
* <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="reluc">Reluctant quantifiers</th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="reluc">Reluctant quantifiers</th></tr>
|
||||
*
|
||||
* <tr><td valign="top" headers="construct reluc"><i>X</i>{@code ??}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i>{@code ??}</td>
|
||||
* <td headers="matches"><i>X</i>, once or not at all</td></tr>
|
||||
* <tr><td valign="top" headers="construct reluc"><i>X</i>{@code *?}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i>{@code *?}</td>
|
||||
* <td headers="matches"><i>X</i>, zero or more times</td></tr>
|
||||
* <tr><td valign="top" headers="construct reluc"><i>X</i>{@code +?}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i>{@code +?}</td>
|
||||
* <td headers="matches"><i>X</i>, one or more times</td></tr>
|
||||
* <tr><td valign="top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>}?</code></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>}?</code></td>
|
||||
* <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr>
|
||||
* <tr><td valign="top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>,}?</code></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>,}?</code></td>
|
||||
* <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr>
|
||||
* <tr><td valign="top" headers="construct reluc"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}?</code></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}?</code></td>
|
||||
* <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="poss">Possessive quantifiers</th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="poss">Possessive quantifiers</th></tr>
|
||||
*
|
||||
* <tr><td valign="top" headers="construct poss"><i>X</i>{@code ?+}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct poss"><i>X</i>{@code ?+}</td>
|
||||
* <td headers="matches"><i>X</i>, once or not at all</td></tr>
|
||||
* <tr><td valign="top" headers="construct poss"><i>X</i>{@code *+}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct poss"><i>X</i>{@code *+}</td>
|
||||
* <td headers="matches"><i>X</i>, zero or more times</td></tr>
|
||||
* <tr><td valign="top" headers="construct poss"><i>X</i>{@code ++}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct poss"><i>X</i>{@code ++}</td>
|
||||
* <td headers="matches"><i>X</i>, one or more times</td></tr>
|
||||
* <tr><td valign="top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>}+</code></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>}+</code></td>
|
||||
* <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr>
|
||||
* <tr><td valign="top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>,}+</code></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>,}+</code></td>
|
||||
* <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr>
|
||||
* <tr><td valign="top" headers="construct poss"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}+</code></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct poss"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}+</code></td>
|
||||
* <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="logical">Logical operators</th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="logical">Logical operators</th></tr>
|
||||
*
|
||||
* <tr><td valign="top" headers="construct logical"><i>XY</i></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct logical"><i>XY</i></td>
|
||||
* <td headers="matches"><i>X</i> followed by <i>Y</i></td></tr>
|
||||
* <tr><td valign="top" headers="construct logical"><i>X</i>{@code |}<i>Y</i></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct logical"><i>X</i>{@code |}<i>Y</i></td>
|
||||
* <td headers="matches">Either <i>X</i> or <i>Y</i></td></tr>
|
||||
* <tr><td valign="top" headers="construct logical">{@code (}<i>X</i>{@code )}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct logical">{@code (}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches">X, as a <a href="#cg">capturing group</a></td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="backref">Back references</th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="backref">Back references</th></tr>
|
||||
*
|
||||
* <tr><td valign="bottom" headers="construct backref">{@code \}<i>n</i></td>
|
||||
* <td valign="bottom" headers="matches">Whatever the <i>n</i><sup>th</sup>
|
||||
* <tr><td style="vertical-align:bottom" headers="construct backref">{@code \}<i>n</i></td>
|
||||
* <td style="vertical-align:bottom" headers="matches">Whatever the <i>n</i><sup>th</sup>
|
||||
* <a href="#cg">capturing group</a> matched</td></tr>
|
||||
*
|
||||
* <tr><td valign="bottom" headers="construct backref">{@code \}<i>k</i><<i>name</i>></td>
|
||||
* <td valign="bottom" headers="matches">Whatever the
|
||||
* <tr><td style="vertical-align:bottom" headers="construct backref">{@code \}<i>k</i><<i>name</i>></td>
|
||||
* <td style="vertical-align:bottom" headers="matches">Whatever the
|
||||
* <a href="#groupname">named-capturing group</a> "name" matched</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="quot">Quotation</th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="quot">Quotation</th></tr>
|
||||
*
|
||||
* <tr><td valign="top" headers="construct quot">{@code \}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct quot">{@code \}</td>
|
||||
* <td headers="matches">Nothing, but quotes the following character</td></tr>
|
||||
* <tr><td valign="top" headers="construct quot">{@code \Q}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct quot">{@code \Q}</td>
|
||||
* <td headers="matches">Nothing, but quotes all characters until {@code \E}</td></tr>
|
||||
* <tr><td valign="top" headers="construct quot">{@code \E}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct quot">{@code \E}</td>
|
||||
* <td headers="matches">Nothing, but ends quoting started by {@code \Q}</td></tr>
|
||||
* <!-- Metachars: !$()*+.<>?[\]^{|} -->
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="special">Special constructs (named-capturing and non-capturing)</th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="special">Special constructs (named-capturing and non-capturing)</th></tr>
|
||||
*
|
||||
* <tr><td valign="top" headers="construct special"><code>(?<<a href="#groupname">name</a>></code><i>X</i>{@code )}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct special"><code>(?<<a href="#groupname">name</a>></code><i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, as a named-capturing group</td></tr>
|
||||
* <tr><td valign="top" headers="construct special">{@code (?:}<i>X</i>{@code )}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct special">{@code (?:}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, as a non-capturing group</td></tr>
|
||||
* <tr><td valign="top" headers="construct special"><code>(?idmsuxU-idmsuxU) </code></td>
|
||||
* <tr><td style="vertical-align:top" headers="construct special"><code>(?idmsuxU-idmsuxU) </code></td>
|
||||
* <td headers="matches">Nothing, but turns match flags <a href="#CASE_INSENSITIVE">i</a>
|
||||
* <a href="#UNIX_LINES">d</a> <a href="#MULTILINE">m</a> <a href="#DOTALL">s</a>
|
||||
* <a href="#UNICODE_CASE">u</a> <a href="#COMMENTS">x</a> <a href="#UNICODE_CHARACTER_CLASS">U</a>
|
||||
* on - off</td></tr>
|
||||
* <tr><td valign="top" headers="construct special"><code>(?idmsux-idmsux:</code><i>X</i>{@code )} </td>
|
||||
* <tr><td style="vertical-align:top" headers="construct special"><code>(?idmsux-idmsux:</code><i>X</i>{@code )} </td>
|
||||
* <td headers="matches"><i>X</i>, as a <a href="#cg">non-capturing group</a> with the
|
||||
* given flags <a href="#CASE_INSENSITIVE">i</a> <a href="#UNIX_LINES">d</a>
|
||||
* <a href="#MULTILINE">m</a> <a href="#DOTALL">s</a> <a href="#UNICODE_CASE">u</a >
|
||||
* <a href="#COMMENTS">x</a> on - off</td></tr>
|
||||
* <tr><td valign="top" headers="construct special">{@code (?=}<i>X</i>{@code )}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct special">{@code (?=}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, via zero-width positive lookahead</td></tr>
|
||||
* <tr><td valign="top" headers="construct special">{@code (?!}<i>X</i>{@code )}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct special">{@code (?!}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, via zero-width negative lookahead</td></tr>
|
||||
* <tr><td valign="top" headers="construct special">{@code (?<=}<i>X</i>{@code )}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct special">{@code (?<=}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, via zero-width positive lookbehind</td></tr>
|
||||
* <tr><td valign="top" headers="construct special">{@code (?<!}<i>X</i>{@code )}</td>
|
||||
* <tr><td style="vertical-align:top" headers="construct special">{@code (?<!}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, via zero-width negative lookbehind</td></tr>
|
||||
* <tr><td valign="top" headers="construct special">{@code (?>}<i>X</i>{@code )}</td>
|
||||
* <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>
|
||||
*
|
||||
* </table>
|
||||
@ -388,7 +388,7 @@ import java.util.stream.StreamSupport;
|
||||
* <hr>
|
||||
*
|
||||
*
|
||||
* <h3><a name="bs">Backslashes, escapes, and quoting</a></h3>
|
||||
* <h3><a id="bs">Backslashes, escapes, and quoting</a></h3>
|
||||
*
|
||||
* <p> The backslash character ({@code '\'}) serves to introduce escaped
|
||||
* constructs, as defined in the table above, as well as to quote characters
|
||||
@ -416,7 +416,7 @@ import java.util.stream.StreamSupport;
|
||||
* {@code (hello)} the string literal {@code "\\(hello\\)"}
|
||||
* must be used.
|
||||
*
|
||||
* <h3><a name="cc">Character Classes</a></h3>
|
||||
* <h3><a id="cc">Character Classes</a></h3>
|
||||
*
|
||||
* <p> Character classes may appear within other character classes, and
|
||||
* may be composed by the union operator (implicit) and the intersection
|
||||
@ -454,7 +454,7 @@ import java.util.stream.StreamSupport;
|
||||
* character class, while the expression {@code -} becomes a range
|
||||
* forming metacharacter.
|
||||
*
|
||||
* <h3><a name="lt">Line terminators</a></h3>
|
||||
* <h3><a id="lt">Line terminators</a></h3>
|
||||
*
|
||||
* <p> A <i>line terminator</i> is a one- or two-character sequence that marks
|
||||
* the end of a line of the input character sequence. The following are
|
||||
@ -489,9 +489,9 @@ import java.util.stream.StreamSupport;
|
||||
* except at the end of input. When in {@link #MULTILINE} mode {@code $}
|
||||
* matches just before a line terminator or the end of the input sequence.
|
||||
*
|
||||
* <h3><a name="cg">Groups and capturing</a></h3>
|
||||
* <h3><a id="cg">Groups and capturing</a></h3>
|
||||
*
|
||||
* <h4><a name="gnumber">Group number</a></h4>
|
||||
* <h4><a id="gnumber">Group number</a></h4>
|
||||
* <p> Capturing groups are numbered by counting their opening parentheses from
|
||||
* left to right. In the expression {@code ((A)(B(C)))}, for example, there
|
||||
* are four such groups: </p>
|
||||
@ -514,7 +514,7 @@ import java.util.stream.StreamSupport;
|
||||
* subsequence may be used later in the expression, via a back reference, and
|
||||
* may also be retrieved from the matcher once the match operation is complete.
|
||||
*
|
||||
* <h4><a name="groupname">Group name</a></h4>
|
||||
* <h4><a id="groupname">Group name</a></h4>
|
||||
* <p>A capturing group can also be assigned a "name", a {@code named-capturing group},
|
||||
* and then be back-referenced later by the "name". Group names are composed of
|
||||
* the following characters. The first character must be a {@code letter}.
|
||||
@ -585,7 +585,7 @@ import java.util.stream.StreamSupport;
|
||||
* and outside of a character class.
|
||||
*
|
||||
* <p>
|
||||
* <b><a name="usc">Scripts</a></b> are specified either with the prefix {@code Is}, as in
|
||||
* <b><a id="usc">Scripts</a></b> are specified either with the prefix {@code Is}, as in
|
||||
* {@code IsHiragana}, or by using the {@code script} keyword (or its short
|
||||
* form {@code sc}) as in {@code script=Hiragana} or {@code sc=Hiragana}.
|
||||
* <p>
|
||||
@ -594,7 +594,7 @@ import java.util.stream.StreamSupport;
|
||||
* {@link java.lang.Character.UnicodeScript#forName(String) UnicodeScript.forName}.
|
||||
*
|
||||
* <p>
|
||||
* <b><a name="ubc">Blocks</a></b> are specified with the prefix {@code In}, as in
|
||||
* <b><a id="ubc">Blocks</a></b> are specified with the prefix {@code In}, as in
|
||||
* {@code InMongolian}, or by using the keyword {@code block} (or its short
|
||||
* form {@code blk}) as in {@code block=Mongolian} or {@code blk=Mongolian}.
|
||||
* <p>
|
||||
@ -603,7 +603,7 @@ import java.util.stream.StreamSupport;
|
||||
* {@link java.lang.Character.UnicodeBlock#forName(String) UnicodeBlock.forName}.
|
||||
* <p>
|
||||
*
|
||||
* <b><a name="ucc">Categories</a></b> may be specified with the optional prefix {@code Is}:
|
||||
* <b><a id="ucc">Categories</a></b> may be specified with the optional prefix {@code Is}:
|
||||
* Both {@code \p{L}} and {@code \p{IsL}} denote the category of Unicode
|
||||
* letters. Same as scripts and blocks, categories can also be specified
|
||||
* by using the keyword {@code general_category} (or its short form
|
||||
@ -616,7 +616,7 @@ import java.util.stream.StreamSupport;
|
||||
* defined in the Standard, both normative and informative.
|
||||
* <p>
|
||||
*
|
||||
* <b><a name="ubpc">Binary properties</a></b> are specified with the prefix {@code Is}, as in
|
||||
* <b><a id="ubpc">Binary properties</a></b> are specified with the prefix {@code Is}, as in
|
||||
* {@code IsAlphabetic}. The supported binary properties by {@code Pattern}
|
||||
* are
|
||||
* <ul>
|
||||
@ -643,9 +643,9 @@ import java.util.stream.StreamSupport;
|
||||
*
|
||||
* <table border="0" cellpadding="1" cellspacing="0"
|
||||
* summary="predefined and posix character classes in Unicode mode">
|
||||
* <tr align="left">
|
||||
* <th align="left" id="predef_classes">Classes</th>
|
||||
* <th align="left" id="predef_matches">Matches</th>
|
||||
* <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><td>{@code \p{Lower}}</td>
|
||||
* <td>A lowercase character:{@code \p{IsLowercase}}</td></tr>
|
||||
@ -687,7 +687,7 @@ import java.util.stream.StreamSupport;
|
||||
* <td>A non-word character: {@code [^\w]}</td></tr>
|
||||
* </table>
|
||||
* <p>
|
||||
* <a name="jcc">
|
||||
* <a id="jcc">
|
||||
* Categories that behave like the java.lang.Character
|
||||
* boolean is<i>methodname</i> methods (except for the deprecated ones) are
|
||||
* available through the same <code>\p{</code><i>prop</i><code>}</code> syntax where
|
||||
@ -1209,26 +1209,26 @@ public final class Pattern
|
||||
*
|
||||
* <blockquote><table cellpadding=1 cellspacing=0
|
||||
* summary="Split examples showing regex, limit, and result">
|
||||
* <tr><th align="left"><i>Regex </i></th>
|
||||
* <th align="left"><i>Limit </i></th>
|
||||
* <th align="left"><i>Result </i></th></tr>
|
||||
* <tr><td align=center>:</td>
|
||||
* <td align=center>2</td>
|
||||
* <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>
|
||||
* <tr><td style="text-align:center">:</td>
|
||||
* <td style="text-align:center">2</td>
|
||||
* <td>{@code { "boo", "and:foo" }}</td></tr>
|
||||
* <tr><td align=center>:</td>
|
||||
* <td align=center>5</td>
|
||||
* <tr><td style="text-align:center">:</td>
|
||||
* <td style="text-align:center">5</td>
|
||||
* <td>{@code { "boo", "and", "foo" }}</td></tr>
|
||||
* <tr><td align=center>:</td>
|
||||
* <td align=center>-2</td>
|
||||
* <tr><td style="text-align:center">:</td>
|
||||
* <td style="text-align:center">-2</td>
|
||||
* <td>{@code { "boo", "and", "foo" }}</td></tr>
|
||||
* <tr><td align=center>o</td>
|
||||
* <td align=center>5</td>
|
||||
* <tr><td style="text-align:center">o</td>
|
||||
* <td style="text-align:center">5</td>
|
||||
* <td>{@code { "b", "", ":and:f", "", "" }}</td></tr>
|
||||
* <tr><td align=center>o</td>
|
||||
* <td align=center>-2</td>
|
||||
* <tr><td style="text-align:center">o</td>
|
||||
* <td style="text-align:center">-2</td>
|
||||
* <td>{@code { "b", "", ":and:f", "", "" }}</td></tr>
|
||||
* <tr><td align=center>o</td>
|
||||
* <td align=center>0</td>
|
||||
* <tr><td style="text-align:center">o</td>
|
||||
* <td style="text-align:center">0</td>
|
||||
* <td>{@code { "b", "", ":and:f" }}</td></tr>
|
||||
* </table></blockquote>
|
||||
*
|
||||
@ -1296,11 +1296,11 @@ public final class Pattern
|
||||
*
|
||||
* <blockquote><table cellpadding=1 cellspacing=0
|
||||
* summary="Split examples showing regex and result">
|
||||
* <tr><th align="left"><i>Regex </i></th>
|
||||
* <th align="left"><i>Result</i></th></tr>
|
||||
* <tr><td align=center>:</td>
|
||||
* <tr><th style="text-align:left"><i>Regex </i></th>
|
||||
* <th style="text-align:left"><i>Result</i></th></tr>
|
||||
* <tr><td style="text-align:center">:</td>
|
||||
* <td>{@code { "boo", "and", "foo" }}</td></tr>
|
||||
* <tr><td align=center>o</td>
|
||||
* <tr><td style="text-align:center">o</td>
|
||||
* <td>{@code { "b", "", ":and:f" }}</td></tr>
|
||||
* </table></blockquote>
|
||||
*
|
||||
|
@ -33,7 +33,7 @@ import java.util.Map;
|
||||
* An abstract class for service providers that provide localized string
|
||||
* representations (display names) of {@code Calendar} field values.
|
||||
*
|
||||
* <p><a name="calendartypes"><b>Calendar Types</b></a>
|
||||
* <p><a id="calendartypes"><b>Calendar Types</b></a>
|
||||
*
|
||||
* <p>Calendar types are used to specify calendar systems for which the {@link
|
||||
* #getDisplayName(String, int, int, int, Locale) getDisplayName} and {@link
|
||||
|
@ -94,7 +94,7 @@
|
||||
* <p>Additional stream sources can be provided by third-party libraries using
|
||||
* <a href="package-summary.html#StreamSources">these techniques</a>.
|
||||
*
|
||||
* <h2><a name="StreamOps">Stream operations and pipelines</a></h2>
|
||||
* <h2><a id="StreamOps">Stream operations and pipelines</a></h2>
|
||||
*
|
||||
* <p>Stream operations are divided into <em>intermediate</em> and
|
||||
* <em>terminal</em> operations, and are combined to form <em>stream
|
||||
@ -159,7 +159,7 @@
|
||||
* is a necessary, but not sufficient, condition for the processing of an infinite
|
||||
* stream to terminate normally in finite time.
|
||||
*
|
||||
* <h3><a name="Parallelism">Parallelism</a></h3>
|
||||
* <h3><a id="Parallelism">Parallelism</a></h3>
|
||||
*
|
||||
* <p>Processing elements with an explicit {@code for-}loop is inherently serial.
|
||||
* Streams facilitate parallel execution by reframing the computation as a pipeline of
|
||||
@ -206,7 +206,7 @@
|
||||
* as {@link java.util.function.Function}, and are often lambda expressions or
|
||||
* method references.
|
||||
*
|
||||
* <h3><a name="NonInterference">Non-interference</a></h3>
|
||||
* <h3><a id="NonInterference">Non-interference</a></h3>
|
||||
*
|
||||
* Streams enable you to execute possibly-parallel aggregate operations over a
|
||||
* variety of data sources, including even non-thread-safe collections such as
|
||||
@ -252,7 +252,7 @@
|
||||
* <a href="package-summary.html#StreamSources">Low-level stream
|
||||
* construction</a> for requirements for building well-behaved streams.
|
||||
*
|
||||
* <h3><a name="Statelessness">Stateless behaviors</a></h3>
|
||||
* <h3><a id="Statelessness">Stateless behaviors</a></h3>
|
||||
*
|
||||
* Stream pipeline results may be nondeterministic or incorrect if the behavioral
|
||||
* parameters to the stream operations are <em>stateful</em>. A stateful lambda
|
||||
@ -280,7 +280,7 @@
|
||||
* parameters to stream operations entirely; there is usually a way to
|
||||
* restructure the stream pipeline to avoid statefulness.
|
||||
*
|
||||
* <h3><a name="SideEffects">Side-effects</a></h3>
|
||||
* <h3><a id="SideEffects">Side-effects</a></h3>
|
||||
*
|
||||
* Side-effects in behavioral parameters to stream operations are, in general,
|
||||
* discouraged, as they can often lead to unwitting violations of the
|
||||
@ -349,7 +349,7 @@
|
||||
* .collect(Collectors.toList()); // No side-effects!
|
||||
* }</pre>
|
||||
*
|
||||
* <h3><a name="Ordering">Ordering</a></h3>
|
||||
* <h3><a id="Ordering">Ordering</a></h3>
|
||||
*
|
||||
* <p>Streams may or may not have a defined <em>encounter order</em>. Whether
|
||||
* or not a stream has an encounter order depends on the source and the
|
||||
@ -388,7 +388,7 @@
|
||||
* However, most stream pipelines, such as the "sum of weight of blocks" example
|
||||
* above, still parallelize efficiently even under ordering constraints.
|
||||
*
|
||||
* <h2><a name="Reduction">Reduction operations</a></h2>
|
||||
* <h2><a id="Reduction">Reduction operations</a></h2>
|
||||
*
|
||||
* A <em>reduction</em> operation (also called a <em>fold</em>) takes a sequence
|
||||
* of input elements and combines them into a single summary result by repeated
|
||||
@ -493,7 +493,7 @@
|
||||
* significant work can be optimized away by combining mapping and reducing
|
||||
* into a single function.
|
||||
*
|
||||
* <h3><a name="MutableReduction">Mutable reduction</a></h3>
|
||||
* <h3><a id="MutableReduction">Mutable reduction</a></h3>
|
||||
*
|
||||
* A <em>mutable reduction operation</em> accumulates input elements into a
|
||||
* mutable result container, such as a {@code Collection} or {@code StringBuilder},
|
||||
@ -620,7 +620,7 @@
|
||||
* but in some cases equivalence may be relaxed to account for differences in
|
||||
* order.
|
||||
*
|
||||
* <h3><a name="ConcurrentReduction">Reduction, concurrency, and ordering</a></h3>
|
||||
* <h3><a id="ConcurrentReduction">Reduction, concurrency, and ordering</a></h3>
|
||||
*
|
||||
* With some complex reduction operations, for example a {@code collect()} that
|
||||
* produces a {@code Map}, such as:
|
||||
@ -675,7 +675,7 @@
|
||||
* We would then be constrained to implement either a sequential reduction or
|
||||
* a merge-based parallel reduction.
|
||||
*
|
||||
* <h3><a name="Associativity">Associativity</a></h3>
|
||||
* <h3><a id="Associativity">Associativity</a></h3>
|
||||
*
|
||||
* An operator or function {@code op} is <em>associative</em> if the following
|
||||
* holds:
|
||||
@ -693,7 +693,7 @@
|
||||
* <p>Examples of associative operations include numeric addition, min, and
|
||||
* max, and string concatenation.
|
||||
*
|
||||
* <h2><a name="StreamSources">Low-level stream construction</a></h2>
|
||||
* <h2><a id="StreamSources">Low-level stream construction</a></h2>
|
||||
*
|
||||
* So far, all the stream examples have used methods like
|
||||
* {@link java.util.Collection#stream()} or {@link java.util.Arrays#stream(Object[])}
|
||||
|
@ -40,7 +40,7 @@ import sun.security.jca.GetInstance;
|
||||
* <p> Every implementation of the Java platform is required to support the
|
||||
* following standard {@code TrustManagerFactory} algorithm:
|
||||
* <ul>
|
||||
* <li><tt>PKIX</tt></li>
|
||||
* <li>{@code PKIX}</li>
|
||||
* </ul>
|
||||
* This algorithm is described in the <a href=
|
||||
* "{@docRoot}/../technotes/guides/security/StandardNames.html#TrustManagerFactory">
|
||||
|
@ -33,23 +33,9 @@
|
||||
* supports input methods for other languages and the use of entirely different
|
||||
* input mechanisms, such as handwriting or speech recognition.
|
||||
*
|
||||
* <h2>Package Specification</h2>
|
||||
* <ul>
|
||||
* <li><a href="{@docRoot}/../technotes/guides/imf/spec.html">
|
||||
* Input Method Framework Specification</a></li>
|
||||
* <li><a href="{@docRoot}/../technotes/guides/imf/api-reference.html">
|
||||
* Input Method Client API Reference</a></li>
|
||||
* </ul>
|
||||
*
|
||||
* <h2>Related Documentation</h2>
|
||||
* For overviews, tutorials, examples, guides, and tool documentation, please
|
||||
* see:
|
||||
* <ul>
|
||||
* <li><a href="{@docRoot}/../technotes/guides/imf/overview.html">
|
||||
* Input Method Framework Overview</a></li>
|
||||
* <li><a href="{@docRoot}/../technotes/guides/imf/api-tutorial.html">
|
||||
* Input Method Client API Tutorial</a></li>
|
||||
* </ul>
|
||||
* see {@extLink imf_overview Input Method Framework Overview}.
|
||||
*
|
||||
* @since 1.2
|
||||
*/
|
||||
|
@ -33,14 +33,6 @@
|
||||
* languages and the use of entirely different input mechanisms, such as
|
||||
* handwriting recognition.
|
||||
*
|
||||
* <h2><a name="package_specification"></a>Package Specification</h2>
|
||||
* <ul>
|
||||
* <li><a href="../../../../../technotes/guides/imf/spec.html">
|
||||
* Input Method Framework Specification</a></li>
|
||||
* <li><a href="../../../../../technotes/guides/imf/spi-reference.html">
|
||||
* Input Method Engine SPI Reference</a></li>
|
||||
* </ul>
|
||||
*
|
||||
* <h2><a name="Packaging"></a>Packaging Input Methods</h2>
|
||||
* Input methods can be made available by adding them to the application's class
|
||||
* path. The main JAR file of an input method must contain the file:
|
||||
@ -88,13 +80,7 @@
|
||||
*
|
||||
* <h2>Related Documentation</h2>
|
||||
* For overviews, tutorials, examples, guides, and tool documentation, please
|
||||
* see:
|
||||
* <ul>
|
||||
* <li><a href="../../../../../technotes/guides/imf/overview.html">
|
||||
* Input Method Framework Overview</a></li>
|
||||
* <li><a href="../../../../../technotes/guides/imf/spi-tutorial.html">
|
||||
* Input Method Engine SPI Tutorial</a></li>
|
||||
* </ul>
|
||||
* see {@extLink imf_overview Input Method Framework Overview}.
|
||||
*
|
||||
* @since 1.3
|
||||
*/
|
||||
|
@ -42,10 +42,8 @@
|
||||
* <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html"
|
||||
* target="_top">How to Use Color Choosers</a>,
|
||||
* a section in <em>The Java Tutorial</em></li>
|
||||
* <li><a href="../../../../technotes/guides/intl/index.html"
|
||||
* target="_top">Internationalization Documentation</a></li>
|
||||
* <li><a href="../../../../technotes/guides/imf/index.html"
|
||||
* target="_top">Input Method Framework Documentation</a></li>
|
||||
* <li>{@extLink i18n_overview Internationalization Overview}</li>
|
||||
* <li>{@extLink imf_overview Input Method Framework Overview}</li>
|
||||
* </ul>
|
||||
*
|
||||
* @since 1.2
|
||||
|
@ -135,7 +135,7 @@ import sun.swing.SwingAccessor;
|
||||
* the action (In the case that the <code>ActionEvent</code>
|
||||
* sent to the action doesn't contain the target text component as its source).
|
||||
* <p>
|
||||
* The <a href="../../../../technotes/guides/imf/spec.html">input method framework</a>
|
||||
* The {@extLink imf_overview Input Method Framework}
|
||||
* lets text components interact with input methods, separate software
|
||||
* components that preprocess events to let users enter thousands of
|
||||
* different characters using keyboards with far fewer keys.
|
||||
|
@ -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
|
||||
@ -355,7 +355,7 @@ public abstract class HttpRequest {
|
||||
* of not setting a timeout is the same as setting an infinite Duration, ie.
|
||||
* block forever.
|
||||
*
|
||||
* @param duration
|
||||
* @param duration the timeout duration
|
||||
* @return this request builder
|
||||
*/
|
||||
public abstract Builder timeout(Duration duration);
|
||||
|
@ -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
|
||||
@ -224,7 +224,7 @@ public abstract class HttpResponse<T> {
|
||||
public interface BodyHandler<T> {
|
||||
|
||||
/**
|
||||
* Return a {@link BodyProcessor BodyProcessor} considering the given response status
|
||||
* Returns a {@link BodyProcessor BodyProcessor} considering the given response status
|
||||
* code and headers. This method is always called before the body is read
|
||||
* and its implementation can decide to keep the body and store it somewhere
|
||||
* or else discard it, by returning the {@code BodyProcessor} returned
|
||||
@ -232,7 +232,7 @@ public abstract class HttpResponse<T> {
|
||||
*
|
||||
* @param statusCode the HTTP status code received
|
||||
* @param responseHeaders the response headers received
|
||||
* @return
|
||||
* @return a response body handler
|
||||
*/
|
||||
public BodyProcessor<T> apply(int statusCode, HttpHeaders responseHeaders);
|
||||
|
||||
@ -242,7 +242,7 @@ public abstract class HttpResponse<T> {
|
||||
*
|
||||
* @param <U> the response body type
|
||||
* @param value the value of U to return as the body
|
||||
* @return
|
||||
* @return a response body handler
|
||||
*/
|
||||
public static <U> BodyHandler<U> discard(U value) {
|
||||
return (status, headers) -> BodyProcessor.discard(value);
|
||||
@ -260,7 +260,7 @@ public abstract class HttpResponse<T> {
|
||||
*
|
||||
* @param charset the name of the charset to interpret the body as. If
|
||||
* {@code null} then charset determined from Content-encoding header
|
||||
* @return a response handler
|
||||
* @return a response body handler
|
||||
*/
|
||||
public static BodyHandler<String> asString(Charset charset) {
|
||||
return (status, headers) -> {
|
||||
@ -282,7 +282,7 @@ public abstract class HttpResponse<T> {
|
||||
* {@link Path}.
|
||||
*
|
||||
* @param file the file to store the body in
|
||||
* @return a response handler
|
||||
* @return a response body handler
|
||||
*/
|
||||
public static BodyHandler<Path> asFile(Path file) {
|
||||
return (status, headers) -> BodyProcessor.asFile(file);
|
||||
@ -306,7 +306,7 @@ public abstract class HttpResponse<T> {
|
||||
*
|
||||
* @param directory the directory to store the file in
|
||||
* @param openOptions open options
|
||||
* @return a response handler
|
||||
* @return a response body handler
|
||||
*/
|
||||
public static BodyHandler<Path> asFileDownload(Path directory, OpenOption... openOptions) {
|
||||
return (status, headers) -> {
|
||||
@ -343,7 +343,7 @@ public abstract class HttpResponse<T> {
|
||||
*
|
||||
* @param file the filename to store the body in
|
||||
* @param openOptions any options to use when opening/creating the file
|
||||
* @return a response handler
|
||||
* @return a response body handler
|
||||
*/
|
||||
public static BodyHandler<Path> asFile(Path file, OpenOption... openOptions) {
|
||||
return (status, headers) -> BodyProcessor.asFile(file, openOptions);
|
||||
@ -359,7 +359,7 @@ public abstract class HttpResponse<T> {
|
||||
* written to the consumer.
|
||||
*
|
||||
* @param consumer a Consumer to accept the response body
|
||||
* @return a a response handler
|
||||
* @return a response body handler
|
||||
*/
|
||||
public static BodyHandler<Void> asByteArrayConsumer(Consumer<Optional<byte[]>> consumer) {
|
||||
return (status, headers) -> BodyProcessor.asByteArrayConsumer(consumer);
|
||||
@ -373,7 +373,7 @@ public abstract class HttpResponse<T> {
|
||||
* When the {@code HttpResponse} object is returned, the body has been completely
|
||||
* written to the byte array.
|
||||
*
|
||||
* @return a response handler
|
||||
* @return a response body handler
|
||||
*/
|
||||
public static BodyHandler<byte[]> asByteArray() {
|
||||
return (status, headers) -> BodyProcessor.asByteArray();
|
||||
@ -392,7 +392,7 @@ public abstract class HttpResponse<T> {
|
||||
* When the {@code HttpResponse} object is returned, the body has been completely
|
||||
* written to the string.
|
||||
*
|
||||
* @return a response handler
|
||||
* @return a response body handler
|
||||
*/
|
||||
public static BodyHandler<String> asString() {
|
||||
return (status, headers) -> BodyProcessor.asString(charsetFrom(headers));
|
||||
@ -606,7 +606,7 @@ public abstract class HttpResponse<T> {
|
||||
* either one of onResponse() or onError() is guaranteed to be called,
|
||||
* but not both.
|
||||
*
|
||||
* @param request
|
||||
* @param request the main request or subsequent push promise
|
||||
* @param t the Throwable that caused the error
|
||||
*/
|
||||
void onError(HttpRequest request, Throwable t);
|
||||
@ -717,7 +717,7 @@ public abstract class HttpResponse<T> {
|
||||
* join() call returns, all {@code HttpResponse}s and their associated
|
||||
* body objects are available.
|
||||
*
|
||||
* @param <V>
|
||||
* @param <V> the body type used for all responses
|
||||
* @param pushHandler a function invoked for each request or push
|
||||
* promise
|
||||
* @return a MultiProcessor
|
||||
|
@ -124,7 +124,6 @@ java/beans/Introspector/8132566/OverrideUserDefPropertyInfoTest.java 8132565 gen
|
||||
# jdk_lang
|
||||
|
||||
java/lang/StringCoding/CheckEncodings.sh 7008363 generic-all
|
||||
java/lang/Class/getDeclaredField/FieldSetAccessibleTest.java 8178776 generic-all
|
||||
|
||||
jdk/internal/misc/JavaLangAccess/NewUnsafeString.java 8176188 generic-all
|
||||
|
||||
@ -256,8 +255,6 @@ tools/jimage/JImageExtractTest.java 8170120 generic-
|
||||
tools/jimage/JImageListTest.java 8170120 generic-all
|
||||
tools/jimage/JImageVerifyTest.java 8170120 generic-all
|
||||
|
||||
tools/jimage/VerifyJimage.java 8178776 generic-all
|
||||
|
||||
############################################################################
|
||||
|
||||
# jdk_jdi
|
||||
|
@ -24,6 +24,7 @@
|
||||
import java.io.FilePermission;
|
||||
import java.io.IOException;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.lang.module.ModuleFinder;
|
||||
import java.lang.reflect.AccessibleObject;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
@ -46,9 +47,11 @@ import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.PropertyPermission;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import jdk.internal.module.Modules;
|
||||
@ -257,9 +260,11 @@ public class FieldSetAccessibleTest {
|
||||
|
||||
final FileSystem jrt;
|
||||
final Path root;
|
||||
final Set<String> modules;
|
||||
ClassNameJrtStreamBuilder() {
|
||||
jrt = FileSystems.getFileSystem(URI.create("jrt:/"));
|
||||
root = jrt.getPath("/modules");
|
||||
jrt = FileSystems.getFileSystem(URI.create("jrt:/"));
|
||||
root = jrt.getPath("/modules");
|
||||
modules = systemModules();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -267,7 +272,7 @@ public class FieldSetAccessibleTest {
|
||||
try {
|
||||
return Files.walk(root)
|
||||
.filter(p -> p.getNameCount() > 2)
|
||||
.filter(p -> ModuleLayer.boot().findModule(p.getName(1).toString()).isPresent())
|
||||
.filter(p -> modules.contains(p.getName(1).toString()))
|
||||
.map(p -> p.subpath(2, p.getNameCount()))
|
||||
.map(p -> p.toString())
|
||||
.filter(s -> s.endsWith(".class") && !s.endsWith("module-info.class"))
|
||||
@ -276,6 +281,17 @@ public class FieldSetAccessibleTest {
|
||||
throw new UncheckedIOException("Unable to walk \"/modules\"", x);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Filter deployment modules
|
||||
*/
|
||||
static Set<String> systemModules() {
|
||||
Set<String> mods = Set.of("javafx.deploy", "jdk.deploy", "jdk.plugin", "jdk.javaws");
|
||||
return ModuleFinder.ofSystem().findAll().stream()
|
||||
.map(mref -> mref.descriptor().name())
|
||||
.filter(mn -> !mods.contains(mn))
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
|
||||
// Test with or without a security manager
|
||||
|
@ -57,6 +57,9 @@ class NetworkConfiguration {
|
||||
return ip6Interfaces.get(nif);
|
||||
}
|
||||
|
||||
private static final boolean isMacOs =
|
||||
System.getProperty("os.name").equals("Mac OS X");
|
||||
|
||||
static NetworkConfiguration probe() throws IOException {
|
||||
Map<NetworkInterface,List<InetAddress>> ip4Interfaces =
|
||||
new HashMap<NetworkInterface,List<InetAddress>>();
|
||||
@ -68,7 +71,8 @@ class NetworkConfiguration {
|
||||
.list(NetworkInterface.getNetworkInterfaces());
|
||||
for (NetworkInterface nif: nifs) {
|
||||
// ignore intertaces that are down or don't support multicast
|
||||
if (!nif.isUp() || !nif.supportsMulticast() || nif.isLoopback())
|
||||
if (!nif.isUp() || !nif.supportsMulticast() || nif.isLoopback()
|
||||
|| (isMacOs && nif.getName().contains("awdl")))
|
||||
continue;
|
||||
|
||||
List<InetAddress> addrs = Collections.list(nif.getInetAddresses());
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -31,9 +31,13 @@ import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.attribute.BasicFileAttributeView;
|
||||
import java.nio.file.attribute.FileOwnerAttributeView;
|
||||
import java.nio.file.attribute.FileTime;
|
||||
import java.nio.file.attribute.PosixFilePermission;
|
||||
import java.time.Instant;
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
import java.util.TimeZone;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.zip.ZipEntry;
|
||||
@ -147,6 +151,28 @@ public class TestExtraTime {
|
||||
// ZipFile
|
||||
Path zpath = Paths.get(System.getProperty("test.dir", "."),
|
||||
"TestExtraTime.zip");
|
||||
Path zparent = zpath.getParent();
|
||||
if (zparent != null && !Files.isWritable(zparent)) {
|
||||
System.err.format("zpath %s parent %s is not writable%n",
|
||||
zpath, zparent);
|
||||
}
|
||||
if (Files.exists(zpath)) {
|
||||
System.err.format("zpath %s already exists%n", zpath);
|
||||
if (Files.isDirectory(zpath)) {
|
||||
System.err.format("%n%s contents:%n", zpath);
|
||||
Files.list(zpath).forEach(System.err::println);
|
||||
}
|
||||
FileOwnerAttributeView foav = Files.getFileAttributeView(zpath,
|
||||
FileOwnerAttributeView.class);
|
||||
System.err.format("zpath %s owner: %s%n", zpath, foav.getOwner());
|
||||
System.err.format("zpath %s permissions:%n", zpath);
|
||||
Set<PosixFilePermission> perms =
|
||||
Files.getPosixFilePermissions(zpath);
|
||||
perms.stream().forEach(System.err::println);
|
||||
}
|
||||
if (Files.isSymbolicLink(zpath)) {
|
||||
System.err.format("zpath %s is a symbolic link%n", zpath);
|
||||
}
|
||||
Files.copy(new ByteArrayInputStream(baos.toByteArray()), zpath);
|
||||
try (ZipFile zf = new ZipFile(zpath.toFile())) {
|
||||
ze = zf.getEntry("TestExtraTime.java");
|
||||
|
@ -35,6 +35,7 @@ import jdk.internal.module.ModuleInfo;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.lang.module.Configuration;
|
||||
import java.lang.module.ModuleDescriptor;
|
||||
import java.lang.module.ModuleDescriptor.Exports;
|
||||
import java.lang.module.ModuleDescriptor.Opens;
|
||||
@ -69,9 +70,8 @@ public class JdkQualifiedExportTest {
|
||||
|
||||
static Set<String> KNOWN_EXCEPTIONS =
|
||||
Set.of("java.xml/com.sun.xml.internal.stream.writers",
|
||||
"jdk.internal.vm.ci/jdk.vm.ci.services",
|
||||
"jdk.jsobject/jdk.internal.netscape.javascript.spi");
|
||||
static Set<String> DEPLOY_MODULES =
|
||||
Set.of("jdk.deploy", "jdk.plugin", "jdk.javaws");
|
||||
|
||||
static void checkExports(ModuleDescriptor md) {
|
||||
// build a map of upgradeable module to Exports that are qualified to it
|
||||
@ -80,8 +80,7 @@ public class JdkQualifiedExportTest {
|
||||
md.exports().stream()
|
||||
.filter(Exports::isQualified)
|
||||
.forEach(e -> e.targets().stream()
|
||||
.filter(mn -> !HashedModules.contains(mn) &&
|
||||
ModuleFinder.ofSystem().find(mn).isPresent())
|
||||
.filter(mn -> accept(md, mn))
|
||||
.forEach(t -> targetToExports.computeIfAbsent(t, _k -> new HashSet<>())
|
||||
.add(e)));
|
||||
|
||||
@ -97,10 +96,9 @@ public class JdkQualifiedExportTest {
|
||||
exp.source(), e.getKey()));
|
||||
});
|
||||
|
||||
// workaround until all qualified exports to upgradeable modules
|
||||
// are eliminated
|
||||
// no qualified exports to upgradeable modules are expected
|
||||
// except the known exception cases
|
||||
if (targetToExports.entrySet().stream()
|
||||
.filter(e -> !DEPLOY_MODULES.contains(e.getKey()))
|
||||
.flatMap(e -> e.getValue().stream())
|
||||
.anyMatch(e -> !KNOWN_EXCEPTIONS.contains(mn + "/" + e.source()))) {
|
||||
throw new RuntimeException(mn + " can't export package to upgradeable modules");
|
||||
@ -115,8 +113,7 @@ public class JdkQualifiedExportTest {
|
||||
md.opens().stream()
|
||||
.filter(Opens::isQualified)
|
||||
.forEach(e -> e.targets().stream()
|
||||
.filter(mn -> !HashedModules.contains(mn) &&
|
||||
ModuleFinder.ofSystem().find(mn).isPresent())
|
||||
.filter(mn -> accept(md, mn))
|
||||
.forEach(t -> targetToOpens.computeIfAbsent(t, _k -> new HashSet<>())
|
||||
.add(e)));
|
||||
|
||||
@ -136,6 +133,23 @@ public class JdkQualifiedExportTest {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if target is an upgradeable module but not required
|
||||
* by the source module directly and indirectly.
|
||||
*/
|
||||
private static boolean accept(ModuleDescriptor source, String target) {
|
||||
if (HashedModules.contains(target))
|
||||
return false;
|
||||
|
||||
if (!ModuleFinder.ofSystem().find(target).isPresent())
|
||||
return false;
|
||||
|
||||
Configuration cf = Configuration.empty().resolve(ModuleFinder.of(),
|
||||
ModuleFinder.ofSystem(),
|
||||
Set.of(source.name()));
|
||||
return !cf.findModule(target).isPresent();
|
||||
}
|
||||
|
||||
private static class HashedModules {
|
||||
static Set<String> HASHED_MODULES = hashedModules();
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 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
|
||||
@ -49,7 +49,7 @@ import jdk.internal.jimage.ImageLocation;
|
||||
* @test
|
||||
* @summary Verify jimage
|
||||
* @modules java.base/jdk.internal.jimage
|
||||
* @run main/othervm --add-modules=ALL-SYSTEM,jdk.incubator.httpclient VerifyJimage
|
||||
* @run main/othervm --add-modules ALL-SYSTEM VerifyJimage
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -76,8 +76,8 @@ public class VerifyJimage {
|
||||
|
||||
long start = System.nanoTime();
|
||||
int numThreads = Integer.getInteger("jdk.test.threads", 1);
|
||||
List<JImageReader> readers = newJImageReaders();
|
||||
VerifyJimage verify = new VerifyJimage(readers, numThreads);
|
||||
JImageReader reader = newJImageReader();
|
||||
VerifyJimage verify = new VerifyJimage(reader, numThreads);
|
||||
if (args.length == 0) {
|
||||
// load classes from jimage
|
||||
verify.loadClasses();
|
||||
@ -90,9 +90,7 @@ public class VerifyJimage {
|
||||
}
|
||||
verify.waitForCompletion();
|
||||
long end = System.nanoTime();
|
||||
int entries = readers.stream()
|
||||
.mapToInt(JImageReader::entries)
|
||||
.sum();
|
||||
int entries = reader.entries();
|
||||
System.out.format("%d entries %d files verified: %d ms %d errors%n",
|
||||
entries, verify.count.get(),
|
||||
TimeUnit.NANOSECONDS.toMillis(end - start), failed.size());
|
||||
@ -105,11 +103,11 @@ public class VerifyJimage {
|
||||
}
|
||||
|
||||
private final AtomicInteger count = new AtomicInteger(0);
|
||||
private final List<JImageReader> readers;
|
||||
private final JImageReader reader;
|
||||
private final ExecutorService pool;
|
||||
|
||||
VerifyJimage(List<JImageReader> readers, int numThreads) {
|
||||
this.readers = readers;
|
||||
VerifyJimage(JImageReader reader, int numThreads) {
|
||||
this.reader = reader;
|
||||
this.pool = Executors.newFixedThreadPool(numThreads);
|
||||
}
|
||||
|
||||
@ -132,7 +130,7 @@ public class VerifyJimage {
|
||||
-> !Files.isDirectory(p) &&
|
||||
!mdir.relativize(p).toString().startsWith("_") &&
|
||||
!p.getFileName().toString().equals("MANIFEST.MF"))
|
||||
.forEach(p -> compare(mdir, p, readers));
|
||||
.forEach(p -> compare(mdir, p, reader));
|
||||
} catch (IOException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
}
|
||||
@ -154,7 +152,7 @@ public class VerifyJimage {
|
||||
"jdk.jdi/META-INF/services/com.sun.jdi.connect.Connector"
|
||||
);
|
||||
|
||||
private void compare(Path mdir, Path p, List<JImageReader> readers) {
|
||||
private void compare(Path mdir, Path p, JImageReader reader) {
|
||||
String entry = p.getFileName().toString().equals(MODULE_INFO)
|
||||
? mdir.getFileName().toString() + "/" + MODULE_INFO
|
||||
: mdir.relativize(p).toString().replace(File.separatorChar, '/');
|
||||
@ -167,52 +165,55 @@ public class VerifyJimage {
|
||||
return;
|
||||
}
|
||||
|
||||
String jimage = "modules";
|
||||
JImageReader reader = readers.stream()
|
||||
.filter(r -> r.findLocation(entry) != null)
|
||||
.filter(r -> jimage.isEmpty() || r.imageName().equals(jimage))
|
||||
.findFirst().orElse(null);
|
||||
if (reader == null) {
|
||||
failed.add(entry + " not found: " + p.getFileName().toString());
|
||||
} else {
|
||||
if (reader.findLocation(entry) != null) {
|
||||
reader.compare(entry, p);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadClasses() {
|
||||
ClassLoader loader = ClassLoader.getSystemClassLoader();
|
||||
for (JImageReader reader : readers) {
|
||||
Arrays.stream(reader.getEntryNames())
|
||||
.filter(n -> n.endsWith(".class") && !n.endsWith(MODULE_INFO))
|
||||
.forEach(n -> {
|
||||
String cn = removeModule(n).replaceAll("\\.class$", "").replace('/', '.');
|
||||
count.incrementAndGet();
|
||||
try {
|
||||
System.out.println("Loading " + cn);
|
||||
Class.forName(cn, false, loader);
|
||||
} catch (VerifyError ve) {
|
||||
System.err.println("VerifyError for " + cn);
|
||||
failed.add(reader.imageName() + ": " + cn + " not verified: " + ve.getMessage());
|
||||
} catch (ClassNotFoundException e) {
|
||||
failed.add(reader.imageName() + ": " + cn + " not found");
|
||||
}
|
||||
});
|
||||
Stream.of(reader.getEntryNames())
|
||||
.filter(this::accept)
|
||||
.map(this::toClassName)
|
||||
.forEach(cn -> {
|
||||
count.incrementAndGet();
|
||||
try {
|
||||
System.out.println("Loading " + cn);
|
||||
Class.forName(cn, false, loader);
|
||||
} catch (VerifyError ve) {
|
||||
System.err.println("VerifyError for " + cn);
|
||||
failed.add(reader.imageName() + ": " + cn + " not verified: " + ve.getMessage());
|
||||
} catch (ClassNotFoundException e) {
|
||||
failed.add(reader.imageName() + ": " + cn + " not found");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private String toClassName(String entry) {
|
||||
int index = entry.indexOf('/', 1);
|
||||
return entry.substring(index + 1, entry.length())
|
||||
.replaceAll("\\.class$", "").replace('/', '.');
|
||||
}
|
||||
|
||||
private static Set<String> DEPLOY_MODULES =
|
||||
Set.of("javafx.deploy", "jdk.deploy", "jdk.plugin", "jdk.javaws");
|
||||
|
||||
private boolean accept(String entry) {
|
||||
int index = entry.indexOf('/', 1);
|
||||
String mn = index > 1 ? entry.substring(1, index) : "";
|
||||
// filter deployment modules
|
||||
|
||||
if (mn.isEmpty() || DEPLOY_MODULES.contains(mn)) {
|
||||
return false;
|
||||
}
|
||||
return entry.endsWith(".class") && !entry.endsWith(MODULE_INFO);
|
||||
}
|
||||
|
||||
private String removeModule(String path) {
|
||||
int index = path.indexOf('/', 1);
|
||||
return path.substring(index + 1, path.length());
|
||||
}
|
||||
|
||||
private static List<JImageReader> newJImageReaders() throws IOException {
|
||||
private static JImageReader newJImageReader() throws IOException {
|
||||
String home = System.getProperty("java.home");
|
||||
Path jimage = Paths.get(home, "lib", "modules");
|
||||
JImageReader reader = new JImageReader(jimage);
|
||||
List<JImageReader> result = new ArrayList<>();
|
||||
System.out.println("opened " + jimage);
|
||||
result.add(reader);
|
||||
return result;
|
||||
return new JImageReader(jimage);
|
||||
}
|
||||
|
||||
static class JImageReader extends BasicImageReader {
|
||||
|
Loading…
Reference in New Issue
Block a user