Merge
This commit is contained in:
commit
0c0bcad83c
@ -252,7 +252,7 @@ images:: sanity-images post-sanity-images \
|
||||
$(INITIAL_IMAGE_JRE) $(INITIAL_IMAGE_JDK) \
|
||||
trim-image-jre trim-image-jdk \
|
||||
identify-image-jre identify-image-jdk \
|
||||
process-image-jre process-image-jdk sec-files sec-files-win jgss-files
|
||||
process-image-jre process-image-jdk sec-files sec-files-win jgss-files
|
||||
endif
|
||||
|
||||
# Don't use these
|
||||
@ -400,7 +400,8 @@ TOOLS = \
|
||||
# classes that go into jfr.jar
|
||||
JFR_CLASSES_DIRS= \
|
||||
com/oracle/jrockit/jfr \
|
||||
oracle/jrockit/jfr
|
||||
oracle/jrockit/jfr \
|
||||
jdk/jfr
|
||||
|
||||
# classes that go into jsse.jar
|
||||
JSSE_CLASSES_DIRS = \
|
||||
@ -612,6 +613,7 @@ ifndef JAVASE_EMBEDDED
|
||||
$(ECHO) "oracle/jrockit/jfr/parser/" >> $@
|
||||
$(ECHO) "oracle/jrockit/jfr/settings/" >> $@
|
||||
$(ECHO) "oracle/jrockit/jfr/tools/" >> $@
|
||||
$(ECHO) "jdk/jfr/" >> $@
|
||||
endif
|
||||
endif
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -529,7 +529,6 @@ JAVA_JAVA_java = \
|
||||
sun/misc/JavaNioAccess.java \
|
||||
sun/misc/Perf.java \
|
||||
sun/misc/PerfCounter.java \
|
||||
sun/misc/Hashing.java \
|
||||
sun/net/www/protocol/jar/Handler.java \
|
||||
sun/net/www/protocol/jar/JarURLConnection.java \
|
||||
sun/net/www/protocol/file/Handler.java \
|
||||
|
@ -36,7 +36,11 @@ PRODUCT = sun
|
||||
CPLUSPLUSLIBRARY=true
|
||||
|
||||
# Use higher optimization level
|
||||
ifeq ($(PLATFORM), windows)
|
||||
OPTIMIZATION_LEVEL = HIGHEST
|
||||
else
|
||||
OPTIMIZATION_LEVEL = HIGHER
|
||||
endif
|
||||
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
|
@ -1332,7 +1332,7 @@ LIBFONTMANAGER_OPTIMIZATION:=HIGH
|
||||
ifeq ($(OPENJDK_TARGET_OS),windows)
|
||||
LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \
|
||||
X11TextRenderer.c
|
||||
LIBFONTMANAGER_OPTIMIZATION:=LOW
|
||||
LIBFONTMANAGER_OPTIMIZATION:=HIGHEST
|
||||
else
|
||||
LIBFONTMANAGER_EXCLUDE_FILES += fontpath.c \
|
||||
lcdglyph.c
|
||||
|
@ -132,7 +132,7 @@ $(eval $(call SetupArchive,BUILD_LOCALEDATA_JAR,,\
|
||||
##########################################################################################
|
||||
|
||||
# Full JRE exclude list for rt.jar and resources.jar
|
||||
# This value should exclude types destined for jars other than rt.jar and resources.jar.
|
||||
# This value should exclude types destined for jars other than rt.jar and resources.jar.
|
||||
# When building a Profile this value augments the profile specific exclusions
|
||||
RT_JAR_EXCLUDES += \
|
||||
com/oracle/security \
|
||||
@ -246,7 +246,8 @@ RT_JAR_EXCLUDES += \
|
||||
sun/util/resources/cldr \
|
||||
$(LOCALEDATA_INCLUDES) \
|
||||
com/oracle/jrockit/jfr \
|
||||
oracle/jrockit/jfr
|
||||
oracle/jrockit/jfr \
|
||||
jdk/jfr
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
RT_JAR_EXCLUDES += com/sun/nio/sctp \
|
||||
@ -337,7 +338,7 @@ $(PROFILE_VERSION_CLASS_TARGETS) : $(PROFILE_VERSION_JAVA_TARGETS)
|
||||
|
||||
|
||||
# Support for removing the addPropertyChangeListener and removePropertyChangeListener
|
||||
# methods from classes that only go into the profile builds.
|
||||
# methods from classes that only go into the profile builds.
|
||||
BEANLESS_CLASSES = $(IMAGES_OUTPUTDIR)/beanless
|
||||
|
||||
# When there are $ characters in filenames we have some very subtle interactions between
|
||||
@ -352,7 +353,7 @@ CLASSES_TO_DEBEAN = \
|
||||
java/util/jar/Pack200\$$Packer.class \
|
||||
java/util/jar/Pack200\$$Unpacker.class \
|
||||
com/sun/java/util/jar/pack/PackerImpl.class \
|
||||
com/sun/java/util/jar/pack/UnpackerImpl.class
|
||||
com/sun/java/util/jar/pack/UnpackerImpl.class
|
||||
|
||||
ifneq ($(PROFILE),)
|
||||
BEANLESS_CLASSES_TARGETS := $(addprefix $(BEANLESS_CLASSES)/, $(CLASSES_TO_DEBEAN))
|
||||
@ -428,7 +429,8 @@ ifeq ($(ENABLE_JFR), true)
|
||||
SRCS:=$(JDK_OUTPUTDIR)/classes,\
|
||||
SUFFIXES:=.class .jfc .xsd,\
|
||||
INCLUDES:=com/oracle/jrockit/jfr \
|
||||
oracle/jrockit/jfr,\
|
||||
oracle/jrockit/jfr \
|
||||
jdk/jfr,\
|
||||
JAR:=$(IMAGES_OUTPUTDIR)/lib/jfr.jar,\
|
||||
SKIP_METAINF:=true,\
|
||||
MANIFEST:=$(MAINMANIFEST), \
|
||||
@ -468,14 +470,14 @@ $(JCE_MANIFEST): $(MAINMANIFEST)
|
||||
$(MV) $@.tmp $@
|
||||
|
||||
##########################################################################################
|
||||
# For security and crypto jars, always build the jar, but for closed, install the prebuilt
|
||||
# signed version instead of the newly built jar. Unsigned jars are treated as intermediate
|
||||
# targets and explicitly added to the JARS list. For open, signing is not needed. See
|
||||
# For security and crypto jars, always build the jar, but for closed, install the prebuilt
|
||||
# signed version instead of the newly built jar. Unsigned jars are treated as intermediate
|
||||
# targets and explicitly added to the JARS list. For open, signing is not needed. See
|
||||
# SignJars.gmk for more information.
|
||||
#
|
||||
# The source for the crypto jars is not available for all licensees. The BUILD_CRYPTO
|
||||
# variable is set to no if these jars can't be built to skip that step of the build.
|
||||
# Note that for OPENJDK, the build will fail if BUILD_CRYPTO=no since then there is no
|
||||
# Note that for OPENJDK, the build will fail if BUILD_CRYPTO=no since then there is no
|
||||
# other way to get the jars than to build them.
|
||||
|
||||
SUNPKCS11_JAR_DST := $(IMAGES_OUTPUTDIR)/lib/ext/sunpkcs11.jar
|
||||
@ -738,7 +740,7 @@ $(UCRYPTO_JAR_DST) : $(UCRYPTO_JAR_SRC)
|
||||
@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt OracleUcrypto provider..."
|
||||
$(install-file)
|
||||
|
||||
JARS += $(UCRYPTO_JAR_UNSIGNED)
|
||||
JARS += $(UCRYPTO_JAR_UNSIGNED)
|
||||
|
||||
endif
|
||||
endif
|
||||
|
@ -125,13 +125,11 @@ PROFILE_3_JRE_LIB_FILES := \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jaas_unix$(SHARED_LIBRARY_SUFFIX) \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)java_crw_demo$(SHARED_LIBRARY_SUFFIX) \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)java_crw_demo.diz \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jfr$(SHARED_LIBRARY_SUFFIX) \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jsdt$(SHARED_LIBRARY_SUFFIX) \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jsdt.diz \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)management$(SHARED_LIBRARY_SUFFIX) \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)management.diz \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)sctp$(SHARED_LIBRARY_SUFFIX) \
|
||||
jfr.jar \
|
||||
jvm.hprof.txt \
|
||||
management-agent.jar \
|
||||
management/jmxremote.access \
|
||||
@ -164,6 +162,7 @@ FULL_JRE_LIB_FILES := \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX) \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX) \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jdwp$(SHARED_LIBRARY_SUFFIX) \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jfr$(SHARED_LIBRARY_SUFFIX) \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jpeg$(SHARED_LIBRARY_SUFFIX) \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jsound$(SHARED_LIBRARY_SUFFIX) \
|
||||
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jsoundalsa$(SHARED_LIBRARY_SUFFIX) \
|
||||
@ -214,6 +213,7 @@ FULL_JRE_LIB_FILES := \
|
||||
images/cursors/motif_MoveDrop32x32.gif \
|
||||
images/cursors/motif_MoveNoDrop32x32.gif \
|
||||
jexec \
|
||||
jfr.jar \
|
||||
oblique-fonts/LucidaSansDemiOblique.ttf \
|
||||
oblique-fonts/LucidaSansOblique.ttf \
|
||||
oblique-fonts/LucidaTypewriterBoldOblique.ttf \
|
||||
|
@ -127,8 +127,21 @@ public class CEmbeddedFrame extends EmbeddedFrame {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* When the parent window is activated this method is called for all EmbeddedFrames in it.
|
||||
*
|
||||
* For the CEmbeddedFrame which had focus before the deactivation this method triggers
|
||||
* focus events in the following order:
|
||||
* 1. WINDOW_ACTIVATED for this EmbeddedFrame
|
||||
* 2. WINDOW_GAINED_FOCUS for this EmbeddedFrame
|
||||
* 3. FOCUS_GAINED for the most recent focus owner in this EmbeddedFrame
|
||||
*
|
||||
* The caller must not requestFocus on the EmbeddedFrame together with calling this method.
|
||||
*
|
||||
* @param parentWindowActive true if the window is activated, false otherwise
|
||||
*/
|
||||
// handleWindowFocusEvent is called for all applets, when the browser
|
||||
// becames active/inactive. This event should be filtered out for
|
||||
// becomes active/inactive. This event should be filtered out for
|
||||
// non-focused applet. This method can be called from different threads.
|
||||
public void handleWindowFocusEvent(boolean parentWindowActive) {
|
||||
this.parentWindowActive = parentWindowActive;
|
||||
|
@ -377,7 +377,7 @@ public class XMLEncoder extends Encoder implements AutoCloseable {
|
||||
Object arg = args[i];
|
||||
mark(arg, true);
|
||||
}
|
||||
mark(stm.getTarget(), false);
|
||||
mark(stm.getTarget(), stm instanceof Expression);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1994, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -205,9 +205,9 @@ public final class Boolean implements java.io.Serializable,
|
||||
* Returns a hash code for a {@code boolean} value; compatible with
|
||||
* {@code Boolean.hashCode()}.
|
||||
*
|
||||
* @since 1.8
|
||||
*
|
||||
* @param value the value to hash
|
||||
* @return a hash code value for a {@code boolean} value.
|
||||
* @since 1.8
|
||||
*/
|
||||
public static int hashCode(boolean value) {
|
||||
return value ? 1231 : 1237;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -398,9 +398,9 @@ public final class Byte extends Number implements Comparable<Byte> {
|
||||
* Returns a hash code for a {@code byte} value; compatible with
|
||||
* {@code Byte.hashCode()}.
|
||||
*
|
||||
* @since 1.8
|
||||
*
|
||||
* @param value the value to hash
|
||||
* @return a hash code value for a {@code byte} value.
|
||||
* @since 1.8
|
||||
*/
|
||||
public static int hashCode(byte value) {
|
||||
return (int)value;
|
||||
|
@ -3250,6 +3250,8 @@ public final class Class<T> implements java.io.Serializable,
|
||||
* could not be checked at runtime (because generic types are implemented
|
||||
* by erasure).
|
||||
*
|
||||
* @param <U> the type to cast this class object to
|
||||
* @param clazz the class of the type to cast this class object to
|
||||
* @return this {@code Class} object, cast to represent a subclass of
|
||||
* the specified class object.
|
||||
* @throws ClassCastException if this {@code Class} object does not
|
||||
@ -3405,6 +3407,7 @@ public final class Class<T> implements java.io.Serializable,
|
||||
* If this Class represents either the Object class, an interface type, an
|
||||
* array type, a primitive type, or void, the return value is null.
|
||||
*
|
||||
* @return an object representing the superclass
|
||||
* @since 1.8
|
||||
*/
|
||||
public AnnotatedType getAnnotatedSuperclass() {
|
||||
@ -3436,6 +3439,7 @@ public final class Class<T> implements java.io.Serializable,
|
||||
* If this Class represents either the Object class, an array type, a
|
||||
* primitive type, or void, the return value is an array of length 0.
|
||||
*
|
||||
* @return an array representing the superinterfaces
|
||||
* @since 1.8
|
||||
*/
|
||||
public AnnotatedType[] getAnnotatedInterfaces() {
|
||||
|
@ -453,8 +453,7 @@ public final class Double extends Number implements Comparable<Double> {
|
||||
* a {@code NumberFormatException} be thrown, the regular
|
||||
* expression below can be used to screen the input string:
|
||||
*
|
||||
* <code>
|
||||
* <pre>
|
||||
* <pre>{@code
|
||||
* final String Digits = "(\\p{Digit}+)";
|
||||
* final String HexDigits = "(\\p{XDigit}+)";
|
||||
* // an exponent is 'e' or 'E' followed by an optionally
|
||||
@ -474,7 +473,7 @@ public final class Double extends Number implements Comparable<Double> {
|
||||
* // in addition to strings of floating-point literals, the
|
||||
* // two sub-patterns below are simplifications of the grammar
|
||||
* // productions from section 3.10.2 of
|
||||
* // <cite>The Java™ Language Specification</cite>.
|
||||
* // The Java Language Specification.
|
||||
*
|
||||
* // Digits ._opt Digits_opt ExponentPart_opt FloatTypeSuffix_opt
|
||||
* "((("+Digits+"(\\.)?("+Digits+"?)("+Exp+")?)|"+
|
||||
@ -499,8 +498,7 @@ public final class Double extends Number implements Comparable<Double> {
|
||||
* else {
|
||||
* // Perform suitable alternative action
|
||||
* }
|
||||
* </pre>
|
||||
* </code>
|
||||
* }</pre>
|
||||
*
|
||||
* @param s the string to be parsed.
|
||||
* @return a {@code Double} object holding the value
|
||||
@ -756,9 +754,9 @@ public final class Double extends Number implements Comparable<Double> {
|
||||
* Returns a hash code for a {@code double} value; compatible with
|
||||
* {@code Double.hashCode()}.
|
||||
*
|
||||
* @since 1.8
|
||||
*
|
||||
* @param value the value to hash
|
||||
* @return a hash code value for a {@code double} value.
|
||||
* @since 1.8
|
||||
*/
|
||||
public static int hashCode(double value) {
|
||||
long bits = doubleToLongBits(value);
|
||||
|
@ -664,9 +664,9 @@ public final class Float extends Number implements Comparable<Float> {
|
||||
* Returns a hash code for a {@code float} value; compatible with
|
||||
* {@code Float.hashCode()}.
|
||||
*
|
||||
* @since 1.8
|
||||
*
|
||||
* @param value the value to hash
|
||||
* @return a hash code value for a {@code float} value.
|
||||
* @since 1.8
|
||||
*/
|
||||
public static int hashCode(float value) {
|
||||
return floatToIntBits(value);
|
||||
|
@ -951,6 +951,7 @@ public final class Integer extends Number implements Comparable<Integer> {
|
||||
* Returns a hash code for a {@code int} value; compatible with
|
||||
* {@code Integer.hashCode()}.
|
||||
*
|
||||
* @param value the value to hash
|
||||
* @since 1.8
|
||||
*
|
||||
* @return a hash code value for a {@code int} value.
|
||||
@ -1336,6 +1337,7 @@ public final class Integer extends Number implements Comparable<Integer> {
|
||||
* one-bits in its two's complement binary representation, that is, if it
|
||||
* is equal to zero.
|
||||
*
|
||||
* @param i the value whose highest one bit is to be computed
|
||||
* @return an {@code int} value with a single one-bit, in the position
|
||||
* of the highest-order one-bit in the specified value, or zero if
|
||||
* the specified value is itself equal to zero.
|
||||
@ -1358,6 +1360,7 @@ public final class Integer extends Number implements Comparable<Integer> {
|
||||
* one-bits in its two's complement binary representation, that is, if it
|
||||
* is equal to zero.
|
||||
*
|
||||
* @param i the value whose lowest one bit is to be computed
|
||||
* @return an {@code int} value with a single one-bit, in the position
|
||||
* of the lowest-order one-bit in the specified value, or zero if
|
||||
* the specified value is itself equal to zero.
|
||||
@ -1382,6 +1385,7 @@ public final class Integer extends Number implements Comparable<Integer> {
|
||||
* <li>ceil(log<sub>2</sub>(x)) = {@code 32 - numberOfLeadingZeros(x - 1)}
|
||||
* </ul>
|
||||
*
|
||||
* @param i the value whose number of leading zeros is to be computed
|
||||
* @return the number of zero bits preceding the highest-order
|
||||
* ("leftmost") one-bit in the two's complement binary representation
|
||||
* of the specified {@code int} value, or 32 if the value
|
||||
@ -1408,6 +1412,7 @@ public final class Integer extends Number implements Comparable<Integer> {
|
||||
* one-bits in its two's complement representation, in other words if it is
|
||||
* equal to zero.
|
||||
*
|
||||
* @param i the value whose number of trailing zeros is to be computed
|
||||
* @return the number of zero bits following the lowest-order ("rightmost")
|
||||
* one-bit in the two's complement binary representation of the
|
||||
* specified {@code int} value, or 32 if the value is equal
|
||||
@ -1431,6 +1436,7 @@ public final class Integer extends Number implements Comparable<Integer> {
|
||||
* representation of the specified {@code int} value. This function is
|
||||
* sometimes referred to as the <i>population count</i>.
|
||||
*
|
||||
* @param i the value whose bits are to be counted
|
||||
* @return the number of one-bits in the two's complement binary
|
||||
* representation of the specified {@code int} value.
|
||||
* @since 1.5
|
||||
@ -1458,6 +1464,8 @@ public final class Integer extends Number implements Comparable<Integer> {
|
||||
* ignored, even if the distance is negative: {@code rotateLeft(val,
|
||||
* distance) == rotateLeft(val, distance & 0x1F)}.
|
||||
*
|
||||
* @param i the value whose bits are to be rotated left
|
||||
* @param distance the number of bit positions to rotate left
|
||||
* @return the value obtained by rotating the two's complement binary
|
||||
* representation of the specified {@code int} value left by the
|
||||
* specified number of bits.
|
||||
@ -1480,6 +1488,8 @@ public final class Integer extends Number implements Comparable<Integer> {
|
||||
* ignored, even if the distance is negative: {@code rotateRight(val,
|
||||
* distance) == rotateRight(val, distance & 0x1F)}.
|
||||
*
|
||||
* @param i the value whose bits are to be rotated right
|
||||
* @param distance the number of bit positions to rotate right
|
||||
* @return the value obtained by rotating the two's complement binary
|
||||
* representation of the specified {@code int} value right by the
|
||||
* specified number of bits.
|
||||
@ -1494,6 +1504,7 @@ public final class Integer extends Number implements Comparable<Integer> {
|
||||
* two's complement binary representation of the specified {@code int}
|
||||
* value.
|
||||
*
|
||||
* @param i the value to be reversed
|
||||
* @return the value obtained by reversing order of the bits in the
|
||||
* specified {@code int} value.
|
||||
* @since 1.5
|
||||
@ -1513,6 +1524,7 @@ public final class Integer extends Number implements Comparable<Integer> {
|
||||
* return value is -1 if the specified value is negative; 0 if the
|
||||
* specified value is zero; and 1 if the specified value is positive.)
|
||||
*
|
||||
* @param i the value whose signum is to be computed
|
||||
* @return the signum function of the specified {@code int} value.
|
||||
* @since 1.5
|
||||
*/
|
||||
@ -1525,6 +1537,7 @@ public final class Integer extends Number implements Comparable<Integer> {
|
||||
* Returns the value obtained by reversing the order of the bytes in the
|
||||
* two's complement representation of the specified {@code int} value.
|
||||
*
|
||||
* @param i the value whose bytes are to be reversed
|
||||
* @return the value obtained by reversing the bytes in the specified
|
||||
* {@code int} value.
|
||||
* @since 1.5
|
||||
|
@ -1053,9 +1053,9 @@ public final class Long extends Number implements Comparable<Long> {
|
||||
* Returns a hash code for a {@code long} value; compatible with
|
||||
* {@code Long.hashCode()}.
|
||||
*
|
||||
* @since 1.8
|
||||
*
|
||||
* @param value the value to hash
|
||||
* @return a hash code value for a {@code long} value.
|
||||
* @since 1.8
|
||||
*/
|
||||
public static int hashCode(long value) {
|
||||
return (int)(value ^ (value >>> 32));
|
||||
@ -1357,6 +1357,7 @@ public final class Long extends Number implements Comparable<Long> {
|
||||
* one-bits in its two's complement binary representation, that is, if it
|
||||
* is equal to zero.
|
||||
*
|
||||
* @param i the value whose highest one bit is to be computed
|
||||
* @return a {@code long} value with a single one-bit, in the position
|
||||
* of the highest-order one-bit in the specified value, or zero if
|
||||
* the specified value is itself equal to zero.
|
||||
@ -1380,6 +1381,7 @@ public final class Long extends Number implements Comparable<Long> {
|
||||
* one-bits in its two's complement binary representation, that is, if it
|
||||
* is equal to zero.
|
||||
*
|
||||
* @param i the value whose lowest one bit is to be computed
|
||||
* @return a {@code long} value with a single one-bit, in the position
|
||||
* of the lowest-order one-bit in the specified value, or zero if
|
||||
* the specified value is itself equal to zero.
|
||||
@ -1404,6 +1406,7 @@ public final class Long extends Number implements Comparable<Long> {
|
||||
* <li>ceil(log<sub>2</sub>(x)) = {@code 64 - numberOfLeadingZeros(x - 1)}
|
||||
* </ul>
|
||||
*
|
||||
* @param i the value whose number of leading zeros is to be computed
|
||||
* @return the number of zero bits preceding the highest-order
|
||||
* ("leftmost") one-bit in the two's complement binary representation
|
||||
* of the specified {@code long} value, or 64 if the value
|
||||
@ -1432,6 +1435,7 @@ public final class Long extends Number implements Comparable<Long> {
|
||||
* one-bits in its two's complement representation, in other words if it is
|
||||
* equal to zero.
|
||||
*
|
||||
* @param i the value whose number of trailing zeros is to be computed
|
||||
* @return the number of zero bits following the lowest-order ("rightmost")
|
||||
* one-bit in the two's complement binary representation of the
|
||||
* specified {@code long} value, or 64 if the value is equal
|
||||
@ -1456,6 +1460,7 @@ public final class Long extends Number implements Comparable<Long> {
|
||||
* representation of the specified {@code long} value. This function is
|
||||
* sometimes referred to as the <i>population count</i>.
|
||||
*
|
||||
* @param i the value whose bits are to be counted
|
||||
* @return the number of one-bits in the two's complement binary
|
||||
* representation of the specified {@code long} value.
|
||||
* @since 1.5
|
||||
@ -1484,6 +1489,8 @@ public final class Long extends Number implements Comparable<Long> {
|
||||
* ignored, even if the distance is negative: {@code rotateLeft(val,
|
||||
* distance) == rotateLeft(val, distance & 0x3F)}.
|
||||
*
|
||||
* @param i the value whose bits are to be rotated left
|
||||
* @param distance the number of bit positions to rotate left
|
||||
* @return the value obtained by rotating the two's complement binary
|
||||
* representation of the specified {@code long} value left by the
|
||||
* specified number of bits.
|
||||
@ -1506,6 +1513,8 @@ public final class Long extends Number implements Comparable<Long> {
|
||||
* ignored, even if the distance is negative: {@code rotateRight(val,
|
||||
* distance) == rotateRight(val, distance & 0x3F)}.
|
||||
*
|
||||
* @param i the value whose bits are to be rotated right
|
||||
* @param distance the number of bit positions to rotate right
|
||||
* @return the value obtained by rotating the two's complement binary
|
||||
* representation of the specified {@code long} value right by the
|
||||
* specified number of bits.
|
||||
@ -1520,6 +1529,7 @@ public final class Long extends Number implements Comparable<Long> {
|
||||
* two's complement binary representation of the specified {@code long}
|
||||
* value.
|
||||
*
|
||||
* @param i the value to be reversed
|
||||
* @return the value obtained by reversing order of the bits in the
|
||||
* specified {@code long} value.
|
||||
* @since 1.5
|
||||
@ -1540,6 +1550,7 @@ public final class Long extends Number implements Comparable<Long> {
|
||||
* return value is -1 if the specified value is negative; 0 if the
|
||||
* specified value is zero; and 1 if the specified value is positive.)
|
||||
*
|
||||
* @param i the value whose signum is to be computed
|
||||
* @return the signum function of the specified {@code long} value.
|
||||
* @since 1.5
|
||||
*/
|
||||
@ -1552,6 +1563,7 @@ public final class Long extends Number implements Comparable<Long> {
|
||||
* Returns the value obtained by reversing the order of the bytes in the
|
||||
* two's complement representation of the specified {@code long} value.
|
||||
*
|
||||
* @param i the value whose bytes are to be reversed
|
||||
* @return the value obtained by reversing the bytes in the specified
|
||||
* {@code long} value.
|
||||
* @since 1.5
|
||||
|
@ -77,18 +77,18 @@ import java.lang.annotation.Annotation;
|
||||
* by the following formal grammar:
|
||||
* <blockquote>
|
||||
* <dl>
|
||||
* <dt><i>SpecificationVersion:
|
||||
* <dd>Digits RefinedVersion<sub>opt</sub></i>
|
||||
* <dt><i>SpecificationVersion:</i>
|
||||
* <dd><i>Digits RefinedVersion<sub>opt</sub></i>
|
||||
|
||||
* <p><dt><i>RefinedVersion:</i>
|
||||
* <dt><i>RefinedVersion:</i>
|
||||
* <dd>{@code .} <i>Digits</i>
|
||||
* <dd>{@code .} <i>Digits RefinedVersion</i>
|
||||
*
|
||||
* <p><dt><i>Digits:
|
||||
* <dd>Digit
|
||||
* <dd>Digits</i>
|
||||
* <dt><i>Digits:</i>
|
||||
* <dd><i>Digit</i>
|
||||
* <dd><i>Digits</i>
|
||||
*
|
||||
* <p><dt><i>Digit:</i>
|
||||
* <dt><i>Digit:</i>
|
||||
* <dd>any character for which {@link Character#isDigit} returns {@code true},
|
||||
* e.g. 0, 1, 2, ...
|
||||
* </dl>
|
||||
|
@ -117,11 +117,11 @@ public class Runtime {
|
||||
*
|
||||
* <ul>
|
||||
*
|
||||
* <p> <li> The program <i>exits</i> normally, when the last non-daemon
|
||||
* <li> The program <i>exits</i> normally, when the last non-daemon
|
||||
* thread exits or when the <tt>{@link #exit exit}</tt> (equivalently,
|
||||
* <tt>{@link System#exit(int) System.exit}</tt>) method is invoked, or
|
||||
* {@link System#exit(int) System.exit}) method is invoked, or
|
||||
*
|
||||
* <p> <li> The virtual machine is <i>terminated</i> in response to a
|
||||
* <li> The virtual machine is <i>terminated</i> in response to a
|
||||
* user interrupt, such as typing <tt>^C</tt>, or a system-wide event,
|
||||
* such as user logoff or system shutdown.
|
||||
*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -403,9 +403,9 @@ public final class Short extends Number implements Comparable<Short> {
|
||||
* Returns a hash code for a {@code short} value; compatible with
|
||||
* {@code Short.hashCode()}.
|
||||
*
|
||||
* @since 1.8
|
||||
*
|
||||
* @param value the value to hash
|
||||
* @return a hash code value for a {@code short} value.
|
||||
* @since 1.8
|
||||
*/
|
||||
public static int hashCode(short value) {
|
||||
return (int)value;
|
||||
@ -482,6 +482,7 @@ public final class Short extends Number implements Comparable<Short> {
|
||||
* Returns the value obtained by reversing the order of the bytes in the
|
||||
* two's complement representation of the specified {@code short} value.
|
||||
*
|
||||
* @param i the value whose bytes are to be reversed
|
||||
* @return the value obtained by reversing (or, equivalently, swapping)
|
||||
* the bytes in the specified {@code short} value.
|
||||
* @since 1.5
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -1419,6 +1419,7 @@ public final class StrictMath {
|
||||
* {@link Float#MIN_EXPONENT} -1.
|
||||
* </ul>
|
||||
* @param f a {@code float} value
|
||||
* @return the unbiased exponent of the argument
|
||||
* @since 1.6
|
||||
*/
|
||||
public static int getExponent(float f) {
|
||||
@ -1436,6 +1437,7 @@ public final class StrictMath {
|
||||
* {@link Double#MIN_EXPONENT} -1.
|
||||
* </ul>
|
||||
* @param d a {@code double} value
|
||||
* @return the unbiased exponent of the argument
|
||||
* @since 1.6
|
||||
*/
|
||||
public static int getExponent(double d) {
|
||||
|
@ -66,6 +66,7 @@ public @interface SuppressWarnings {
|
||||
* additional warning names they support in conjunction with this
|
||||
* annotation type. They are encouraged to cooperate to ensure
|
||||
* that the same names work across multiple compilers.
|
||||
* @return the set of warnings to be suppressed
|
||||
*/
|
||||
String[] value();
|
||||
}
|
||||
|
@ -634,6 +634,8 @@ public final class System {
|
||||
*
|
||||
* <p>On UNIX systems, it returns {@code "\n"}; on Microsoft
|
||||
* Windows systems it returns {@code "\r\n"}.
|
||||
*
|
||||
* @return the system-dependent line separator string
|
||||
* @since 1.7
|
||||
*/
|
||||
public static String lineSeparator() {
|
||||
|
@ -1993,12 +1993,21 @@ class Thread implements Runnable {
|
||||
|
||||
|
||||
// The following three initially uninitialized fields are exclusively
|
||||
// managed by class java.util.concurrent.ThreadLocalRandom.
|
||||
// managed by class java.util.concurrent.ThreadLocalRandom. These
|
||||
// fields are used to build the high-performance PRNGs in the
|
||||
// concurrent code, and we can not risk accidental false sharing.
|
||||
// Hence, the fields are isolated with @Contended.
|
||||
|
||||
/** The current seed for a ThreadLocalRandom */
|
||||
@sun.misc.Contended("tlr")
|
||||
long threadLocalRandomSeed;
|
||||
|
||||
/** Probe hash value; nonzero if threadLocalRandomSeed initialized */
|
||||
@sun.misc.Contended("tlr")
|
||||
int threadLocalRandomProbe;
|
||||
|
||||
/** Secondary seed isolated from public ThreadLocalRandom sequence */
|
||||
@sun.misc.Contended("tlr")
|
||||
int threadLocalRandomSecondarySeed;
|
||||
|
||||
/* Some private helper methods */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -126,6 +126,7 @@ public interface Annotation {
|
||||
|
||||
/**
|
||||
* Returns the annotation type of this annotation.
|
||||
* @return the annotation type of this annotation
|
||||
*/
|
||||
Class<? extends Annotation> annotationType();
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -43,6 +43,7 @@ public @interface Repeatable {
|
||||
/**
|
||||
* Indicates the <em>containing annotation type</em> for the
|
||||
* repeatable annotation type.
|
||||
* @return the containing annotation type
|
||||
*/
|
||||
Class<? extends Annotation> value();
|
||||
}
|
||||
|
@ -44,5 +44,9 @@ package java.lang.annotation;
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.ANNOTATION_TYPE)
|
||||
public @interface Retention {
|
||||
/**
|
||||
* Returns the retention policy.
|
||||
* @return the retention policy
|
||||
*/
|
||||
RetentionPolicy value();
|
||||
}
|
||||
|
@ -67,5 +67,11 @@ package java.lang.annotation;
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.ANNOTATION_TYPE)
|
||||
public @interface Target {
|
||||
/**
|
||||
* Returns an array of the kinds of elements an annotation type
|
||||
* can be applied to.
|
||||
* @return an array of the kinds of elements an annotation type
|
||||
* can be applied to
|
||||
*/
|
||||
ElementType[] value();
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -363,6 +363,8 @@ public interface Instrumentation {
|
||||
* Primitive classes (for example, <code>java.lang.Integer.TYPE</code>)
|
||||
* and array classes are never modifiable.
|
||||
*
|
||||
* @param theClass the class to check for being modifiable
|
||||
* @return whether or not the argument class is modifiable
|
||||
* @throws java.lang.NullPointerException if the specified class is <code>null</code>.
|
||||
*
|
||||
* @see #retransformClasses
|
||||
@ -549,14 +551,14 @@ public interface Instrumentation {
|
||||
* {@link java.lang.instrument.ClassFileTransformer ClassFileTransformer},
|
||||
* it enables native methods to be
|
||||
* instrumented.
|
||||
* <p/>
|
||||
* <p>
|
||||
* Since native methods cannot be directly instrumented
|
||||
* (they have no bytecodes), they must be wrapped with
|
||||
* a non-native method which can be instrumented.
|
||||
* For example, if we had:
|
||||
* <pre>
|
||||
* native boolean foo(int x);</pre>
|
||||
* <p/>
|
||||
* <p>
|
||||
* We could transform the class file (with the
|
||||
* ClassFileTransformer during the initial definition
|
||||
* of the class) so that this becomes:
|
||||
@ -567,14 +569,14 @@ public interface Instrumentation {
|
||||
* }
|
||||
*
|
||||
* native boolean wrapped_foo(int x);</pre>
|
||||
* <p/>
|
||||
* <p>
|
||||
* Where <code>foo</code> becomes a wrapper for the actual native
|
||||
* method with the appended prefix "wrapped_". Note that
|
||||
* "wrapped_" would be a poor choice of prefix since it
|
||||
* might conceivably form the name of an existing method
|
||||
* thus something like "$$$MyAgentWrapped$$$_" would be
|
||||
* better but would make these examples less readable.
|
||||
* <p/>
|
||||
* <p>
|
||||
* The wrapper will allow data to be collected on the native
|
||||
* method call, but now the problem becomes linking up the
|
||||
* wrapped method with the native implementation.
|
||||
@ -583,7 +585,7 @@ public interface Instrumentation {
|
||||
* which might be:
|
||||
* <pre>
|
||||
* Java_somePackage_someClass_foo(JNIEnv* env, jint x)</pre>
|
||||
* <p/>
|
||||
* <p>
|
||||
* This function allows the prefix to be specified and the
|
||||
* proper resolution to occur.
|
||||
* Specifically, when the standard resolution fails, the
|
||||
@ -596,29 +598,29 @@ public interface Instrumentation {
|
||||
* <pre>{@code
|
||||
* method(foo) -> nativeImplementation(foo)
|
||||
* }</pre>
|
||||
* <p/>
|
||||
* <p>
|
||||
* When this fails, the resolution will be retried with
|
||||
* the specified prefix prepended to the method name,
|
||||
* yielding the correct resolution:
|
||||
* <pre>{@code
|
||||
* method(wrapped_foo) -> nativeImplementation(foo)
|
||||
* }</pre>
|
||||
* <p/>
|
||||
* <p>
|
||||
* For automatic resolution, the JVM will attempt:
|
||||
* <pre>{@code
|
||||
* method(wrapped_foo) -> nativeImplementation(wrapped_foo)
|
||||
* }</pre>
|
||||
* <p/>
|
||||
* <p>
|
||||
* When this fails, the resolution will be retried with
|
||||
* the specified prefix deleted from the implementation name,
|
||||
* yielding the correct resolution:
|
||||
* <pre>{@code
|
||||
* method(wrapped_foo) -> nativeImplementation(foo)
|
||||
* }</pre>
|
||||
* <p/>
|
||||
* <p>
|
||||
* Note that since the prefix is only used when standard
|
||||
* resolution fails, native methods can be wrapped selectively.
|
||||
* <p/>
|
||||
* <p>
|
||||
* Since each <code>ClassFileTransformer</code>
|
||||
* can do its own transformation of the bytecodes, more
|
||||
* than one layer of wrappers may be applied. Thus each
|
||||
|
@ -112,7 +112,9 @@ import java.security.PrivilegedAction;
|
||||
implMethodDesc = implMethodType.toMethodDescriptorString();
|
||||
Type implMethodAsmType = Type.getMethodType(implMethodDesc);
|
||||
implMethodArgumentTypes = implMethodAsmType.getArgumentTypes();
|
||||
implMethodReturnType = implMethodAsmType.getReturnType();
|
||||
implMethodReturnType = (implKind == MethodHandleInfo.REF_newInvokeSpecial)
|
||||
? Type.getObjectType(implMethodClassName)
|
||||
: implMethodAsmType.getReturnType();
|
||||
constructorType = invokedType.changeReturnType(Void.TYPE);
|
||||
constructorDesc = constructorType.toMethodDescriptorString();
|
||||
lambdaClassName = targetClass.getName().replace('.', '/') + "$$Lambda$" + counter.incrementAndGet();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,21 +29,45 @@ package java.lang.invoke;
|
||||
* LambdaConversionException
|
||||
*/
|
||||
public class LambdaConversionException extends Exception {
|
||||
/**
|
||||
* Constructs a {@code LambdaConversionException}.
|
||||
*/
|
||||
public LambdaConversionException() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a {@code LambdaConversionException} with a message.
|
||||
* @param message the detail message
|
||||
*/
|
||||
public LambdaConversionException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a {@code LambdaConversionException} with a message and cause.
|
||||
* @param message the detail message
|
||||
* @param cause the cause
|
||||
*/
|
||||
public LambdaConversionException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a {@code LambdaConversionException} with a cause.
|
||||
* @param cause the cause
|
||||
*/
|
||||
public LambdaConversionException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a {@code LambdaConversionException} with a message,
|
||||
* cause, and other settings.
|
||||
* @param message the detail message
|
||||
* @param cause the cause
|
||||
* @param enableSuppression whether or not suppressed exceptions are enabled
|
||||
* @param writableStackTrace whether or not the stack trace is writable
|
||||
*/
|
||||
public LambdaConversionException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
|
||||
super(message, cause, enableSuppression, writableStackTrace);
|
||||
}
|
||||
|
@ -111,7 +111,7 @@ package java.lang.invoke;
|
||||
* done on return type, while a strict version is applied to arguments.
|
||||
*
|
||||
* <p>A type Q is considered adaptable to S as follows:
|
||||
* <table>
|
||||
* <table summary="adaptable types">
|
||||
* <tr><th>Q</th><th>S</th><th>Link-time checks</th><th>Capture-time checks</th></tr>
|
||||
* <tr>
|
||||
* <td>Primitive</td><td>Primitive</td>
|
||||
@ -155,7 +155,7 @@ public class LambdaMetafactory {
|
||||
|
||||
private static final Class<?>[] EMPTY_CLASS_ARRAY = new Class<?>[0];
|
||||
|
||||
/**
|
||||
/**
|
||||
* Standard meta-factory for conversion of lambda expressions or method references to functional interfaces.
|
||||
*
|
||||
* @param caller Stacked automatically by VM; represents a lookup context with the accessibility privileges
|
||||
@ -174,7 +174,7 @@ public class LambdaMetafactory {
|
||||
* @param instantiatedMethodType The signature of the primary functional interface method after type variables
|
||||
* are substituted with their instantiation from the capture site
|
||||
* @return a CallSite, which, when invoked, will return an instance of the functional interface
|
||||
* @throws ReflectiveOperationException
|
||||
* @throws ReflectiveOperationException if the caller is not able to reconstruct one of the method handles
|
||||
* @throws LambdaConversionException If any of the meta-factory protocol invariants are violated
|
||||
*/
|
||||
public static CallSite metaFactory(MethodHandles.Lookup caller,
|
||||
@ -226,7 +226,7 @@ public class LambdaMetafactory {
|
||||
* the first argument in the invocation signature will correspond to the receiver.
|
||||
* @param args argument to pass, flags, marker interface count, and marker interfaces as described above
|
||||
* @return a CallSite, which, when invoked, will return an instance of the functional interface
|
||||
* @throws ReflectiveOperationException
|
||||
* @throws ReflectiveOperationException if the caller is not able to reconstruct one of the method handles
|
||||
* @throws LambdaConversionException If any of the meta-factory protocol invariants are violated
|
||||
*/
|
||||
public static CallSite altMetaFactory(MethodHandles.Lookup caller,
|
||||
|
@ -44,7 +44,7 @@ import java.util.logging.Logger;
|
||||
* {@linkplain java.lang.invoke.MethodHandles#dropArguments deletion},
|
||||
* and {@linkplain java.lang.invoke.MethodHandles#filterArguments substitution}.
|
||||
*
|
||||
* <h3>Method handle contents</h3>
|
||||
* <h1>Method handle contents</h1>
|
||||
* Method handles are dynamically and strongly typed according to their parameter and return types.
|
||||
* They are not distinguished by the name or the defining class of their underlying methods.
|
||||
* A method handle must be invoked using a symbolic type descriptor which matches
|
||||
@ -81,7 +81,7 @@ import java.util.logging.Logger;
|
||||
* from its specific class, as the method handle class hierarchy (if any)
|
||||
* may change from time to time or across implementations from different vendors.
|
||||
*
|
||||
* <h3>Method handle compilation</h3>
|
||||
* <h1>Method handle compilation</h1>
|
||||
* A Java method call expression naming {@code invokeExact} or {@code invoke}
|
||||
* can invoke a method handle from Java source code.
|
||||
* From the viewpoint of source code, these methods can take any arguments
|
||||
@ -111,7 +111,7 @@ import java.util.logging.Logger;
|
||||
* The ambiguity with the type {@code Void} is harmless, since there are no references of type
|
||||
* {@code Void} except the null reference.
|
||||
*
|
||||
* <h3>Method handle invocation</h3>
|
||||
* <h1>Method handle invocation</h1>
|
||||
* The first time a {@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.
|
||||
@ -154,7 +154,7 @@ import java.util.logging.Logger;
|
||||
* (<em>Note:</em> The adjusted method handle {@code M2} is not directly observable,
|
||||
* and implementations are therefore not required to materialize it.)
|
||||
*
|
||||
* <h3>Invocation checking</h3>
|
||||
* <h1>Invocation checking</h1>
|
||||
* In typical programs, method handle type matching will usually succeed.
|
||||
* But if a match fails, the JVM will throw a {@link WrongMethodTypeException},
|
||||
* either directly (in the case of {@code invokeExact}) or indirectly as if
|
||||
@ -195,7 +195,7 @@ import java.util.logging.Logger;
|
||||
* They should not be passed to untrusted code unless their use from
|
||||
* the untrusted code would be harmless.
|
||||
*
|
||||
* <h3>Method handle creation</h3>
|
||||
* <h1>Method handle creation</h1>
|
||||
* Java code can create a method handle that directly accesses
|
||||
* any method, constructor, or field that is accessible to that code.
|
||||
* This is done via a reflective, capability-based API called
|
||||
@ -249,7 +249,7 @@ import java.util.logging.Logger;
|
||||
* receiver type. Such a method handle simulates the effect of
|
||||
* an {@code invokespecial} instruction to the same method.
|
||||
*
|
||||
* <h3>Usage examples</h3>
|
||||
* <h1>Usage examples</h1>
|
||||
* Here are some examples of usage:
|
||||
* <p><blockquote><pre>{@code
|
||||
Object x, y; String s; int i;
|
||||
@ -295,7 +295,7 @@ mh.invokeExact(System.out, "Hello, world.");
|
||||
* be a method which calls {@link java.util.Objects#equals(Object,Object) Objects.equals }
|
||||
* on its arguments, and asserts that the result is true.
|
||||
*
|
||||
* <h3>Exceptions</h3>
|
||||
* <h1>Exceptions</h1>
|
||||
* The methods {@code invokeExact} and {@code invoke} are declared
|
||||
* to throw {@link java.lang.Throwable Throwable},
|
||||
* which is to say that there is no static restriction on what a method handle
|
||||
@ -308,7 +308,7 @@ mh.invokeExact(System.out, "Hello, world.");
|
||||
* throwables locally, rethrowing only those which are legal in the context,
|
||||
* and wrapping ones which are illegal.
|
||||
*
|
||||
* <h3><a name="sigpoly"></a>Signature polymorphism</h3>
|
||||
* <h1><a name="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>.
|
||||
@ -333,7 +333,7 @@ mh.invokeExact(System.out, "Hello, world.");
|
||||
* Tools which determine symbolic linkage are required to accept such
|
||||
* untransformed descriptors, without reporting linkage errors.
|
||||
*
|
||||
* <h3>Interoperation between method handles and the Core Reflection API</h3>
|
||||
* <h1>Interoperation between method handles and the Core Reflection API</h1>
|
||||
* Using factory methods in the {@link java.lang.invoke.MethodHandles.Lookup Lookup} API,
|
||||
* any class member represented by a Core Reflection API object
|
||||
* can be converted to a behaviorally equivalent method handle.
|
||||
@ -375,7 +375,7 @@ mh.invokeExact(System.out, "Hello, world.");
|
||||
* to call {@code invokeExact} or plain {@code invoke},
|
||||
* for any specified type descriptor .
|
||||
*
|
||||
* <h3>Interoperation between method handles and Java generics</h3>
|
||||
* <h1>Interoperation between method handles and Java generics</h1>
|
||||
* A method handle can be obtained on a method, constructor, or field
|
||||
* which is declared with Java generic types.
|
||||
* As with the Core Reflection API, the type of the method handle
|
||||
@ -457,6 +457,8 @@ public abstract class MethodHandle {
|
||||
* {@link java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke}, via JNI,
|
||||
* or indirectly via {@link java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect},
|
||||
* it will throw an {@code UnsupportedOperationException}.
|
||||
* @param args the signature-polymorphic parameter list, statically represented using varargs
|
||||
* @return the signature-polymorphic result, statically represented using {@code Object}
|
||||
* @throws WrongMethodTypeException if the target's type is not identical with the caller's symbolic type descriptor
|
||||
* @throws Throwable anything thrown by the underlying method propagates unchanged through the method handle call
|
||||
*/
|
||||
@ -491,6 +493,8 @@ public abstract class MethodHandle {
|
||||
* {@link java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke}, via JNI,
|
||||
* or indirectly via {@link java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect},
|
||||
* it will throw an {@code UnsupportedOperationException}.
|
||||
* @param args the signature-polymorphic parameter list, statically represented using varargs
|
||||
* @return the signature-polymorphic result, statically represented using {@code Object}
|
||||
* @throws WrongMethodTypeException if the target's type cannot be adjusted to the caller's symbolic type descriptor
|
||||
* @throws ClassCastException if the target's type can be adjusted to the caller, but a reference cast fails
|
||||
* @throws Throwable anything thrown by the underlying method propagates unchanged through the method handle call
|
||||
@ -511,15 +515,26 @@ public abstract class MethodHandle {
|
||||
* operations on outgoing argument values.)
|
||||
* The caller can assume that the incoming result value is part of the range
|
||||
* of the callee's return type.
|
||||
* @param args the signature-polymorphic parameter list, statically represented using varargs
|
||||
* @return the signature-polymorphic result, statically represented using {@code Object}
|
||||
*/
|
||||
/*non-public*/ final native @PolymorphicSignature Object invokeBasic(Object... args) throws Throwable;
|
||||
|
||||
/**
|
||||
* Private method for trusted invocation of a MemberName of kind {@code REF_invokeVirtual}.
|
||||
* The caller signature is restricted to basic types as with {@code invokeBasic}.
|
||||
* The trailing (not leading) argument must be a MemberName.
|
||||
* @param args the signature-polymorphic parameter list, statically represented using varargs
|
||||
* @return the signature-polymorphic result, statically represented using {@code Object}
|
||||
*/
|
||||
/*non-public*/ static native @PolymorphicSignature Object linkToVirtual(Object... args) throws Throwable;
|
||||
|
||||
/**
|
||||
* Private method for trusted invocation of a MemberName of kind {@code REF_invokeStatic}.
|
||||
* The caller signature is restricted to basic types as with {@code invokeBasic}.
|
||||
* The trailing (not leading) argument must be a MemberName.
|
||||
* @param args the signature-polymorphic parameter list, statically represented using varargs
|
||||
* @return the signature-polymorphic result, statically represented using {@code Object}
|
||||
*/
|
||||
/*non-public*/ static native @PolymorphicSignature Object linkToStatic(Object... args) throws Throwable;
|
||||
|
||||
@ -527,6 +542,8 @@ public abstract class MethodHandle {
|
||||
* Private method for trusted invocation of a MemberName of kind {@code REF_invokeSpecial}.
|
||||
* The caller signature is restricted to basic types as with {@code invokeBasic}.
|
||||
* The trailing (not leading) argument must be a MemberName.
|
||||
* @param args the signature-polymorphic parameter list, statically represented using varargs
|
||||
* @return the signature-polymorphic result, statically represented using {@code Object}
|
||||
*/
|
||||
/*non-public*/ static native @PolymorphicSignature Object linkToSpecial(Object... args) throws Throwable;
|
||||
|
||||
@ -534,6 +551,8 @@ public abstract class MethodHandle {
|
||||
* Private method for trusted invocation of a MemberName of kind {@code REF_invokeInterface}.
|
||||
* The caller signature is restricted to basic types as with {@code invokeBasic}.
|
||||
* The trailing (not leading) argument must be a MemberName.
|
||||
* @param args the signature-polymorphic parameter list, statically represented using varargs
|
||||
* @return the signature-polymorphic result, statically represented using {@code Object}
|
||||
*/
|
||||
/*non-public*/ static native @PolymorphicSignature Object linkToInterface(Object... args) throws Throwable;
|
||||
|
||||
|
@ -108,8 +108,9 @@ public class MethodHandleProxies {
|
||||
* Future versions of this API may also equip wrapper instances
|
||||
* with one or more additional public "marker" interfaces.
|
||||
*
|
||||
* @param <T> the desired type of the wrapper, a single-method interface
|
||||
* @param intfc a class object representing {@code T}
|
||||
* @param target the method handle to invoke from the wrapper
|
||||
* @param intfc the desired type of the wrapper, a single-method interface
|
||||
* @return a correctly-typed wrapper for the given target
|
||||
* @throws NullPointerException if either argument is null
|
||||
* @throws IllegalArgumentException if the {@code intfc} is not a
|
||||
|
@ -70,6 +70,7 @@ public class MethodHandles {
|
||||
* including direct method handles to private fields and methods.
|
||||
* This lookup object is a <em>capability</em> which may be delegated to trusted agents.
|
||||
* Do not store it in place where untrusted code can access it.
|
||||
* @return a lookup object for the caller of this method
|
||||
*/
|
||||
@CallerSensitive
|
||||
public static Lookup lookup() {
|
||||
@ -88,6 +89,7 @@ public class MethodHandles {
|
||||
* {@linkplain Lookup#in <code>publicLookup().in(C.class)</code>}.
|
||||
* Since all classes have equal access to public names,
|
||||
* such a change would confer no new access rights.
|
||||
* @return a lookup object which is trusted minimally
|
||||
*/
|
||||
public static Lookup publicLookup() {
|
||||
return Lookup.PUBLIC_LOOKUP;
|
||||
@ -111,72 +113,74 @@ public class MethodHandles {
|
||||
* on the {@code Lookup} object to create method handles for access-checked members.
|
||||
* This includes all methods, constructors, and fields which are allowed to the lookup class,
|
||||
* even private ones.
|
||||
* <p>
|
||||
*
|
||||
* <h1><a name="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.
|
||||
* Here is a summary of the correspondence between these factory methods and
|
||||
* the behavior the resulting method handles:
|
||||
* <code>
|
||||
* <table border=1 cellpadding=5 summary="lookup method behaviors">
|
||||
* <tr><th>lookup expression</th><th>member</th><th>behavior</th></tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findGetter lookup.findGetter(C.class,"f",FT.class)}</td>
|
||||
* <td>FT f;</td><td>(T) this.f;</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#findGetter lookup.findGetter(C.class,"f",FT.class)}</td>
|
||||
* <td>{@code FT f;}</td><td>{@code (T) this.f;}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findStaticGetter lookup.findStaticGetter(C.class,"f",FT.class)}</td>
|
||||
* <td>static<br>FT f;</td><td>(T) C.f;</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#findStaticGetter lookup.findStaticGetter(C.class,"f",FT.class)}</td>
|
||||
* <td>{@code static}<br>{@code FT f;}</td><td>{@code (T) C.f;}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findSetter lookup.findSetter(C.class,"f",FT.class)}</td>
|
||||
* <td>FT f;</td><td>this.f = x;</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#findSetter lookup.findSetter(C.class,"f",FT.class)}</td>
|
||||
* <td>{@code FT f;}</td><td>{@code this.f = x;}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findStaticSetter lookup.findStaticSetter(C.class,"f",FT.class)}</td>
|
||||
* <td>static<br>FT f;</td><td>C.f = arg;</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#findStaticSetter lookup.findStaticSetter(C.class,"f",FT.class)}</td>
|
||||
* <td>{@code static}<br>{@code FT f;}</td><td>{@code C.f = arg;}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findVirtual lookup.findVirtual(C.class,"m",MT)}</td>
|
||||
* <td>T m(A*);</td><td>(T) this.m(arg*);</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#findVirtual lookup.findVirtual(C.class,"m",MT)}</td>
|
||||
* <td>{@code T m(A*);}</td><td>{@code (T) this.m(arg*);}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findStatic lookup.findStatic(C.class,"m",MT)}</td>
|
||||
* <td>static<br>T m(A*);</td><td>(T) C.m(arg*);</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#findStatic lookup.findStatic(C.class,"m",MT)}</td>
|
||||
* <td>{@code static}<br>{@code T m(A*);}</td><td>{@code (T) C.m(arg*);}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findSpecial lookup.findSpecial(C.class,"m",MT,this.class)}</td>
|
||||
* <td>T m(A*);</td><td>(T) super.m(arg*);</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#findSpecial lookup.findSpecial(C.class,"m",MT,this.class)}</td>
|
||||
* <td>{@code T m(A*);}</td><td>{@code (T) super.m(arg*);}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findConstructor lookup.findConstructor(C.class,MT)}</td>
|
||||
* <td>C(A*);</td><td>(T) new C(arg*);</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#findConstructor lookup.findConstructor(C.class,MT)}</td>
|
||||
* <td>{@code C(A*);}</td><td>{@code new C(arg*);}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#unreflectGetter lookup.unreflectGetter(aField)}</td>
|
||||
* <td>(static)?<br>FT f;</td><td>(FT) aField.get(thisOrNull);</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#unreflectGetter lookup.unreflectGetter(aField)}</td>
|
||||
* <td>({@code static})?<br>{@code FT f;}</td><td>{@code (FT) aField.get(thisOrNull);}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#unreflectSetter lookup.unreflectSetter(aField)}</td>
|
||||
* <td>(static)?<br>FT f;</td><td>aField.set(thisOrNull, arg);</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#unreflectSetter lookup.unreflectSetter(aField)}</td>
|
||||
* <td>({@code static})?<br>{@code FT f;}</td><td>{@code aField.set(thisOrNull, arg);}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)}</td>
|
||||
* <td>(static)?<br>T m(A*);</td><td>(T) aMethod.invoke(thisOrNull, arg*);</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)}</td>
|
||||
* <td>({@code static})?<br>{@code T m(A*);}</td><td>{@code (T) aMethod.invoke(thisOrNull, arg*);}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#unreflectConstructor lookup.unreflectConstructor(aConstructor)}</td>
|
||||
* <td>C(A*);</td><td>(C) aConstructor.newInstance(arg*);</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#unreflectConstructor lookup.unreflectConstructor(aConstructor)}</td>
|
||||
* <td>{@code C(A*);}</td><td>{@code (C) aConstructor.newInstance(arg*);}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)}</td>
|
||||
* <td>(static)?<br>T m(A*);</td><td>(T) aMethod.invoke(thisOrNull, arg*);</td>
|
||||
* <td>{@link java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)}</td>
|
||||
* <td>({@code static})?<br>{@code T m(A*);}</td><td>{@code (T) aMethod.invoke(thisOrNull, arg*);}</td>
|
||||
* </tr>
|
||||
* </table>
|
||||
* </code>
|
||||
*
|
||||
* Here, the type {@code C} is the class or interface being searched for a member,
|
||||
* documented as a parameter named {@code refc} in the lookup methods.
|
||||
* The method or constructor type {@code MT} is composed from the return type {@code T}
|
||||
* The method type {@code MT} is composed from the return type {@code T}
|
||||
* and the sequence of argument types {@code A*}.
|
||||
* The constructor also has a sequence of argument types {@code A*} and
|
||||
* is deemed to return the newly-created object of type {@code C}.
|
||||
* Both {@code MT} and the field type {@code FT} are documented as a parameter named {@code type}.
|
||||
* The formal parameter {@code this} stands for the self-reference of type {@code C};
|
||||
* if it is present, it is always the leading argument to the method handle invocation.
|
||||
@ -210,7 +214,7 @@ public class MethodHandles {
|
||||
* security manager checks.
|
||||
* </ul>
|
||||
*
|
||||
* <h3><a name="access"></a>Access checking</h3>
|
||||
* <h1><a name="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
|
||||
@ -297,7 +301,7 @@ public class MethodHandles {
|
||||
* with static methods of {@link MethodHandles},
|
||||
* independently of any {@code Lookup} object.
|
||||
*
|
||||
* <h3>Security manager interactions</h3>
|
||||
* <h1>Security manager interactions</h1>
|
||||
* <a name="secmgr"></a>
|
||||
* If a security manager is present, member lookups are subject to
|
||||
* additional checks.
|
||||
@ -388,6 +392,7 @@ public class MethodHandles {
|
||||
* but the permissions may be additionally limited by the bitmask
|
||||
* {@link #lookupModes lookupModes}, which controls whether non-public members
|
||||
* can be accessed.
|
||||
* @return the lookup class, on behalf of which this lookup object finds members
|
||||
*/
|
||||
public Class<?> lookupClass() {
|
||||
return lookupClass;
|
||||
@ -414,6 +419,7 @@ public class MethodHandles {
|
||||
* The purpose of this is to restrict access via the new lookup object,
|
||||
* so that it can access only names which can be reached by the original
|
||||
* lookup object, and also by the new lookup class.
|
||||
* @return the lookup modes, which limit the kinds of access performed by this lookup object
|
||||
*/
|
||||
public int lookupModes() {
|
||||
return allowedModes & ALL_MODES;
|
||||
@ -1352,6 +1358,7 @@ return mh1;
|
||||
* The type of the method handle will have a void return type.
|
||||
* Its last argument will be the array's element type.
|
||||
* The first and second arguments will be the array type and int.
|
||||
* @param arrayClass the class of an array
|
||||
* @return a method handle which can store values into the array type
|
||||
* @throws NullPointerException if the argument is null
|
||||
* @throws IllegalArgumentException if arrayClass is not an array type
|
||||
@ -1580,12 +1587,12 @@ import static java.lang.invoke.MethodType.*;
|
||||
...
|
||||
MethodType intfn1 = methodType(int.class, int.class);
|
||||
MethodType intfn2 = methodType(int.class, int.class, int.class);
|
||||
MethodHandle sub = ... {int x, int y => x-y} ...;
|
||||
MethodHandle sub = ... (int x, int y) -> (x-y) ...;
|
||||
assert(sub.type().equals(intfn2));
|
||||
MethodHandle sub1 = permuteArguments(sub, intfn2, 0, 1);
|
||||
MethodHandle rsub = permuteArguments(sub, intfn2, 1, 0);
|
||||
assert((int)rsub.invokeExact(1, 100) == 99);
|
||||
MethodHandle add = ... {int x, int y => x+y} ...;
|
||||
MethodHandle add = ... (int x, int y) -> (x+y) ...;
|
||||
assert(add.type().equals(intfn2));
|
||||
MethodHandle twice = permuteArguments(add, intfn1, 0, 0);
|
||||
assert(twice.type().equals(intfn1));
|
||||
@ -2261,6 +2268,8 @@ assertEquals("boojum", (String) catTrace.invokeExact("boo", "jum"));
|
||||
* The method type will nominally specify a return of {@code returnType}.
|
||||
* The return type may be anything convenient: It doesn't matter to the
|
||||
* method handle's behavior, since it will never return normally.
|
||||
* @param returnType the return type of the desired method handle
|
||||
* @param exType the parameter type of the desired method handle
|
||||
* @return method handle which can throw the given exceptions
|
||||
* @throws NullPointerException if either argument is null
|
||||
*/
|
||||
|
@ -194,6 +194,8 @@ class MethodType implements java.io.Serializable {
|
||||
/**
|
||||
* Finds or creates a method type with the given components.
|
||||
* Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
|
||||
* @param rtype the return type
|
||||
* @param ptypes the parameter types
|
||||
* @return a method type with the given components
|
||||
* @throws NullPointerException if {@code rtype} or {@code ptypes} or any element of {@code ptypes} is null
|
||||
* @throws IllegalArgumentException if any element of {@code ptypes} is {@code void.class}
|
||||
@ -214,6 +216,9 @@ class MethodType implements java.io.Serializable {
|
||||
* Finds or creates a method type with the given components.
|
||||
* Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
|
||||
* The leading parameter type is prepended to the remaining array.
|
||||
* @param rtype the return type
|
||||
* @param ptype0 the first parameter type
|
||||
* @param ptypes the remaining parameter types
|
||||
* @return a method type with the given components
|
||||
* @throws NullPointerException if {@code rtype} or {@code ptype0} or {@code ptypes} or any element of {@code ptypes} is null
|
||||
* @throws IllegalArgumentException if {@code ptype0} or {@code ptypes} or any element of {@code ptypes} is {@code void.class}
|
||||
@ -230,6 +235,7 @@ class MethodType implements java.io.Serializable {
|
||||
* Finds or creates a method type with the given components.
|
||||
* Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
|
||||
* The resulting method has no parameter types.
|
||||
* @param rtype the return type
|
||||
* @return a method type with the given return value
|
||||
* @throws NullPointerException if {@code rtype} is null
|
||||
*/
|
||||
@ -242,6 +248,8 @@ class MethodType implements java.io.Serializable {
|
||||
* Finds or creates a method type with the given components.
|
||||
* Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
|
||||
* The resulting method has the single given parameter type.
|
||||
* @param rtype the return type
|
||||
* @param ptype0 the parameter type
|
||||
* @return a method type with the given return value and parameter type
|
||||
* @throws NullPointerException if {@code rtype} or {@code ptype0} is null
|
||||
* @throws IllegalArgumentException if {@code ptype0} is {@code void.class}
|
||||
@ -256,6 +264,9 @@ class MethodType implements java.io.Serializable {
|
||||
* Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
|
||||
* The resulting method has the same parameter types as {@code ptypes},
|
||||
* and the specified return type.
|
||||
* @param rtype the return type
|
||||
* @param ptypes the method type which supplies the parameter types
|
||||
* @return a method type with the given components
|
||||
* @throws NullPointerException if {@code rtype} or {@code ptypes} is null
|
||||
*/
|
||||
public static
|
||||
@ -938,7 +949,8 @@ s.writeObject(this.parameterArray());
|
||||
* provided to the factory method {@link #methodType(Class,Class[]) methodType}.
|
||||
* For example, null values, or {@code void} parameter types,
|
||||
* will lead to exceptions during deserialization.
|
||||
* @param the stream to write the object to
|
||||
* @param s the stream to write the object to
|
||||
* @throws java.io.IOException if there is a problem writing the object
|
||||
*/
|
||||
private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {
|
||||
s.defaultWriteObject(); // requires serialPersistentFields to be an empty array
|
||||
@ -953,7 +965,9 @@ s.writeObject(this.parameterArray());
|
||||
* It provides the parameters to the factory method called by
|
||||
* {@link #readResolve readResolve}.
|
||||
* After that call it is discarded.
|
||||
* @param the stream to read the object from
|
||||
* @param s the stream to read the object from
|
||||
* @throws java.io.IOException if there is a problem reading the object
|
||||
* @throws ClassNotFoundException if one of the component classes cannot be resolved
|
||||
* @see #MethodType()
|
||||
* @see #readResolve
|
||||
* @see #writeObject
|
||||
|
@ -195,7 +195,7 @@ public class MutableCallSite extends CallSite {
|
||||
* processed before the method returns abnormally.
|
||||
* Which elements these are (if any) is implementation-dependent.
|
||||
*
|
||||
* <h3>Java Memory Model details</h3>
|
||||
* <h1>Java Memory Model details</h1>
|
||||
* In terms of the Java Memory Model, this operation performs a synchronization
|
||||
* action which is comparable in effect to the writing of a volatile variable
|
||||
* by the current thread, and an eventual volatile read by every other thread
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -97,66 +97,113 @@ public final class SerializedLambda implements Serializable {
|
||||
this.capturedArgs = Objects.requireNonNull(capturedArgs).clone();
|
||||
}
|
||||
|
||||
/** Get the name of the class that captured this lambda */
|
||||
/**
|
||||
* Get the name of the class that captured this lambda.
|
||||
* @return the name of the class that captured this lambda
|
||||
*/
|
||||
public String getCapturingClass() {
|
||||
return capturingClass.getName().replace('.', '/');
|
||||
}
|
||||
|
||||
/** Get the name of the functional interface class to which this lambda has been converted */
|
||||
/**
|
||||
* Get the name of the functional interface class to which this
|
||||
* lambda has been converted
|
||||
* @return the name of the functional interface this lambda has
|
||||
* been converted to
|
||||
*/
|
||||
public String getFunctionalInterfaceClass() {
|
||||
return functionalInterfaceClass;
|
||||
}
|
||||
|
||||
/** Get the name of the primary method for the functional interface to which this lambda has been converted */
|
||||
/**
|
||||
* Get the name of the primary method for the functional interface
|
||||
* to which this lambda has been converted.
|
||||
* @return the name of the primary methods of the functional interface
|
||||
*/
|
||||
public String getFunctionalInterfaceMethodName() {
|
||||
return functionalInterfaceMethodName;
|
||||
}
|
||||
|
||||
/** Get the signature of the primary method for the functional interface to which this lambda has been converted */
|
||||
/**
|
||||
* Get the signature of the primary method for the functional
|
||||
* interface to which this lambda has been converted.
|
||||
* @return the signature of the primary method of the functional
|
||||
* interface
|
||||
*/
|
||||
public String getFunctionalInterfaceMethodSignature() {
|
||||
return functionalInterfaceMethodSignature;
|
||||
}
|
||||
|
||||
/** Get the method handle kind (see {@link MethodHandleInfo}) of the primary method for the functional interface
|
||||
* to which this lambda has been converted */
|
||||
/**
|
||||
* Get the method handle kind (see {@link MethodHandleInfo}) of
|
||||
* the primary method for the functional interface to which this
|
||||
* lambda has been converted
|
||||
* @return the method handle kind of the primary method of
|
||||
* functional interface
|
||||
*/
|
||||
public int getFunctionalInterfaceMethodKind() {
|
||||
return functionalInterfaceMethodKind;
|
||||
}
|
||||
|
||||
/** Get the name of the class containing the implementation method */
|
||||
/**
|
||||
* Get the name of the class containing the implementation
|
||||
* method.
|
||||
* @return the name of the class containing the implementation
|
||||
* method
|
||||
*/
|
||||
public String getImplClass() {
|
||||
return implClass;
|
||||
}
|
||||
|
||||
/** Get the name of the implementation method */
|
||||
/**
|
||||
* Get the name of the implementation method.
|
||||
* @return the name of the implementation method
|
||||
*/
|
||||
public String getImplMethodName() {
|
||||
return implMethodName;
|
||||
}
|
||||
|
||||
/** Get the signature of the implementation method */
|
||||
/**
|
||||
* Get the signature of the implementation method.
|
||||
* @return the signature of the implementation method
|
||||
*/
|
||||
public String getImplMethodSignature() {
|
||||
return implMethodSignature;
|
||||
}
|
||||
|
||||
/** Get the method handle kind (see {@link MethodHandleInfo}) of the implementation method */
|
||||
/**
|
||||
* Get the method handle kind (see {@link MethodHandleInfo}) of
|
||||
* the implementation method.
|
||||
* @return the method handle kind of the implementation method
|
||||
*/
|
||||
public int getImplMethodKind() {
|
||||
return implMethodKind;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the signature of the primary functional interface method after type variables are substituted with
|
||||
* their instantiation from the capture site
|
||||
* Get the signature of the primary functional interface method
|
||||
* after type variables are substituted with their instantiation
|
||||
* from the capture site.
|
||||
* @return the signature of the primary functional interface method
|
||||
* after type variable processing
|
||||
*/
|
||||
public final String getInstantiatedMethodType() {
|
||||
return instantiatedMethodType;
|
||||
}
|
||||
|
||||
/** Get the count of dynamic arguments to the lambda capture site */
|
||||
/**
|
||||
* Get the count of dynamic arguments to the lambda capture site.
|
||||
* @return the count of dynamic arguments to the lambda capture site
|
||||
*/
|
||||
public int getCapturedArgCount() {
|
||||
return capturedArgs.length;
|
||||
}
|
||||
|
||||
/** Get a dynamic argument to the lambda capture site */
|
||||
/**
|
||||
* Get a dynamic argument to the lambda capture site.
|
||||
* @param i the argument to capture
|
||||
* @return a dynamic argument to the lambda capture site
|
||||
*/
|
||||
public Object getCapturedArg(int i) {
|
||||
return capturedArgs[i];
|
||||
}
|
||||
|
@ -43,13 +43,13 @@
|
||||
* </li>
|
||||
* </ul>
|
||||
*
|
||||
* <h2><a name="jvm_mods"></a>Summary of relevant Java Virtual Machine changes</h2>
|
||||
* <h1><a name="jvm_mods"></a>Summary of relevant Java Virtual Machine changes</h1>
|
||||
* The following low-level information summarizes relevant parts of the
|
||||
* Java Virtual Machine specification. For full details, please see the
|
||||
* current version of that specification.
|
||||
*
|
||||
* Each occurrence of an {@code invokedynamic} instruction is called a <em>dynamic call site</em>.
|
||||
* <h3><a name="indyinsn"></a>{@code invokedynamic} instructions</h3>
|
||||
* <h2><a name="indyinsn"></a>{@code invokedynamic} instructions</h2>
|
||||
* A dynamic call site is originally in an unlinked state. In this state, there is
|
||||
* no target method for the call site to invoke.
|
||||
* <p>
|
||||
@ -97,7 +97,7 @@
|
||||
* If this happens, the same error will the thrown for all subsequent
|
||||
* attempts to execute the dynamic call site.
|
||||
*
|
||||
* <h3>timing of linkage</h3>
|
||||
* <h2>timing of linkage</h2>
|
||||
* A dynamic call site is linked just before its first execution.
|
||||
* The bootstrap method call implementing the linkage occurs within
|
||||
* a thread that is attempting a first execution.
|
||||
@ -131,7 +131,7 @@
|
||||
* just before its first invocation.
|
||||
* There is no way to undo the effect of a completed bootstrap method call.
|
||||
*
|
||||
* <h3>types of bootstrap methods</h3>
|
||||
* <h2>types of bootstrap methods</h2>
|
||||
* As long as each bootstrap method can be correctly invoked
|
||||
* by {@code MethodHandle.invoke}, its detailed type is arbitrary.
|
||||
* For example, the first argument could be {@code Object}
|
||||
|
@ -130,6 +130,7 @@ public interface AnnotatedElement {
|
||||
* Returns this element's annotation for the specified type if
|
||||
* such an annotation is present, else null.
|
||||
*
|
||||
* @param <T> the type of the annotation to query for and return if present
|
||||
* @param annotationClass the Class object corresponding to the
|
||||
* annotation type
|
||||
* @return this element's annotation for the specified annotation type if
|
||||
@ -154,6 +155,7 @@ public interface AnnotatedElement {
|
||||
* The caller of this method is free to modify the returned array; it will
|
||||
* have no effect on the arrays returned to other callers.
|
||||
*
|
||||
* @param <T> the type of the annotation to query for and return if present
|
||||
* @param annotationClass the Class object corresponding to the
|
||||
* annotation type
|
||||
* @return all this element's annotations for the specified annotation type if
|
||||
@ -184,6 +186,7 @@ public interface AnnotatedElement {
|
||||
* This method ignores inherited annotations. (Returns null if no
|
||||
* annotations are directly present on this element.)
|
||||
*
|
||||
* @param <T> the type of the annotation to query for and return if present
|
||||
* @param annotationClass the Class object corresponding to the
|
||||
* annotation type
|
||||
* @return this element's annotation for the specified annotation type if
|
||||
@ -209,6 +212,8 @@ public interface AnnotatedElement {
|
||||
* The caller of this method is free to modify the returned array; it will
|
||||
* have no effect on the arrays returned to other callers.
|
||||
*
|
||||
* @param <T> the type of the annotation to query for and return
|
||||
* if directly present
|
||||
* @param annotationClass the Class object corresponding to the
|
||||
* annotation type
|
||||
* @return all this element's annotations for the specified annotation type if
|
||||
|
@ -384,6 +384,8 @@ public abstract class Executable extends AccessibleObject
|
||||
/**
|
||||
* Returns a string describing this {@code Executable}, including
|
||||
* any type parameters.
|
||||
* @return a string describing this {@code Executable}, including
|
||||
* any type parameters
|
||||
*/
|
||||
public abstract String toGenericString();
|
||||
|
||||
@ -496,6 +498,8 @@ public abstract class Executable extends AccessibleObject
|
||||
* If this Executable represents a method, the AnnotatedType object
|
||||
* represents the use of a type to specify the return type of the method.
|
||||
*
|
||||
* @return an object representing the return type of this method
|
||||
* or constructor
|
||||
* @since 1.8
|
||||
*/
|
||||
public abstract AnnotatedType getAnnotatedReturnType();
|
||||
@ -531,6 +535,9 @@ public abstract class Executable extends AccessibleObject
|
||||
*
|
||||
* Returns null if this Executable represents a static method.
|
||||
*
|
||||
* @return an object representing the receiver type of the
|
||||
* method or constructor represented by this Executable
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public AnnotatedType getAnnotatedReceiverType() {
|
||||
@ -553,6 +560,9 @@ public abstract class Executable extends AccessibleObject
|
||||
* Returns an array of length 0 if the method/constructor declares no
|
||||
* parameters.
|
||||
*
|
||||
* @return an array of objects representing the types of the
|
||||
* formal parameters of this method or constructor
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public AnnotatedType[] getAnnotatedParameterTypes() {
|
||||
@ -575,6 +585,9 @@ public abstract class Executable extends AccessibleObject
|
||||
* Returns an array of length 0 if the method/constructor declares no
|
||||
* exceptions.
|
||||
*
|
||||
* @return an array of objects representing the declared
|
||||
* exceptions of this method or constructor
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public AnnotatedType[] getAnnotatedExceptionTypes() {
|
||||
|
@ -1151,6 +1151,8 @@ class Field extends AccessibleObject implements Member {
|
||||
/**
|
||||
* Returns an AnnotatedType object that represents the use of a type to specify
|
||||
* the declared type of the field represented by this Field.
|
||||
* @return an object representing the declared type of the field
|
||||
* represented by this Field
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
|
@ -152,6 +152,8 @@ public final class Parameter implements AnnotatedElement {
|
||||
* defined in a class file, then that name will be returned by
|
||||
* this method. Otherwise, this method will synthesize a name of
|
||||
* the form argN, where N is the index of the parameter.
|
||||
*
|
||||
* @return the name of the parameter
|
||||
*/
|
||||
public String getName() {
|
||||
// Note: empty strings as paramete names are now outlawed.
|
||||
|
@ -95,6 +95,7 @@ public interface TypeVariable<D extends GenericDeclaration> extends Type, Annota
|
||||
*
|
||||
* Returns an array of length 0 if the type parameter declares no bounds.
|
||||
*
|
||||
* @return an array of objects representing the upper bounds of the type variable
|
||||
* @since 1.8
|
||||
*/
|
||||
AnnotatedType[] getAnnotatedBounds();
|
||||
|
@ -2572,6 +2572,9 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
|
||||
* ({@code this} * 10<sup>n</sup>). The scale of
|
||||
* the result is {@code (this.scale() - n)}.
|
||||
*
|
||||
* @param n the exponent power of ten to scale by
|
||||
* @return a BigDecimal whose numerical value is equal to
|
||||
* ({@code this} * 10<sup>n</sup>)
|
||||
* @throws ArithmeticException if the scale would be
|
||||
* outside the range of a 32-bit integer.
|
||||
*
|
||||
|
@ -33,8 +33,11 @@ import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.ObjectStreamField;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Random;
|
||||
import sun.misc.DoubleConsts;
|
||||
import sun.misc.FloatConsts;
|
||||
|
||||
/**
|
||||
* Immutable arbitrary-precision integers. All operations behave as if
|
||||
@ -211,6 +214,16 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
|
||||
*/
|
||||
private static final int TOOM_COOK_SQUARE_THRESHOLD = 140;
|
||||
|
||||
/**
|
||||
* The threshold value for using Schoenhage recursive base conversion. If
|
||||
* the number of ints in the number are larger than this value,
|
||||
* the Schoenhage algorithm will be used. In practice, it appears that the
|
||||
* Schoenhage routine is faster for any threshold down to 2, and is
|
||||
* relatively flat for thresholds between 2-25, so this choice may be
|
||||
* varied within this range for very small effect.
|
||||
*/
|
||||
private static final int SCHOENHAGE_BASE_CONVERSION_THRESHOLD = 8;
|
||||
|
||||
//Constructors
|
||||
|
||||
/**
|
||||
@ -1024,6 +1037,19 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
|
||||
private static BigInteger posConst[] = new BigInteger[MAX_CONSTANT+1];
|
||||
private static BigInteger negConst[] = new BigInteger[MAX_CONSTANT+1];
|
||||
|
||||
/**
|
||||
* The cache of powers of each radix. This allows us to not have to
|
||||
* recalculate powers of radix^(2^n) more than once. This speeds
|
||||
* Schoenhage recursive base conversion significantly.
|
||||
*/
|
||||
private static volatile BigInteger[][] powerCache;
|
||||
|
||||
/** The cache of logarithms of radices for base conversion. */
|
||||
private static final double[] logCache;
|
||||
|
||||
/** The natural log of 2. This is used in computing cache indices. */
|
||||
private static final double LOG_TWO = Math.log(2.0);
|
||||
|
||||
static {
|
||||
for (int i = 1; i <= MAX_CONSTANT; i++) {
|
||||
int[] magnitude = new int[1];
|
||||
@ -1031,6 +1057,20 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
|
||||
posConst[i] = new BigInteger(magnitude, 1);
|
||||
negConst[i] = new BigInteger(magnitude, -1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the cache of radix^(2^x) values used for base conversion
|
||||
* with just the very first value. Additional values will be created
|
||||
* on demand.
|
||||
*/
|
||||
powerCache = new BigInteger[Character.MAX_RADIX+1][];
|
||||
logCache = new double[Character.MAX_RADIX+1];
|
||||
|
||||
for (int i=Character.MIN_RADIX; i<=Character.MAX_RADIX; i++)
|
||||
{
|
||||
powerCache[i] = new BigInteger[] { BigInteger.valueOf(i) };
|
||||
logCache[i] = Math.log(i);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1355,7 +1395,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
|
||||
if ((xlen < TOOM_COOK_THRESHOLD) && (ylen < TOOM_COOK_THRESHOLD))
|
||||
return multiplyKaratsuba(this, val);
|
||||
else
|
||||
return multiplyToomCook3(this, val);
|
||||
return multiplyToomCook3(this, val);
|
||||
}
|
||||
|
||||
private static BigInteger multiplyByInt(int[] x, int y, int sign) {
|
||||
@ -3297,6 +3337,28 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
|
||||
if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
|
||||
radix = 10;
|
||||
|
||||
// If it's small enough, use smallToString.
|
||||
if (mag.length <= SCHOENHAGE_BASE_CONVERSION_THRESHOLD)
|
||||
return smallToString(radix);
|
||||
|
||||
// Otherwise use recursive toString, which requires positive arguments.
|
||||
// The results will be concatenated into this StringBuilder
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (signum < 0) {
|
||||
toString(this.negate(), sb, radix, 0);
|
||||
sb.insert(0, '-');
|
||||
}
|
||||
else
|
||||
toString(this, sb, radix, 0);
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/** This method is used to perform toString when arguments are small. */
|
||||
private String smallToString(int radix) {
|
||||
if (signum == 0)
|
||||
return "0";
|
||||
|
||||
// Compute upper bound on number of digit groups and allocate space
|
||||
int maxNumDigitGroups = (4*mag.length + 6)/7;
|
||||
String digitGroup[] = new String[maxNumDigitGroups];
|
||||
@ -3335,6 +3397,81 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the specified BigInteger to a string and appends to
|
||||
* <code>sb</code>. This implements the recursive Schoenhage algorithm
|
||||
* for base conversions.
|
||||
* <p/>
|
||||
* See Knuth, Donald, _The Art of Computer Programming_, Vol. 2,
|
||||
* Answers to Exercises (4.4) Question 14.
|
||||
*
|
||||
* @param u The number to convert to a string.
|
||||
* @param sb The StringBuilder that will be appended to in place.
|
||||
* @param radix The base to convert to.
|
||||
* @param digits The minimum number of digits to pad to.
|
||||
*/
|
||||
private static void toString(BigInteger u, StringBuilder sb, int radix,
|
||||
int digits) {
|
||||
/* If we're smaller than a certain threshold, use the smallToString
|
||||
method, padding with leading zeroes when necessary. */
|
||||
if (u.mag.length <= SCHOENHAGE_BASE_CONVERSION_THRESHOLD) {
|
||||
String s = u.smallToString(radix);
|
||||
|
||||
// Pad with internal zeros if necessary.
|
||||
// Don't pad if we're at the beginning of the string.
|
||||
if ((s.length() < digits) && (sb.length() > 0))
|
||||
for (int i=s.length(); i<digits; i++) // May be a faster way to
|
||||
sb.append('0'); // do this?
|
||||
|
||||
sb.append(s);
|
||||
return;
|
||||
}
|
||||
|
||||
int b, n;
|
||||
b = u.bitLength();
|
||||
|
||||
// Calculate a value for n in the equation radix^(2^n) = u
|
||||
// and subtract 1 from that value. This is used to find the
|
||||
// cache index that contains the best value to divide u.
|
||||
n = (int) Math.round(Math.log(b * LOG_TWO / logCache[radix]) / LOG_TWO - 1.0);
|
||||
BigInteger v = getRadixConversionCache(radix, n);
|
||||
BigInteger[] results;
|
||||
results = u.divideAndRemainder(v);
|
||||
|
||||
int expectedDigits = 1 << n;
|
||||
|
||||
// Now recursively build the two halves of each number.
|
||||
toString(results[0], sb, radix, digits-expectedDigits);
|
||||
toString(results[1], sb, radix, expectedDigits);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value radix^(2^exponent) from the cache.
|
||||
* If this value doesn't already exist in the cache, it is added.
|
||||
* <p/>
|
||||
* This could be changed to a more complicated caching method using
|
||||
* <code>Future</code>.
|
||||
*/
|
||||
private static BigInteger getRadixConversionCache(int radix, int exponent) {
|
||||
BigInteger[] cacheLine = powerCache[radix]; // volatile read
|
||||
if (exponent < cacheLine.length) {
|
||||
return cacheLine[exponent];
|
||||
}
|
||||
|
||||
int oldLength = cacheLine.length;
|
||||
cacheLine = Arrays.copyOf(cacheLine, exponent + 1);
|
||||
for (int i = oldLength; i <= exponent; i++) {
|
||||
cacheLine[i] = cacheLine[i - 1].pow(2);
|
||||
}
|
||||
|
||||
BigInteger[][] pc = powerCache; // volatile read again
|
||||
if (exponent >= pc[radix].length) {
|
||||
pc = pc.clone();
|
||||
pc[radix] = cacheLine;
|
||||
powerCache = pc; // volatile write, publish
|
||||
}
|
||||
return cacheLine[exponent];
|
||||
}
|
||||
|
||||
/* zero[i] is a string of i consecutive zeros. */
|
||||
private static String zeros[] = new String[64];
|
||||
@ -3452,8 +3589,72 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
|
||||
* @return this BigInteger converted to a {@code float}.
|
||||
*/
|
||||
public float floatValue() {
|
||||
// Somewhat inefficient, but guaranteed to work.
|
||||
return Float.parseFloat(this.toString());
|
||||
if (signum == 0) {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
int exponent = ((mag.length - 1) << 5) + bitLengthForInt(mag[0]) - 1;
|
||||
|
||||
// exponent == floor(log2(abs(this)))
|
||||
if (exponent < Long.SIZE - 1) {
|
||||
return longValue();
|
||||
} else if (exponent > Float.MAX_EXPONENT) {
|
||||
return signum > 0 ? Float.POSITIVE_INFINITY : Float.NEGATIVE_INFINITY;
|
||||
}
|
||||
|
||||
/*
|
||||
* We need the top SIGNIFICAND_WIDTH bits, including the "implicit"
|
||||
* one bit. To make rounding easier, we pick out the top
|
||||
* SIGNIFICAND_WIDTH + 1 bits, so we have one to help us round up or
|
||||
* down. twiceSignifFloor will contain the top SIGNIFICAND_WIDTH + 1
|
||||
* bits, and signifFloor the top SIGNIFICAND_WIDTH.
|
||||
*
|
||||
* It helps to consider the real number signif = abs(this) *
|
||||
* 2^(SIGNIFICAND_WIDTH - 1 - exponent).
|
||||
*/
|
||||
int shift = exponent - FloatConsts.SIGNIFICAND_WIDTH;
|
||||
|
||||
int twiceSignifFloor;
|
||||
// twiceSignifFloor will be == abs().shiftRight(shift).intValue()
|
||||
// We do the shift into an int directly to improve performance.
|
||||
|
||||
int nBits = shift & 0x1f;
|
||||
int nBits2 = 32 - nBits;
|
||||
|
||||
if (nBits == 0) {
|
||||
twiceSignifFloor = mag[0];
|
||||
} else {
|
||||
twiceSignifFloor = mag[0] >>> nBits;
|
||||
if (twiceSignifFloor == 0) {
|
||||
twiceSignifFloor = (mag[0] << nBits2) | (mag[1] >>> nBits);
|
||||
}
|
||||
}
|
||||
|
||||
int signifFloor = twiceSignifFloor >> 1;
|
||||
signifFloor &= FloatConsts.SIGNIF_BIT_MASK; // remove the implied bit
|
||||
|
||||
/*
|
||||
* We round up if either the fractional part of signif is strictly
|
||||
* greater than 0.5 (which is true if the 0.5 bit is set and any lower
|
||||
* bit is set), or if the fractional part of signif is >= 0.5 and
|
||||
* signifFloor is odd (which is true if both the 0.5 bit and the 1 bit
|
||||
* are set). This is equivalent to the desired HALF_EVEN rounding.
|
||||
*/
|
||||
boolean increment = (twiceSignifFloor & 1) != 0
|
||||
&& ((signifFloor & 1) != 0 || abs().getLowestSetBit() < shift);
|
||||
int signifRounded = increment ? signifFloor + 1 : signifFloor;
|
||||
int bits = ((exponent + FloatConsts.EXP_BIAS))
|
||||
<< (FloatConsts.SIGNIFICAND_WIDTH - 1);
|
||||
bits += signifRounded;
|
||||
/*
|
||||
* If signifRounded == 2^24, we'd need to set all of the significand
|
||||
* bits to zero and add 1 to the exponent. This is exactly the behavior
|
||||
* we get from just adding signifRounded to bits directly. If the
|
||||
* exponent is Float.MAX_EXPONENT, we round up (correctly) to
|
||||
* Float.POSITIVE_INFINITY.
|
||||
*/
|
||||
bits |= signum & FloatConsts.SIGN_BIT_MASK;
|
||||
return Float.intBitsToFloat(bits);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -3472,8 +3673,80 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
|
||||
* @return this BigInteger converted to a {@code double}.
|
||||
*/
|
||||
public double doubleValue() {
|
||||
// Somewhat inefficient, but guaranteed to work.
|
||||
return Double.parseDouble(this.toString());
|
||||
if (signum == 0) {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
int exponent = ((mag.length - 1) << 5) + bitLengthForInt(mag[0]) - 1;
|
||||
|
||||
// exponent == floor(log2(abs(this))Double)
|
||||
if (exponent < Long.SIZE - 1) {
|
||||
return longValue();
|
||||
} else if (exponent > Double.MAX_EXPONENT) {
|
||||
return signum > 0 ? Double.POSITIVE_INFINITY : Double.NEGATIVE_INFINITY;
|
||||
}
|
||||
|
||||
/*
|
||||
* We need the top SIGNIFICAND_WIDTH bits, including the "implicit"
|
||||
* one bit. To make rounding easier, we pick out the top
|
||||
* SIGNIFICAND_WIDTH + 1 bits, so we have one to help us round up or
|
||||
* down. twiceSignifFloor will contain the top SIGNIFICAND_WIDTH + 1
|
||||
* bits, and signifFloor the top SIGNIFICAND_WIDTH.
|
||||
*
|
||||
* It helps to consider the real number signif = abs(this) *
|
||||
* 2^(SIGNIFICAND_WIDTH - 1 - exponent).
|
||||
*/
|
||||
int shift = exponent - DoubleConsts.SIGNIFICAND_WIDTH;
|
||||
|
||||
long twiceSignifFloor;
|
||||
// twiceSignifFloor will be == abs().shiftRight(shift).longValue()
|
||||
// We do the shift into a long directly to improve performance.
|
||||
|
||||
int nBits = shift & 0x1f;
|
||||
int nBits2 = 32 - nBits;
|
||||
|
||||
int highBits;
|
||||
int lowBits;
|
||||
if (nBits == 0) {
|
||||
highBits = mag[0];
|
||||
lowBits = mag[1];
|
||||
} else {
|
||||
highBits = mag[0] >>> nBits;
|
||||
lowBits = (mag[0] << nBits2) | (mag[1] >>> nBits);
|
||||
if (highBits == 0) {
|
||||
highBits = lowBits;
|
||||
lowBits = (mag[1] << nBits2) | (mag[2] >>> nBits);
|
||||
}
|
||||
}
|
||||
|
||||
twiceSignifFloor = ((highBits & LONG_MASK) << 32)
|
||||
| (lowBits & LONG_MASK);
|
||||
|
||||
long signifFloor = twiceSignifFloor >> 1;
|
||||
signifFloor &= DoubleConsts.SIGNIF_BIT_MASK; // remove the implied bit
|
||||
|
||||
/*
|
||||
* We round up if either the fractional part of signif is strictly
|
||||
* greater than 0.5 (which is true if the 0.5 bit is set and any lower
|
||||
* bit is set), or if the fractional part of signif is >= 0.5 and
|
||||
* signifFloor is odd (which is true if both the 0.5 bit and the 1 bit
|
||||
* are set). This is equivalent to the desired HALF_EVEN rounding.
|
||||
*/
|
||||
boolean increment = (twiceSignifFloor & 1) != 0
|
||||
&& ((signifFloor & 1) != 0 || abs().getLowestSetBit() < shift);
|
||||
long signifRounded = increment ? signifFloor + 1 : signifFloor;
|
||||
long bits = (long) ((exponent + DoubleConsts.EXP_BIAS))
|
||||
<< (DoubleConsts.SIGNIFICAND_WIDTH - 1);
|
||||
bits += signifRounded;
|
||||
/*
|
||||
* If signifRounded == 2^53, we'd need to set all of the significand
|
||||
* bits to zero and add 1 to the exponent. This is exactly the behavior
|
||||
* we get from just adding signifRounded to bits directly. If the
|
||||
* exponent is Double.MAX_EXPONENT, we round up (correctly) to
|
||||
* Double.POSITIVE_INFINITY.
|
||||
*/
|
||||
bits |= signum & DoubleConsts.SIGN_BIT_MASK;
|
||||
return Double.longBitsToDouble(bits);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -101,6 +101,7 @@ public enum RoundingMode {
|
||||
*
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode UP Examples</b></caption>
|
||||
*<tr valign=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>
|
||||
@ -124,6 +125,7 @@ public enum RoundingMode {
|
||||
*
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode DOWN Examples</b></caption>
|
||||
*<tr valign=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>
|
||||
@ -148,6 +150,7 @@ public enum RoundingMode {
|
||||
*
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode CEILING Examples</b></caption>
|
||||
*<tr valign=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>
|
||||
@ -172,6 +175,7 @@ public enum RoundingMode {
|
||||
*
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode FLOOR Examples</b></caption>
|
||||
*<tr valign=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>
|
||||
@ -198,6 +202,7 @@ public enum RoundingMode {
|
||||
*
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode HALF_UP Examples</b></caption>
|
||||
*<tr valign=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>
|
||||
@ -223,6 +228,7 @@ public enum RoundingMode {
|
||||
*
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode HALF_DOWN Examples</b></caption>
|
||||
*<tr valign=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>
|
||||
@ -255,6 +261,7 @@ public enum RoundingMode {
|
||||
*
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode HALF_EVEN Examples</b></caption>
|
||||
*<tr valign=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>
|
||||
@ -278,6 +285,7 @@ public enum RoundingMode {
|
||||
* {@code ArithmeticException} is thrown.
|
||||
*<p>Example:
|
||||
*<table border>
|
||||
* <caption><b>Rounding mode UNNECESSARY Examples</b></caption>
|
||||
*<tr valign=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>
|
||||
|
@ -52,7 +52,7 @@ import java.util.Spliterator;
|
||||
* <p> There is one subclass of this class for each non-boolean primitive type.
|
||||
*
|
||||
*
|
||||
* <h4> Transferring data </h4>
|
||||
* <h2> Transferring data </h2>
|
||||
*
|
||||
* <p> Each subclass of this class defines two categories of <i>get</i> and
|
||||
* <i>put</i> operations: </p>
|
||||
@ -78,7 +78,7 @@ import java.util.Spliterator;
|
||||
* current position.
|
||||
*
|
||||
*
|
||||
* <h4> Marking and resetting </h4>
|
||||
* <h2> Marking and resetting </h2>
|
||||
*
|
||||
* <p> A buffer's <i>mark</i> is the index to which its position will be reset
|
||||
* when the {@link #reset reset} method is invoked. The mark is not always
|
||||
@ -89,7 +89,7 @@ import java.util.Spliterator;
|
||||
* {@link InvalidMarkException} to be thrown.
|
||||
*
|
||||
*
|
||||
* <h4> Invariants </h4>
|
||||
* <h2> Invariants </h2>
|
||||
*
|
||||
* <p> The following invariant holds for the mark, position, limit, and
|
||||
* capacity values:
|
||||
@ -109,7 +109,7 @@ import java.util.Spliterator;
|
||||
* to zero.
|
||||
*
|
||||
*
|
||||
* <h4> Clearing, flipping, and rewinding </h4>
|
||||
* <h2> Clearing, flipping, and rewinding </h2>
|
||||
*
|
||||
* <p> In addition to methods for accessing the position, limit, and capacity
|
||||
* values and for marking and resetting, this class also defines the following
|
||||
@ -132,7 +132,7 @@ import java.util.Spliterator;
|
||||
* </ul>
|
||||
*
|
||||
*
|
||||
* <h4> Read-only buffers </h4>
|
||||
* <h2> Read-only buffers </h2>
|
||||
*
|
||||
* <p> Every buffer is readable, but not every buffer is writable. The
|
||||
* mutation methods of each buffer class are specified as <i>optional
|
||||
@ -143,14 +143,14 @@ import java.util.Spliterator;
|
||||
* {@link #isReadOnly isReadOnly} method.
|
||||
*
|
||||
*
|
||||
* <h4> Thread safety </h4>
|
||||
* <h2> Thread safety </h2>
|
||||
*
|
||||
* <p> Buffers are not safe for use by multiple concurrent threads. If a
|
||||
* buffer is to be used by more than one thread then access to the buffer
|
||||
* should be controlled by appropriate synchronization.
|
||||
*
|
||||
*
|
||||
* <h4> Invocation chaining </h4>
|
||||
* <h2> Invocation chaining </h2>
|
||||
*
|
||||
* <p> Methods in this class that do not otherwise have a value to return are
|
||||
* specified to return the buffer upon which they are invoked. This allows
|
||||
|
@ -45,7 +45,7 @@ import sun.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"><p> All or part of a mapped byte buffer may become
|
||||
* <a name="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
|
||||
|
@ -44,23 +44,23 @@ import java.util.stream.$Streamtype$Stream;
|
||||
*
|
||||
* <ul>
|
||||
*
|
||||
* <li><p> Absolute and relative {@link #get() </code><i>get</i><code>} and
|
||||
* {@link #put($type$) </code><i>put</i><code>} methods that read and write
|
||||
* <li><p> Absolute and relative {@link #get() <i>get</i>} and
|
||||
* {@link #put($type$) <i>put</i>} methods that read and write
|
||||
* single $type$s; </p></li>
|
||||
*
|
||||
* <li><p> Relative {@link #get($type$[]) </code><i>bulk get</i><code>}
|
||||
* <li><p> Relative {@link #get($type$[]) <i>bulk get</i>}
|
||||
* methods that transfer contiguous sequences of $type$s from this buffer
|
||||
* into an array; {#if[!byte]?and}</p></li>
|
||||
*
|
||||
* <li><p> Relative {@link #put($type$[]) </code><i>bulk put</i><code>}
|
||||
* <li><p> Relative {@link #put($type$[]) <i>bulk put</i>}
|
||||
* methods that transfer contiguous sequences of $type$s from $a$
|
||||
* $type$ array{#if[char]?, a string,} or some other $type$
|
||||
* buffer into this buffer;{#if[!byte]? and} </p></li>
|
||||
*
|
||||
#if[byte]
|
||||
*
|
||||
* <li><p> Absolute and relative {@link #getChar() </code><i>get</i><code>}
|
||||
* and {@link #putChar(char) </code><i>put</i><code>} methods that read and
|
||||
* <li><p> Absolute and relative {@link #getChar() <i>get</i>}
|
||||
* and {@link #putChar(char) <i>put</i>} methods that read and
|
||||
* write values of other primitive types, translating them to and from
|
||||
* sequences of bytes in a particular byte order; </p></li>
|
||||
*
|
||||
@ -70,23 +70,23 @@ import java.util.stream.$Streamtype$Stream;
|
||||
*
|
||||
#end[byte]
|
||||
*
|
||||
* <li><p> Methods for {@link #compact </code>compacting<code>}, {@link
|
||||
* #duplicate </code>duplicating<code>}, and {@link #slice
|
||||
* </code>slicing<code>} $a$ $type$ buffer. </p></li>
|
||||
* <li><p> Methods for {@link #compact compacting}, {@link
|
||||
* #duplicate duplicating}, and {@link #slice slicing}
|
||||
* $a$ $type$ buffer. </p></li>
|
||||
*
|
||||
* </ul>
|
||||
*
|
||||
* <p> $Type$ buffers can be created either by {@link #allocate
|
||||
* </code><i>allocation</i><code>}, which allocates space for the buffer's
|
||||
* <i>allocation</i>}, which allocates space for the buffer's
|
||||
*
|
||||
#if[byte]
|
||||
*
|
||||
* content, or by {@link #wrap($type$[]) </code><i>wrapping</i><code>} an
|
||||
* content, or by {@link #wrap($type$[]) <i>wrapping</i>} an
|
||||
* existing $type$ array {#if[char]?or string} into a buffer.
|
||||
*
|
||||
#else[byte]
|
||||
*
|
||||
* content, by {@link #wrap($type$[]) </code><i>wrapping</i><code>} an existing
|
||||
* content, by {@link #wrap($type$[]) <i>wrapping</i>} an existing
|
||||
* $type$ array {#if[char]?or string} into a buffer, or by creating a
|
||||
* <a href="ByteBuffer.html#views"><i>view</i></a> of an existing byte buffer.
|
||||
*
|
||||
@ -94,8 +94,8 @@ import java.util.stream.$Streamtype$Stream;
|
||||
*
|
||||
#if[byte]
|
||||
*
|
||||
* <a name="direct">
|
||||
* <h4> Direct <i>vs.</i> non-direct buffers </h4>
|
||||
* <a name="direct"></a>
|
||||
* <h2> Direct <i>vs.</i> non-direct buffers </h2>
|
||||
*
|
||||
* <p> A byte buffer is either <i>direct</i> or <i>non-direct</i>. Given a
|
||||
* direct byte buffer, the Java virtual machine will make a best effort to
|
||||
@ -116,7 +116,7 @@ import java.util.stream.$Streamtype$Stream;
|
||||
* buffers only when they yield a measureable gain in program performance.
|
||||
*
|
||||
* <p> A direct byte buffer may also be created by {@link
|
||||
* java.nio.channels.FileChannel#map </code>mapping<code>} a region of a file
|
||||
* java.nio.channels.FileChannel#map mapping} a region of a file
|
||||
* directly into memory. An implementation of the Java platform may optionally
|
||||
* support the creation of direct byte buffers from native code via JNI. If an
|
||||
* instance of one of these kinds of buffers refers to an inaccessible region
|
||||
@ -129,8 +129,8 @@ import java.util.stream.$Streamtype$Stream;
|
||||
* that explicit buffer management can be done in performance-critical code.
|
||||
*
|
||||
*
|
||||
* <a name="bin">
|
||||
* <h4> Access to binary data </h4>
|
||||
* <a name="bin"></a>
|
||||
* <h2> Access to binary data </h2>
|
||||
*
|
||||
* <p> This class defines methods for reading and writing values of all other
|
||||
* primitive types, except <tt>boolean</tt>. Primitive values are translated
|
||||
@ -156,7 +156,7 @@ import java.util.stream.$Streamtype$Stream;
|
||||
* parameters of the absolute <i>get</i> and <i>put</i> methods are in terms of
|
||||
* bytes rather than of the type being read or written.
|
||||
*
|
||||
* <a name="views">
|
||||
* <a name="views"></a>
|
||||
*
|
||||
* <p> For access to homogeneous binary data, that is, sequences of values of
|
||||
* the same type, this class defines methods that can create <i>views</i> of a
|
||||
@ -214,7 +214,7 @@ import java.util.stream.$Streamtype$Stream;
|
||||
#end[char]
|
||||
*
|
||||
#if[byte]
|
||||
* <h4> Invocation chaining </h4>
|
||||
* <h2> Invocation chaining </h2>
|
||||
#end[byte]
|
||||
*
|
||||
* <p> Methods in this class that do not otherwise have a value to return are
|
||||
@ -297,7 +297,7 @@ public abstract class $Type$Buffer
|
||||
* <p> The new buffer's position will be zero, its limit will be its
|
||||
* capacity, its mark will be undefined, and each of its elements will be
|
||||
* initialized to zero. Whether or not it has a
|
||||
* {@link #hasArray </code>backing array<code>} is unspecified.
|
||||
* {@link #hasArray backing array} is unspecified.
|
||||
*
|
||||
* @param capacity
|
||||
* The new buffer's capacity, in $type$s
|
||||
@ -318,9 +318,8 @@ public abstract class $Type$Buffer
|
||||
*
|
||||
* <p> The new buffer's position will be zero, its limit will be its
|
||||
* capacity, its mark will be undefined, and each of its elements will be
|
||||
* initialized to zero. It will have a {@link #array
|
||||
* </code>backing array<code>}, and its {@link #arrayOffset </code>array
|
||||
* offset<code>} will be zero.
|
||||
* initialized to zero. It will have a {@link #array backing array},
|
||||
* and its {@link #arrayOffset array offset} will be zero.
|
||||
*
|
||||
* @param capacity
|
||||
* The new buffer's capacity, in $type$s
|
||||
@ -344,8 +343,8 @@ public abstract class $Type$Buffer
|
||||
* and vice versa. The new buffer's capacity will be
|
||||
* <tt>array.length</tt>, its position will be <tt>offset</tt>, its limit
|
||||
* will be <tt>offset + length</tt>, and its mark will be undefined. Its
|
||||
* {@link #array </code>backing array<code>} will be the given array, and
|
||||
* its {@link #arrayOffset </code>array offset<code>} will be zero. </p>
|
||||
* {@link #array backing array} will be the given array, and
|
||||
* its {@link #arrayOffset array offset} will be zero. </p>
|
||||
*
|
||||
* @param array
|
||||
* The array that will back the new buffer
|
||||
@ -384,8 +383,8 @@ public abstract class $Type$Buffer
|
||||
* that is, modifications to the buffer will cause the array to be modified
|
||||
* and vice versa. The new buffer's capacity and limit will be
|
||||
* <tt>array.length</tt>, its position will be zero, and its mark will be
|
||||
* undefined. Its {@link #array </code>backing array<code>} will be the
|
||||
* given array, and its {@link #arrayOffset </code>array offset<code>} will
|
||||
* undefined. Its {@link #array backing array} will be the
|
||||
* given array, and its {@link #arrayOffset array offset>} will
|
||||
* be zero. </p>
|
||||
*
|
||||
* @param array
|
||||
@ -703,6 +702,9 @@ public abstract class $Type$Buffer
|
||||
* <pre>
|
||||
* src.get(a, 0, a.length) </pre>
|
||||
*
|
||||
* @param dst
|
||||
* The destination array
|
||||
*
|
||||
* @return This buffer
|
||||
*
|
||||
* @throws BufferUnderflowException
|
||||
@ -842,6 +844,9 @@ public abstract class $Type$Buffer
|
||||
* <pre>
|
||||
* dst.put(a, 0, a.length) </pre>
|
||||
*
|
||||
* @param src
|
||||
* The source array
|
||||
*
|
||||
* @return This buffer
|
||||
*
|
||||
* @throws BufferOverflowException
|
||||
@ -930,6 +935,9 @@ public abstract class $Type$Buffer
|
||||
* <pre>
|
||||
* dst.put(s, 0, s.length()) </pre>
|
||||
*
|
||||
* @param src
|
||||
* The source string
|
||||
*
|
||||
* @return This buffer
|
||||
*
|
||||
* @throws BufferOverflowException
|
||||
@ -1419,7 +1427,7 @@ public abstract class $Type$Buffer
|
||||
*
|
||||
* <p> The byte order of $a$ $type$ buffer created by allocation or by
|
||||
* wrapping an existing <tt>$type$</tt> array is the {@link
|
||||
* ByteOrder#nativeOrder </code>native order<code>} of the underlying
|
||||
* ByteOrder#nativeOrder native order} of the underlying
|
||||
* hardware. The byte order of $a$ $type$ buffer created as a <a
|
||||
* href="ByteBuffer.html#views">view</a> of a byte buffer is that of the
|
||||
* byte buffer at the moment that the view is created. </p>
|
||||
|
@ -87,6 +87,8 @@ public interface AsynchronousByteChannel
|
||||
* initiates a read operation before a previous read operation has
|
||||
* completed then a {@link ReadPendingException} will be thrown.
|
||||
*
|
||||
* @param <A>
|
||||
* The type of the attachment
|
||||
* @param dst
|
||||
* The buffer into which bytes are to be transferred
|
||||
* @param attachment
|
||||
@ -166,6 +168,8 @@ public interface AsynchronousByteChannel
|
||||
* initiates a write operation before a previous write operation has
|
||||
* completed then a {@link WritePendingException} will be thrown.
|
||||
*
|
||||
* @param <A>
|
||||
* The type of the attachment
|
||||
* @param src
|
||||
* The buffer from which bytes are to be retrieved
|
||||
* @param attachment
|
||||
|
@ -61,7 +61,7 @@ import java.util.concurrent.Future; // javadoc
|
||||
* may not allow more than one read and one write operation to be outstanding at
|
||||
* any given time.
|
||||
*
|
||||
* <h4>Cancellation</h4>
|
||||
* <h2>Cancellation</h2>
|
||||
*
|
||||
* <p> The {@code Future} interface defines the {@link Future#cancel cancel}
|
||||
* method to cancel execution. This causes all threads waiting on the result of
|
||||
|
@ -60,7 +60,7 @@ import java.util.concurrent.TimeUnit;
|
||||
* default group is not configured then the pooled threads of the default group
|
||||
* are {@link Thread#isDaemon daemon} threads.
|
||||
*
|
||||
* <table border>
|
||||
* <table border summary="System properties">
|
||||
* <tr>
|
||||
* <th>System property</th>
|
||||
* <th>Description</th>
|
||||
@ -89,7 +89,7 @@ import java.util.concurrent.TimeUnit;
|
||||
* </tr>
|
||||
* </table>
|
||||
*
|
||||
* <a name="threading"><h4>Threading</h4></a>
|
||||
* <a name="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
|
||||
@ -104,7 +104,7 @@ import java.util.concurrent.TimeUnit;
|
||||
* handler directly by the initiating thread (see {@link
|
||||
* AsynchronousServerSocketChannel#accept(Object,CompletionHandler) accept}).
|
||||
*
|
||||
* <a name="shutdown"><h4>Shutdown and Termination</h4></a>
|
||||
* <a name="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;
|
||||
|
@ -425,6 +425,8 @@ public abstract class AsynchronousFileChannel
|
||||
* They are not suitable for controlling access to a file by multiple
|
||||
* threads within the same virtual machine.
|
||||
*
|
||||
* @param <A>
|
||||
* The type of the attachment
|
||||
* @param position
|
||||
* The position at which the locked region is to start; must be
|
||||
* non-negative
|
||||
@ -473,6 +475,8 @@ public abstract class AsynchronousFileChannel
|
||||
* ch.{@link #lock(long,long,boolean,Object,CompletionHandler) lock}(0L, Long.MAX_VALUE, false, att, handler)
|
||||
* </pre>
|
||||
*
|
||||
* @param <A>
|
||||
* The type of the attachment
|
||||
* @param attachment
|
||||
* The object to attach to the I/O operation; can be {@code null}
|
||||
* @param handler
|
||||
@ -652,6 +656,8 @@ public abstract class AsynchronousFileChannel
|
||||
* If the given file position is greater than the file's size at the time
|
||||
* that the read is attempted then no bytes are read.
|
||||
*
|
||||
* @param <A>
|
||||
* The type of the attachment
|
||||
* @param dst
|
||||
* The buffer into which bytes are to be transferred
|
||||
* @param position
|
||||
@ -716,6 +722,8 @@ public abstract class AsynchronousFileChannel
|
||||
* bytes; the values of any bytes between the previous end-of-file and the
|
||||
* newly-written bytes are unspecified.
|
||||
*
|
||||
* @param <A>
|
||||
* The type of the attachment
|
||||
* @param src
|
||||
* The buffer from which bytes are to be transferred
|
||||
* @param position
|
||||
|
@ -52,7 +52,7 @@ import java.io.IOException;
|
||||
* <p> Socket options are configured using the {@link #setOption(SocketOption,Object)
|
||||
* setOption} method. Channels of this type support the following options:
|
||||
* <blockquote>
|
||||
* <table border>
|
||||
* <table border summary="Socket options">
|
||||
* <tr>
|
||||
* <th>Option Name</th>
|
||||
* <th>Description</th>
|
||||
@ -98,6 +98,9 @@ public abstract class AsynchronousServerSocketChannel
|
||||
|
||||
/**
|
||||
* Initializes a new instance of this class.
|
||||
*
|
||||
* @param provider
|
||||
* The provider that created this channel
|
||||
*/
|
||||
protected AsynchronousServerSocketChannel(AsynchronousChannelProvider provider) {
|
||||
this.provider = provider;
|
||||
@ -105,6 +108,8 @@ public abstract class AsynchronousServerSocketChannel
|
||||
|
||||
/**
|
||||
* Returns the provider that created this channel.
|
||||
*
|
||||
* @return The provider that created this channel
|
||||
*/
|
||||
public final AsynchronousChannelProvider provider() {
|
||||
return provider;
|
||||
@ -263,6 +268,8 @@ public abstract class AsynchronousServerSocketChannel
|
||||
* the connection is closed and the operation completes with a {@link
|
||||
* SecurityException}.
|
||||
*
|
||||
* @param <A>
|
||||
* The type of the attachment
|
||||
* @param attachment
|
||||
* The object to attach to the I/O operation; can be {@code null}
|
||||
* @param handler
|
||||
|
@ -62,7 +62,7 @@ import java.nio.ByteBuffer;
|
||||
* <p> Socket options are configured using the {@link #setOption(SocketOption,Object)
|
||||
* setOption} method. Asynchronous socket channels support the following options:
|
||||
* <blockquote>
|
||||
* <table border>
|
||||
* <table border summary="Socket options">
|
||||
* <tr>
|
||||
* <th>Option Name</th>
|
||||
* <th>Description</th>
|
||||
@ -91,7 +91,7 @@ import java.nio.ByteBuffer;
|
||||
* </blockquote>
|
||||
* Additional (implementation specific) options may also be supported.
|
||||
*
|
||||
* <h4>Timeouts</h4>
|
||||
* <h2>Timeouts</h2>
|
||||
*
|
||||
* <p> The {@link #read(ByteBuffer,long,TimeUnit,Object,CompletionHandler) read}
|
||||
* and {@link #write(ByteBuffer,long,TimeUnit,Object,CompletionHandler) write}
|
||||
@ -123,6 +123,9 @@ public abstract class AsynchronousSocketChannel
|
||||
|
||||
/**
|
||||
* Initializes a new instance of this class.
|
||||
*
|
||||
* @param provider
|
||||
* The provider that created this channel
|
||||
*/
|
||||
protected AsynchronousSocketChannel(AsynchronousChannelProvider provider) {
|
||||
this.provider = provider;
|
||||
@ -130,6 +133,8 @@ public abstract class AsynchronousSocketChannel
|
||||
|
||||
/**
|
||||
* Returns the provider that created this channel.
|
||||
*
|
||||
* @return The provider that created this channel
|
||||
*/
|
||||
public final AsynchronousChannelProvider provider() {
|
||||
return provider;
|
||||
@ -287,6 +292,8 @@ public abstract class AsynchronousSocketChannel
|
||||
* java.lang.SecurityManager#checkConnect checkConnect} method permits
|
||||
* connecting to the address and port number of the given remote endpoint.
|
||||
*
|
||||
* @param <A>
|
||||
* The type of the attachment
|
||||
* @param remote
|
||||
* The remote address to which this channel is to be connected
|
||||
* @param attachment
|
||||
@ -365,6 +372,8 @@ public abstract class AsynchronousSocketChannel
|
||||
* AsynchronousByteChannel#read(ByteBuffer,Object,CompletionHandler)}
|
||||
* method.
|
||||
*
|
||||
* @param <A>
|
||||
* The type of the attachment
|
||||
* @param dst
|
||||
* The buffer into which bytes are to be transferred
|
||||
* @param timeout
|
||||
@ -461,6 +470,8 @@ public abstract class AsynchronousSocketChannel
|
||||
* read from the channel will cause an unspecific runtime exception to be
|
||||
* thrown.
|
||||
*
|
||||
* @param <A>
|
||||
* The type of the attachment
|
||||
* @param dsts
|
||||
* The buffers into which bytes are to be transferred
|
||||
* @param offset
|
||||
@ -520,6 +531,8 @@ public abstract class AsynchronousSocketChannel
|
||||
* AsynchronousByteChannel#write(ByteBuffer,Object,CompletionHandler)}
|
||||
* method.
|
||||
*
|
||||
* @param <A>
|
||||
* The type of the attachment
|
||||
* @param src
|
||||
* The buffer from which bytes are to be retrieved
|
||||
* @param timeout
|
||||
@ -610,6 +623,8 @@ public abstract class AsynchronousSocketChannel
|
||||
* to write to the channel will cause an unspecific runtime exception to be
|
||||
* thrown.
|
||||
*
|
||||
* @param <A>
|
||||
* The type of the attachment
|
||||
* @param srcs
|
||||
* The buffers from which bytes are to be retrieved
|
||||
* @param offset
|
||||
|
@ -57,7 +57,7 @@ import java.nio.channels.spi.SelectorProvider;
|
||||
* setOption} method. A datagram channel to an Internet Protocol socket supports
|
||||
* the following options:
|
||||
* <blockquote>
|
||||
* <table border>
|
||||
* <table border summary="Socket options">
|
||||
* <tr>
|
||||
* <th>Option Name</th>
|
||||
* <th>Description</th>
|
||||
@ -117,6 +117,9 @@ public abstract class DatagramChannel
|
||||
|
||||
/**
|
||||
* Initializes a new instance of this class.
|
||||
*
|
||||
* @param provider
|
||||
* The provider that created this channel
|
||||
*/
|
||||
protected DatagramChannel(SelectorProvider provider) {
|
||||
super(provider);
|
||||
|
@ -46,7 +46,7 @@ import java.util.Collections;
|
||||
* of bytes that can be read and written and whose current {@link #size
|
||||
* <i>size</i>} can be queried. The size of the file increases
|
||||
* when bytes are written beyond its current size; the size of the file
|
||||
* decreases when it is {@link #truncate </code><i>truncated</i><code>}. The
|
||||
* decreases when it is {@link #truncate <i>truncated</i>}. The
|
||||
* file may also have some associated <i>metadata</i> such as access
|
||||
* permissions, content type, and last-modification time; this class does not
|
||||
* define methods for metadata access.
|
||||
@ -830,7 +830,7 @@ public abstract class FileChannel
|
||||
* <p> A region of a file may be mapped into memory in one of three modes:
|
||||
* </p>
|
||||
*
|
||||
* <ul type=disc>
|
||||
* <ul>
|
||||
*
|
||||
* <li><p> <i>Read-only:</i> Any attempt to modify the resulting buffer
|
||||
* will cause a {@link java.nio.ReadOnlyBufferException} to be thrown.
|
||||
|
@ -72,7 +72,7 @@ import java.io.IOException;
|
||||
* <p> File-lock objects are safe for use by multiple concurrent threads.
|
||||
*
|
||||
*
|
||||
* <a name="pdep"><h4> Platform dependencies </h4></a>
|
||||
* <a name="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
|
||||
@ -261,6 +261,11 @@ public abstract class FileLock implements AutoCloseable {
|
||||
/**
|
||||
* Tells whether or not this lock overlaps the given lock range.
|
||||
*
|
||||
* @param position
|
||||
* The starting position of the lock range
|
||||
* @param size
|
||||
* The size of the lock range
|
||||
*
|
||||
* @return <tt>true</tt> if, and only if, this lock and the given lock
|
||||
* range overlap by at least one byte
|
||||
*/
|
||||
|
@ -71,7 +71,7 @@ import java.net.StandardSocketOptions; // javadoc
|
||||
* MembershipKey#drop drop} method drops membership so that datagrams from the
|
||||
* source address can no longer be received.
|
||||
*
|
||||
* <h4>Platform dependencies</h4>
|
||||
* <h2>Platform dependencies</h2>
|
||||
*
|
||||
* The multicast implementation is intended to map directly to the native
|
||||
* multicasting facility. Consequently, the following items should be considered
|
||||
|
@ -106,6 +106,8 @@ public interface NetworkChannel
|
||||
/**
|
||||
* Sets the value of a socket option.
|
||||
*
|
||||
* @param <T>
|
||||
* The type of the socket option value
|
||||
* @param name
|
||||
* The socket option
|
||||
* @param value
|
||||
@ -130,6 +132,8 @@ public interface NetworkChannel
|
||||
/**
|
||||
* Returns the value of a socket option.
|
||||
*
|
||||
* @param <T>
|
||||
* The type of the socket option value
|
||||
* @param name
|
||||
* The socket option
|
||||
*
|
||||
|
@ -33,10 +33,9 @@ import java.nio.channels.spi.*;
|
||||
* A pair of channels that implements a unidirectional pipe.
|
||||
*
|
||||
* <p> A pipe consists of a pair of channels: A writable {@link
|
||||
* Pipe.SinkChannel </code>sink<code>} channel and a readable {@link
|
||||
* Pipe.SourceChannel </code>source<code>} channel. Once some bytes are
|
||||
* written to the sink channel they can be read from source channel in exactly
|
||||
* the order in which they were written.
|
||||
* Pipe.SinkChannel sink} channel and a readable {@link Pipe.SourceChannel source}
|
||||
* channel. Once some bytes are written to the sink channel they can be read
|
||||
* from source channel in exactlyAthe order in which they were written.
|
||||
*
|
||||
* <p> Whether or not a thread writing bytes to a pipe will block until another
|
||||
* thread reads those bytes, or some previously-written bytes, from the pipe is
|
||||
@ -63,6 +62,9 @@ public abstract class Pipe {
|
||||
{
|
||||
/**
|
||||
* Constructs a new instance of this class.
|
||||
*
|
||||
* @param provider
|
||||
* The selector provider
|
||||
*/
|
||||
protected SourceChannel(SelectorProvider provider) {
|
||||
super(provider);
|
||||
@ -94,6 +96,9 @@ public abstract class Pipe {
|
||||
{
|
||||
/**
|
||||
* Initializes a new instance of this class.
|
||||
*
|
||||
* @param provider
|
||||
* The selector provider
|
||||
*/
|
||||
protected SinkChannel(SelectorProvider provider) {
|
||||
super(provider);
|
||||
|
@ -64,8 +64,8 @@ import java.nio.channels.spi.SelectorProvider;
|
||||
* threads. </p>
|
||||
*
|
||||
*
|
||||
* <a name="bm">
|
||||
* <h4>Blocking mode</h4>
|
||||
* <a name="bm"></a>
|
||||
* <h2>Blocking mode</h2>
|
||||
*
|
||||
* A selectable channel is either in <i>blocking</i> mode or in
|
||||
* <i>non-blocking</i> mode. In blocking mode, every I/O operation invoked
|
||||
@ -142,6 +142,9 @@ public abstract class SelectableChannel
|
||||
* Retrieves the key representing the channel's registration with the given
|
||||
* selector.
|
||||
*
|
||||
* @param sel
|
||||
* The selector
|
||||
*
|
||||
* @return The key returned when this channel was last registered with the
|
||||
* given selector, or <tt>null</tt> if this channel is not
|
||||
* currently registered with that selector
|
||||
|
@ -42,7 +42,7 @@ import java.io.IOException;
|
||||
* next selection operation. The validity of a key may be tested by invoking
|
||||
* its {@link #isValid isValid} method.
|
||||
*
|
||||
* <a name="opsets">
|
||||
* <a name="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
|
||||
|
@ -36,13 +36,13 @@ import java.util.Set;
|
||||
*
|
||||
* <p> A selector may be created by invoking the {@link #open open} method of
|
||||
* this class, which will use the system's default {@link
|
||||
* java.nio.channels.spi.SelectorProvider </code>selector provider<code>} to
|
||||
* java.nio.channels.spi.SelectorProvider selector provider} to
|
||||
* create a new selector. A selector may also be created by invoking the
|
||||
* {@link java.nio.channels.spi.SelectorProvider#openSelector openSelector}
|
||||
* method of a custom selector provider. A selector remains open until it is
|
||||
* closed via its {@link #close close} method.
|
||||
*
|
||||
* <a name="ks">
|
||||
* <a name="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,18 +80,18 @@ 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"><p> Keys are added to the selected-key set by selection
|
||||
* <a name="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
|
||||
* of an {@link java.util.Iterator </code>iterator<code>} obtained from the
|
||||
* of an {@link java.util.Iterator iterator} obtained from the
|
||||
* set. Keys are never removed from the selected-key set in any other way;
|
||||
* they are not, in particular, removed as a side effect of selection
|
||||
* operations. Keys may not be added directly to the selected-key set. </p>
|
||||
*
|
||||
*
|
||||
* <a name="selop">
|
||||
* <h4>Selection</h4>
|
||||
* <a name="selop"></a>
|
||||
* <h2>Selection</h2>
|
||||
*
|
||||
* <p> During each selection operation, keys may be added to and removed from a
|
||||
* selector's selected-key set and may be removed from its key and
|
||||
@ -111,7 +111,7 @@ import java.util.Set;
|
||||
* operation began. For a channel that is ready for at least one such
|
||||
* operation, one of the following two actions is performed: </p>
|
||||
*
|
||||
* <ol type=a>
|
||||
* <ol>
|
||||
*
|
||||
* <li><p> If the channel's key is not already in the selected-key set then
|
||||
* it is added to that set and its ready-operation set is modified to
|
||||
@ -126,7 +126,7 @@ import java.util.Set;
|
||||
* words, the ready set returned by the underlying system is
|
||||
* bitwise-disjoined into the key's current ready set. </p></li>
|
||||
*
|
||||
* </ol></li>
|
||||
* </ol>
|
||||
*
|
||||
* If all of the keys in the key set at the start of this step have empty
|
||||
* interest sets then neither the selected-key set nor any of the keys'
|
||||
@ -142,7 +142,7 @@ import java.util.Set;
|
||||
* difference between the three selection methods. </p>
|
||||
*
|
||||
*
|
||||
* <h4>Concurrency</h4>
|
||||
* <h2>Concurrency</h2>
|
||||
*
|
||||
* <p> Selectors are themselves safe for use by multiple concurrent threads;
|
||||
* their key sets, however, are not.
|
||||
@ -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 name="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
|
||||
|
@ -46,7 +46,7 @@ import java.nio.channels.spi.SelectorProvider;
|
||||
* <p> Socket options are configured using the {@link #setOption(SocketOption,Object)
|
||||
* setOption} method. Server-socket channels support the following options:
|
||||
* <blockquote>
|
||||
* <table border>
|
||||
* <table border summary="Socket options">
|
||||
* <tr>
|
||||
* <th>Option Name</th>
|
||||
* <th>Description</th>
|
||||
@ -78,6 +78,9 @@ public abstract class ServerSocketChannel
|
||||
|
||||
/**
|
||||
* Initializes a new instance of this class.
|
||||
*
|
||||
* @param provider
|
||||
* The provider that created this channel
|
||||
*/
|
||||
protected ServerSocketChannel(SelectorProvider provider) {
|
||||
super(provider);
|
||||
|
@ -66,7 +66,7 @@ import java.nio.channels.spi.SelectorProvider;
|
||||
* <p> Socket options are configured using the {@link #setOption(SocketOption,Object)
|
||||
* setOption} method. Socket channels support the following options:
|
||||
* <blockquote>
|
||||
* <table border>
|
||||
* <table border summary="Socket options">
|
||||
* <tr>
|
||||
* <th>Option Name</th>
|
||||
* <th>Description</th>
|
||||
@ -120,6 +120,9 @@ public abstract class SocketChannel
|
||||
|
||||
/**
|
||||
* Initializes a new instance of this class.
|
||||
*
|
||||
* @param provider
|
||||
* The provider that created this channel
|
||||
*/
|
||||
protected SocketChannel(SelectorProvider provider) {
|
||||
super(provider);
|
||||
@ -153,6 +156,8 @@ public abstract class SocketChannel
|
||||
* @param remote
|
||||
* The remote address to which the new channel is to be connected
|
||||
*
|
||||
* @return A new, and connected, socket channel
|
||||
*
|
||||
* @throws AsynchronousCloseException
|
||||
* If another thread closes this channel
|
||||
* while the connect operation is in progress
|
||||
|
@ -46,7 +46,7 @@ import sun.nio.ch.Interruptible;
|
||||
* before and after, respectively, invoking an I/O operation that might block
|
||||
* indefinitely. In order to ensure that the {@link #end end} method is always
|
||||
* invoked, these methods should be used within a
|
||||
* <tt>try</tt> ... <tt>finally</tt> block: <a name="be">
|
||||
* <tt>try</tt> ... <tt>finally</tt> block:
|
||||
*
|
||||
* <blockquote><pre>
|
||||
* boolean completed = false;
|
||||
|
@ -72,6 +72,9 @@ public abstract class AbstractSelectableChannel
|
||||
|
||||
/**
|
||||
* Initializes a new instance of this class.
|
||||
*
|
||||
* @param provider
|
||||
* The provider that created this channel
|
||||
*/
|
||||
protected AbstractSelectableChannel(SelectorProvider provider) {
|
||||
this.provider = provider;
|
||||
@ -251,6 +254,9 @@ public abstract class AbstractSelectableChannel
|
||||
* that is blocked in an I/O operation upon this channel to return
|
||||
* immediately, either by throwing an exception or by returning normally.
|
||||
* </p>
|
||||
*
|
||||
* @throws IOException
|
||||
* If an I/O error occurs
|
||||
*/
|
||||
protected abstract void implCloseSelectableChannel() throws IOException;
|
||||
|
||||
@ -299,6 +305,10 @@ public abstract class AbstractSelectableChannel
|
||||
* changing the blocking mode. This method is only invoked if the new mode
|
||||
* is different from the current mode. </p>
|
||||
*
|
||||
* @param block If <tt>true</tt> then this channel will be placed in
|
||||
* blocking mode; if <tt>false</tt> then it will be placed
|
||||
* non-blocking mode
|
||||
*
|
||||
* @throws IOException
|
||||
* If an I/O error occurs
|
||||
*/
|
||||
|
@ -43,7 +43,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
* after, respectively, invoking an I/O operation that might block
|
||||
* indefinitely. In order to ensure that the {@link #end end} method is always
|
||||
* invoked, these methods should be used within a
|
||||
* <tt>try</tt> ... <tt>finally</tt> block: <a name="be">
|
||||
* <tt>try</tt> ... <tt>finally</tt> block:
|
||||
*
|
||||
* <blockquote><pre>
|
||||
* try {
|
||||
@ -77,6 +77,9 @@ public abstract class AbstractSelector
|
||||
|
||||
/**
|
||||
* Initializes a new instance of this class.
|
||||
*
|
||||
* @param provider
|
||||
* The provider that created this selector
|
||||
*/
|
||||
protected AbstractSelector(SelectorProvider provider) {
|
||||
this.provider = provider;
|
||||
|
@ -174,6 +174,8 @@ public abstract class AsynchronousChannelProvider {
|
||||
* @param threadFactory
|
||||
* The factory to use when creating new threads
|
||||
*
|
||||
* @return A new asynchronous channel group
|
||||
*
|
||||
* @throws IllegalArgumentException
|
||||
* If {@code nThreads <= 0}
|
||||
* @throws IOException
|
||||
@ -193,6 +195,8 @@ public abstract class AsynchronousChannelProvider {
|
||||
* A value {@code >=0} or a negative value for implementation
|
||||
* specific default
|
||||
*
|
||||
* @return A new asynchronous channel group
|
||||
*
|
||||
* @throws IOException
|
||||
* If an I/O error occurs
|
||||
*
|
||||
|
@ -183,6 +183,9 @@ public abstract class SelectorProvider {
|
||||
* Opens a datagram channel.
|
||||
*
|
||||
* @return The new channel
|
||||
*
|
||||
* @throws IOException
|
||||
* If an I/O error occurs
|
||||
*/
|
||||
public abstract DatagramChannel openDatagramChannel()
|
||||
throws IOException;
|
||||
@ -209,6 +212,9 @@ public abstract class SelectorProvider {
|
||||
* Opens a pipe.
|
||||
*
|
||||
* @return The new pipe
|
||||
*
|
||||
* @throws IOException
|
||||
* If an I/O error occurs
|
||||
*/
|
||||
public abstract Pipe openPipe()
|
||||
throws IOException;
|
||||
@ -217,6 +223,9 @@ public abstract class SelectorProvider {
|
||||
* Opens a selector.
|
||||
*
|
||||
* @return The new selector
|
||||
*
|
||||
* @throws IOException
|
||||
* If an I/O error occurs
|
||||
*/
|
||||
public abstract AbstractSelector openSelector()
|
||||
throws IOException;
|
||||
@ -225,6 +234,9 @@ public abstract class SelectorProvider {
|
||||
* Opens a server-socket channel.
|
||||
*
|
||||
* @return The new channel
|
||||
*
|
||||
* @throws IOException
|
||||
* If an I/O error occurs
|
||||
*/
|
||||
public abstract ServerSocketChannel openServerSocketChannel()
|
||||
throws IOException;
|
||||
@ -233,6 +245,9 @@ public abstract class SelectorProvider {
|
||||
* Opens a socket channel.
|
||||
*
|
||||
* @return The new channel
|
||||
*
|
||||
* @throws IOException
|
||||
* If an I/O error occurs
|
||||
*/
|
||||
public abstract SocketChannel openSocketChannel()
|
||||
throws IOException;
|
||||
|
@ -163,6 +163,9 @@ public abstract class Charset$Coder$ {
|
||||
* Initializes a new $coder$. The new $coder$ will have the given
|
||||
* $otypes-per-itype$ and replacement values.
|
||||
*
|
||||
* @param cs
|
||||
* The charset that created this $coder$
|
||||
*
|
||||
* @param average$ItypesPerOtype$
|
||||
* A positive float value indicating the expected number of
|
||||
* $otype$s that will be produced for each input $itype$
|
||||
@ -209,6 +212,9 @@ public abstract class Charset$Coder$ {
|
||||
* $otypes-per-itype$ values and its replacement will be the
|
||||
* $replTypeName$ $defaultReplName$.
|
||||
*
|
||||
* @param cs
|
||||
* The charset that created this $coder$
|
||||
*
|
||||
* @param average$ItypesPerOtype$
|
||||
* A positive float value indicating the expected number of
|
||||
* $otype$s that will be produced for each input $itype$
|
||||
@ -386,6 +392,8 @@ public abstract class Charset$Coder$ {
|
||||
* <p> The default implementation of this method does nothing. This method
|
||||
* should be overridden by $coder$s that require notification of changes to
|
||||
* the malformed-input action. </p>
|
||||
*
|
||||
* @param newAction The new action
|
||||
*/
|
||||
protected void implOnMalformedInput(CodingErrorAction newAction) { }
|
||||
|
||||
@ -428,6 +436,8 @@ public abstract class Charset$Coder$ {
|
||||
* <p> The default implementation of this method does nothing. This method
|
||||
* should be overridden by $coder$s that require notification of changes to
|
||||
* the unmappable-character action. </p>
|
||||
*
|
||||
* @param newAction The new action
|
||||
*/
|
||||
protected void implOnUnmappableCharacter(CodingErrorAction newAction) { }
|
||||
|
||||
@ -925,6 +935,9 @@ public abstract class Charset$Coder$ {
|
||||
* <p> The default implementation of this method is not very efficient; it
|
||||
* should generally be overridden to improve performance. </p>
|
||||
*
|
||||
* @param c
|
||||
* The given character
|
||||
*
|
||||
* @return <tt>true</tt> if, and only if, this encoder can encode
|
||||
* the given character
|
||||
*
|
||||
@ -953,6 +966,9 @@ public abstract class Charset$Coder$ {
|
||||
* <p> The default implementation of this method is not very efficient; it
|
||||
* should generally be overridden to improve performance. </p>
|
||||
*
|
||||
* @param cs
|
||||
* The given character sequence
|
||||
*
|
||||
* @return <tt>true</tt> if, and only if, this encoder can encode
|
||||
* the given character without throwing any exceptions and without
|
||||
* performing any replacements
|
||||
|
@ -66,7 +66,7 @@ import sun.security.action.GetPropertyAction;
|
||||
*
|
||||
*
|
||||
* <a name="names"><a name="charenc">
|
||||
* <h4>Charset names</h4>
|
||||
* <h2>Charset names</h2>
|
||||
*
|
||||
* <p> Charsets are named by strings composed of the following characters:
|
||||
*
|
||||
@ -140,7 +140,7 @@ import sun.security.action.GetPropertyAction;
|
||||
* previous canonical name be made into an alias.
|
||||
*
|
||||
*
|
||||
* <h4>Standard charsets</h4>
|
||||
* <h2>Standard charsets</h2>
|
||||
*
|
||||
* <a name="standard">
|
||||
*
|
||||
@ -217,7 +217,7 @@ import sun.security.action.GetPropertyAction;
|
||||
* <p>The {@link StandardCharsets} class defines constants for each of the
|
||||
* standard charsets.
|
||||
*
|
||||
* <h4>Terminology</h4>
|
||||
* <h2>Terminology</h2>
|
||||
*
|
||||
* <p> The name of this class is taken from the terms used in
|
||||
* <a href="http://www.ietf.org/rfc/rfc2278.txt"><i>RFC 2278</i></a>.
|
||||
@ -737,6 +737,9 @@ public abstract class Charset
|
||||
* it is not necessarily the case that the given charset is not contained
|
||||
* in this charset.
|
||||
*
|
||||
* @param cs
|
||||
* The given charset
|
||||
*
|
||||
* @return <tt>true</tt> if the given charset is contained in this charset
|
||||
*/
|
||||
public abstract boolean contains(Charset cs);
|
||||
|
@ -227,6 +227,9 @@ public class CoderResult {
|
||||
* Static factory method that returns the unique object describing a
|
||||
* malformed-input error of the given length.
|
||||
*
|
||||
* @param length
|
||||
* The given length
|
||||
*
|
||||
* @return The requested coder-result object
|
||||
*/
|
||||
public static CoderResult malformedForLength(int length) {
|
||||
@ -243,6 +246,9 @@ public class CoderResult {
|
||||
* Static factory method that returns the unique result object describing
|
||||
* an unmappable-character error of the given length.
|
||||
*
|
||||
* @param length
|
||||
* The given length
|
||||
*
|
||||
* @return The requested coder-result object
|
||||
*/
|
||||
public static CoderResult unmappableForLength(int length) {
|
||||
|
@ -39,8 +39,8 @@ import java.util.Iterator;
|
||||
* the usual extension directories. Providers may also be made available by
|
||||
* adding them to the applet or application class path or by some other
|
||||
* platform-specific means. Charset providers are looked up via the current
|
||||
* thread's {@link java.lang.Thread#getContextClassLoader() </code>context
|
||||
* class loader<code>}.
|
||||
* thread's {@link java.lang.Thread#getContextClassLoader() context class
|
||||
* loader}.
|
||||
*
|
||||
* <p> A charset provider identifies itself with a provider-configuration file
|
||||
* named <tt>java.nio.charset.spi.CharsetProvider</tt> in the resource
|
||||
|
@ -173,6 +173,8 @@ public abstract class FileStore {
|
||||
* The {@code type} parameter is the type of the attribute view required and
|
||||
* the method returns an instance of that type if supported.
|
||||
*
|
||||
* @param <V>
|
||||
* The {@code FileStoreAttributeView} type
|
||||
* @param type
|
||||
* the {@code Class} object corresponding to the attribute view
|
||||
*
|
||||
|
@ -315,7 +315,7 @@ public abstract class FileSystem
|
||||
* that resembles regular expressions but with a simpler syntax. For example:
|
||||
*
|
||||
* <blockquote>
|
||||
* <table border="0">
|
||||
* <table border="0" summary="Pattern Language">
|
||||
* <tr>
|
||||
* <td>{@code *.java}</td>
|
||||
* <td>Matches a path that represents a file name ending in {@code .java}</td>
|
||||
|
@ -200,6 +200,10 @@ public final class FileSystems {
|
||||
* existing file system. In the case of the {@link FileSystems#getDefault
|
||||
* default} file system, no permission check is required.
|
||||
*
|
||||
* @param uri the URI to locate the file system
|
||||
*
|
||||
* @return the reference to the file system
|
||||
*
|
||||
* @throws IllegalArgumentException
|
||||
* if the pre-conditions for the {@code uri} parameter are not met
|
||||
* @throws FileSystemNotFoundException
|
||||
|
@ -194,7 +194,7 @@ public final class Files {
|
||||
* <p> In the addition to {@code READ} and {@code WRITE}, the following
|
||||
* options may be present:
|
||||
*
|
||||
* <table border=1 cellpadding=5 summary="">
|
||||
* <table border=1 cellpadding=5 summary="Options">
|
||||
* <tr> <th>Option</th> <th>Description</th> </tr>
|
||||
* <tr>
|
||||
* <td> {@link StandardOpenOption#APPEND APPEND} </td>
|
||||
@ -1616,7 +1616,8 @@ public final class Files {
|
||||
* }
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
* @param <V>
|
||||
* The {@code FileAttributeView} type
|
||||
* @param path
|
||||
* the path to the file
|
||||
* @param type
|
||||
@ -1665,6 +1666,8 @@ public final class Files {
|
||||
* PosixFileAttributes attrs = Files.readAttributes(path, PosixFileAttributes.class, NOFOLLOW_LINKS);
|
||||
* </pre>
|
||||
*
|
||||
* @param <A>
|
||||
* The {@code BasicFileAttributes} type
|
||||
* @param path
|
||||
* the path to the file
|
||||
* @param type
|
||||
@ -1863,7 +1866,7 @@ public final class Files {
|
||||
* attributes} parameter:
|
||||
*
|
||||
* <blockquote>
|
||||
* <table border="0">
|
||||
* <table border="0" summary="Possible values">
|
||||
* <tr>
|
||||
* <td> {@code "*"} </td>
|
||||
* <td> Read all {@link BasicFileAttributes basic-file-attributes}. </td>
|
||||
@ -1971,10 +1974,12 @@ public final class Files {
|
||||
* System Interface (POSIX) family of standards.
|
||||
*
|
||||
* @param path
|
||||
* A file reference that locates the file
|
||||
* The path to the file
|
||||
* @param perms
|
||||
* The new set of permissions
|
||||
*
|
||||
* @return The path
|
||||
*
|
||||
* @throws UnsupportedOperationException
|
||||
* if the associated file system does not support the {@code
|
||||
* PosixFileAttributeView}
|
||||
@ -2009,7 +2014,7 @@ public final class Files {
|
||||
* access to a file attribute that is the owner of the file.
|
||||
*
|
||||
* @param path
|
||||
* A file reference that locates the file
|
||||
* The path to the file
|
||||
* @param options
|
||||
* options indicating how symbolic links are handled
|
||||
*
|
||||
@ -2052,10 +2057,12 @@ public final class Files {
|
||||
* </pre>
|
||||
*
|
||||
* @param path
|
||||
* A file reference that locates the file
|
||||
* The path to the file
|
||||
* @param owner
|
||||
* The new file owner
|
||||
*
|
||||
* @return The path
|
||||
*
|
||||
* @throws UnsupportedOperationException
|
||||
* if the associated file system does not support the {@code
|
||||
* FileOwnerAttributeView}
|
||||
@ -2090,6 +2097,8 @@ public final class Files {
|
||||
* readAttributes} method and the file type tested with the {@link
|
||||
* BasicFileAttributes#isSymbolicLink} method.
|
||||
*
|
||||
* @param path The path to the file
|
||||
*
|
||||
* @return {@code true} if the file is a symbolic link; {@code false} if
|
||||
* the file does not exist, is not a symbolic link, or it cannot
|
||||
* be determined if the file is a symbolic link or not.
|
||||
@ -2239,7 +2248,7 @@ public final class Files {
|
||||
* @param time
|
||||
* the new last modified time
|
||||
*
|
||||
* @return the file
|
||||
* @return the path
|
||||
*
|
||||
* @throws IOException
|
||||
* if an I/O error occurs
|
||||
|
@ -64,7 +64,7 @@ import java.util.Iterator;
|
||||
* those developing custom file system implementations. Methods may be added to
|
||||
* this interface in future releases. </p>
|
||||
*
|
||||
* <h4>Accessing Files</h4>
|
||||
* <h2>Accessing Files</h2>
|
||||
* <p> Paths may be used with the {@link Files} class to operate on files,
|
||||
* directories, and other types of files. For example, suppose we want a {@link
|
||||
* java.io.BufferedReader} to read text from a file "{@code access.log}". The
|
||||
@ -75,7 +75,7 @@ import java.util.Iterator;
|
||||
* BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);
|
||||
* </pre>
|
||||
*
|
||||
* <a name="interop"><h4>Interoperability</h4></a>
|
||||
* <a name="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
|
||||
@ -87,7 +87,7 @@ import java.util.Iterator;
|
||||
* addition, the {@link #toFile toFile} method is useful to construct a {@code
|
||||
* File} from the {@code String} representation of a {@code Path}.
|
||||
*
|
||||
* <h4>Concurrency</h4>
|
||||
* <h2>Concurrency</h2>
|
||||
* <p> Implementations of this interface are immutable and safe for use by
|
||||
* multiple concurrent threads.
|
||||
*
|
||||
|
@ -122,6 +122,8 @@ public interface SecureDirectoryStream<T>
|
||||
* an optional list of attributes to set atomically when creating
|
||||
* the file
|
||||
*
|
||||
* @return the seekable byte channel
|
||||
*
|
||||
* @throws ClosedDirectoryStreamException
|
||||
* if the directory stream is closed
|
||||
* @throws IllegalArgumentException
|
||||
@ -260,6 +262,8 @@ public interface SecureDirectoryStream<T>
|
||||
* then all methods to read or update attributes will throw {@link
|
||||
* ClosedDirectoryStreamException ClosedDirectoryStreamException}.
|
||||
*
|
||||
* @param <V>
|
||||
* The {@code FileAttributeView} type
|
||||
* @param type
|
||||
* the {@code Class} object corresponding to the file attribute view
|
||||
*
|
||||
@ -288,6 +292,8 @@ public interface SecureDirectoryStream<T>
|
||||
* is created but methods to read or update attributes of the file will
|
||||
* fail when invoked and the file does not exist.
|
||||
*
|
||||
* @param <V>
|
||||
* The {@code FileAttributeView} type
|
||||
* @param path
|
||||
* the path of the file
|
||||
* @param type
|
||||
|
@ -55,11 +55,16 @@ public interface WatchEvent<T> {
|
||||
public static interface Kind<T> {
|
||||
/**
|
||||
* Returns the name of the event kind.
|
||||
*
|
||||
* @return the name of the event kind
|
||||
*/
|
||||
String name();
|
||||
|
||||
/**
|
||||
* Returns the type of the {@link WatchEvent#context context} value.
|
||||
*
|
||||
*
|
||||
* @return the type of the context value
|
||||
*/
|
||||
Class<T> type();
|
||||
}
|
||||
@ -76,6 +81,8 @@ public interface WatchEvent<T> {
|
||||
public static interface Modifier {
|
||||
/**
|
||||
* Returns the name of the modifier.
|
||||
*
|
||||
* @return the name of the modifier
|
||||
*/
|
||||
String name();
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ import java.util.concurrent.TimeUnit;
|
||||
* The {@link java.nio.channels.FileChannel FileChannel} class defines methods
|
||||
* to lock regions of a file against access by other programs.
|
||||
*
|
||||
* <h4>Platform dependencies</h4>
|
||||
* <h2>Platform dependencies</h2>
|
||||
*
|
||||
* <p> The implementation that observes events from the file system is intended
|
||||
* to map directly on to the native file event notification facility where
|
||||
|
@ -134,6 +134,7 @@ public final class AclEntry {
|
||||
/**
|
||||
* Sets the type component of this builder.
|
||||
*
|
||||
* @param type the component type
|
||||
* @return this builder
|
||||
*/
|
||||
public Builder setType(AclEntryType type) {
|
||||
@ -146,6 +147,7 @@ public final class AclEntry {
|
||||
/**
|
||||
* Sets the principal component of this builder.
|
||||
*
|
||||
* @param who the principal component
|
||||
* @return this builder
|
||||
*/
|
||||
public Builder setPrincipal(UserPrincipal who) {
|
||||
@ -168,6 +170,7 @@ public final class AclEntry {
|
||||
* Sets the permissions component of this builder. On return, the
|
||||
* permissions component of this builder is a copy of the given set.
|
||||
*
|
||||
* @param perms the permissions component
|
||||
* @return this builder
|
||||
*
|
||||
* @throws ClassCastException
|
||||
@ -193,6 +196,7 @@ public final class AclEntry {
|
||||
* permissions component of this builder is a copy of the permissions in
|
||||
* the given array.
|
||||
*
|
||||
* @param perms the permissions component
|
||||
* @return this builder
|
||||
*/
|
||||
public Builder setPermissions(AclEntryPermission... perms) {
|
||||
@ -211,6 +215,7 @@ public final class AclEntry {
|
||||
* Sets the flags component of this builder. On return, the flags
|
||||
* component of this builder is a copy of the given set.
|
||||
*
|
||||
* @param flags the flags component
|
||||
* @return this builder
|
||||
*
|
||||
* @throws ClassCastException
|
||||
@ -236,6 +241,7 @@ public final class AclEntry {
|
||||
* component of this builder is a copy of the flags in the given
|
||||
* array.
|
||||
*
|
||||
* @param flags the flags component
|
||||
* @return this builder
|
||||
*/
|
||||
public Builder setFlags(AclEntryFlag... flags) {
|
||||
@ -267,9 +273,7 @@ public final class AclEntry {
|
||||
/**
|
||||
* Constructs a new builder with the components of an existing ACL entry.
|
||||
*
|
||||
* @param entry
|
||||
* an ACL entry
|
||||
*
|
||||
* @param entry an ACL entry
|
||||
* @return a new builder
|
||||
*/
|
||||
public static Builder newBuilder(AclEntry entry) {
|
||||
@ -278,6 +282,8 @@ public final class AclEntry {
|
||||
|
||||
/**
|
||||
* Returns the ACL entry type.
|
||||
*
|
||||
* @return the ACL entry type
|
||||
*/
|
||||
public AclEntryType type() {
|
||||
return type;
|
||||
@ -285,6 +291,8 @@ public final class AclEntry {
|
||||
|
||||
/**
|
||||
* Returns the principal component.
|
||||
*
|
||||
* @return the principal component
|
||||
*/
|
||||
public UserPrincipal principal() {
|
||||
return who;
|
||||
@ -294,6 +302,8 @@ public final class AclEntry {
|
||||
* Returns a copy of the permissions component.
|
||||
*
|
||||
* <p> The returned set is a modifiable copy of the permissions.
|
||||
*
|
||||
* @return the permissions component
|
||||
*/
|
||||
public Set<AclEntryPermission> permissions() {
|
||||
return new HashSet<AclEntryPermission>(perms);
|
||||
@ -303,6 +313,8 @@ public final class AclEntry {
|
||||
* Returns a copy of the flags component.
|
||||
*
|
||||
* <p> The returned set is a modifiable copy of the flags.
|
||||
*
|
||||
* @return the flags component
|
||||
*/
|
||||
public Set<AclEntryFlag> flags() {
|
||||
return new HashSet<AclEntryFlag>(flags);
|
||||
|
@ -54,7 +54,7 @@ import java.io.IOException;
|
||||
* supportsFileAttributeView} method can be used to test if a file system
|
||||
* supports ACLs.
|
||||
*
|
||||
* <a name="interop"><h4>Interoperability</h4></a>
|
||||
* <h2>Interoperability</h2>
|
||||
*
|
||||
* RFC 3530 allows for special user identities to be used on platforms that
|
||||
* support the POSIX defined access permissions. The special user identities
|
||||
@ -65,7 +65,7 @@ import java.io.IOException;
|
||||
* UserPrincipalLookupService} may be used to obtain a {@link UserPrincipal}
|
||||
* to represent these special identities by invoking the {@link
|
||||
* UserPrincipalLookupService#lookupPrincipalByName lookupPrincipalByName}
|
||||
* method. </p>
|
||||
* method.
|
||||
*
|
||||
* <p> <b>Usage Example:</b>
|
||||
* Suppose we wish to add an entry to an existing ACL to grant "joe" access:
|
||||
@ -90,11 +90,11 @@ import java.io.IOException;
|
||||
* view.setAcl(acl);
|
||||
* </pre>
|
||||
*
|
||||
* <h4> Dynamic Access </h4>
|
||||
* <h2> Dynamic Access </h2>
|
||||
* <p> Where dynamic access to file attributes is required, the attributes
|
||||
* supported by this attribute view are as follows:
|
||||
* <blockquote>
|
||||
* <table border="1" cellpadding="8">
|
||||
* <table border="1" cellpadding="8" summary="Supported attributes">
|
||||
* <tr>
|
||||
* <th> Name </th>
|
||||
* <th> Type </th>
|
||||
@ -118,7 +118,7 @@ import java.io.IOException;
|
||||
* update the ACL or owner attributes as if by invoking the {@link #setAcl setAcl}
|
||||
* or {@link #setOwner setOwner} methods.
|
||||
*
|
||||
* <h4> Setting the ACL when creating a file </h4>
|
||||
* <h2> Setting the ACL when creating a file </h2>
|
||||
*
|
||||
* <p> Implementations supporting this attribute view may also support setting
|
||||
* the initial ACL when creating a file or directory. The initial ACL
|
||||
|
@ -38,6 +38,8 @@ package java.nio.file.attribute;
|
||||
public interface AttributeView {
|
||||
/**
|
||||
* Returns the name of the attribute view.
|
||||
*
|
||||
* @return the name of the attribute view
|
||||
*/
|
||||
String name();
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ import java.io.IOException;
|
||||
* <p> Where dynamic access to file attributes is required, the attributes
|
||||
* supported by this attribute view have the following names and types:
|
||||
* <blockquote>
|
||||
* <table border="1" cellpadding="8">
|
||||
* <table border="1" cellpadding="8" summary="Supported attributes">
|
||||
* <tr>
|
||||
* <th> Name </th>
|
||||
* <th> Type </th>
|
||||
|
@ -87,22 +87,31 @@ public interface BasicFileAttributes {
|
||||
|
||||
/**
|
||||
* Tells whether the file is a regular file with opaque content.
|
||||
*
|
||||
* @return {@code true} if the file is a regular file with opaque content
|
||||
*/
|
||||
boolean isRegularFile();
|
||||
|
||||
/**
|
||||
* Tells whether the file is a directory.
|
||||
*
|
||||
* @return {@code true} if the file is a directory
|
||||
*/
|
||||
boolean isDirectory();
|
||||
|
||||
/**
|
||||
* Tells whether the file is a symbolic link.
|
||||
*
|
||||
* @return {@code true} if the file is a symbolic link
|
||||
*/
|
||||
boolean isSymbolicLink();
|
||||
|
||||
/**
|
||||
* Tells whether the file is something other than a regular file, directory,
|
||||
* or symbolic link.
|
||||
*
|
||||
* @return {@code true} if the file something other than a regular file,
|
||||
* directory or symbolic link
|
||||
*/
|
||||
boolean isOther();
|
||||
|
||||
@ -138,6 +147,8 @@ public interface BasicFileAttributes {
|
||||
* and two files are the {@link java.nio.file.Files#isSameFile same} with
|
||||
* non-{@code null} file keys, then their file keys are equal.
|
||||
*
|
||||
* @return an object that uniquely identifies the given file, or {@code null}
|
||||
*
|
||||
* @see java.nio.file.Files#walkFileTree
|
||||
*/
|
||||
Object fileKey();
|
||||
|
@ -41,7 +41,7 @@ import java.io.IOException;
|
||||
* BasicFileAttributeView}, and in addition, the following attributes are
|
||||
* supported:
|
||||
* <blockquote>
|
||||
* <table border="1" cellpadding="8">
|
||||
* <table border="1" cellpadding="8" summary="Supported attributes">
|
||||
* <tr>
|
||||
* <th> Name </th>
|
||||
* <th> Type </th>
|
||||
|
@ -40,11 +40,15 @@ package java.nio.file.attribute;
|
||||
public interface FileAttribute<T> {
|
||||
/**
|
||||
* Returns the attribute name.
|
||||
*
|
||||
* @return The attribute name
|
||||
*/
|
||||
String name();
|
||||
|
||||
/**
|
||||
* Returns the attribute value.
|
||||
*
|
||||
* @return The attribute value
|
||||
*/
|
||||
T value();
|
||||
}
|
||||
|
@ -68,13 +68,13 @@ import java.io.IOException;
|
||||
* PosixFilePermissions.toString(attrs.permissions()));
|
||||
* </pre>
|
||||
*
|
||||
* <h4> Dynamic Access </h4>
|
||||
* <h2> Dynamic Access </h2>
|
||||
* <p> Where dynamic access to file attributes is required, the attributes
|
||||
* supported by this attribute view are as defined by {@link
|
||||
* BasicFileAttributeView} and {@link FileOwnerAttributeView}, and in addition,
|
||||
* the following attributes are supported:
|
||||
* <blockquote>
|
||||
* <table border="1" cellpadding="8">
|
||||
* <table border="1" cellpadding="8" summary="Supported attributes">
|
||||
* <tr>
|
||||
* <th> Name </th>
|
||||
* <th> Type </th>
|
||||
@ -102,7 +102,7 @@ import java.io.IOException;
|
||||
* #setPermissions setPermissions}, {@link #setOwner setOwner}, and {@link
|
||||
* #setGroup setGroup} methods respectively.
|
||||
*
|
||||
* <h4> Setting Initial Permissions </h4>
|
||||
* <h2> Setting Initial Permissions </h2>
|
||||
* <p> Implementations supporting this attribute view may also support setting
|
||||
* the initial permissions when creating a file or directory. The
|
||||
* initial permissions are provided to the {@link Files#createFile createFile}
|
||||
|
@ -287,6 +287,8 @@ public abstract class FileSystemProvider {
|
||||
* @param uri
|
||||
* The URI to convert
|
||||
*
|
||||
* @return The resulting {@code Path}
|
||||
*
|
||||
* @throws IllegalArgumentException
|
||||
* If the URI scheme does not identify this provider or other
|
||||
* preconditions on the uri parameter do not hold
|
||||
@ -751,6 +753,8 @@ public abstract class FileSystemProvider {
|
||||
* @param link
|
||||
* the path to the symbolic link
|
||||
*
|
||||
* @return The target of the symbolic link
|
||||
*
|
||||
* @throws UnsupportedOperationException
|
||||
* if the implementation does not support symbolic links
|
||||
* @throws NotLinkException
|
||||
@ -984,6 +988,8 @@ public abstract class FileSystemProvider {
|
||||
* exactly the manner specified by the {@link Files#getFileAttributeView}
|
||||
* method.
|
||||
*
|
||||
* @param <V>
|
||||
* The {@code FileAttributeView} type
|
||||
* @param path
|
||||
* the path to the file
|
||||
* @param type
|
||||
@ -1002,6 +1008,8 @@ public abstract class FileSystemProvider {
|
||||
* exactly the manner specified by the {@link
|
||||
* Files#readAttributes(Path,Class,LinkOption[])} method.
|
||||
*
|
||||
* @param <A>
|
||||
* The {@code BasicFileAttributes} type
|
||||
* @param path
|
||||
* the path to the file
|
||||
* @param type
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1996, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -424,7 +424,7 @@ public class RMIClassLoader {
|
||||
*
|
||||
* <ul>
|
||||
*
|
||||
* <p><li>If the class loader is the system class loader (see
|
||||
* <li><p>If the class loader is the system class loader (see
|
||||
* {@link ClassLoader#getSystemClassLoader}), a parent of the
|
||||
* system class loader such as the loader used for installed
|
||||
* extensions, or the bootstrap class loader (which may be
|
||||
@ -433,7 +433,7 @@ public class RMIClassLoader {
|
||||
* earlier cached value) is returned, or
|
||||
* <code>null</code> is returned if that property is not set.
|
||||
*
|
||||
* <p><li>Otherwise, if the class loader is an instance of
|
||||
* <li><p>Otherwise, if the class loader is an instance of
|
||||
* <code>URLClassLoader</code>, then the returned string is a
|
||||
* space-separated list of the external forms of the URLs returned
|
||||
* by invoking the <code>getURLs</code> methods of the loader. If
|
||||
@ -452,7 +452,7 @@ public class RMIClassLoader {
|
||||
* property (or possibly an earlier cached value) is returned, or
|
||||
* <code>null</code> is returned if that property is not set.
|
||||
*
|
||||
* <p><li>Finally, if the class loader is not an instance of
|
||||
* <li><p>Finally, if the class loader is not an instance of
|
||||
* <code>URLClassLoader</code>, then the value of the
|
||||
* <code>java.rmi.server.codebase</code> property (or possibly an
|
||||
* earlier cached value) is returned, or
|
||||
|
@ -36,10 +36,10 @@ import sun.security.util.SecurityConstants;
|
||||
* based on the context it encapsulates.
|
||||
*
|
||||
* <p>More specifically, it encapsulates a context and
|
||||
* has a single method, <code>checkPermission</code>,
|
||||
* that is equivalent to the <code>checkPermission</code> method
|
||||
* has a single method, {@code checkPermission},
|
||||
* that is equivalent to the {@code checkPermission} method
|
||||
* in the AccessController class, with one difference: The AccessControlContext
|
||||
* <code>checkPermission</code> method makes access decisions based on the
|
||||
* {@code checkPermission} method makes access decisions based on the
|
||||
* context it encapsulates,
|
||||
* rather than that of the current execution thread.
|
||||
*
|
||||
@ -49,8 +49,8 @@ import sun.security.util.SecurityConstants;
|
||||
* <i>different</i> context (for example, from within a worker thread).
|
||||
*
|
||||
* <p> An AccessControlContext is created by calling the
|
||||
* <code>AccessController.getContext</code> method.
|
||||
* The <code>getContext</code> method takes a "snapshot"
|
||||
* {@code AccessController.getContext} method.
|
||||
* The {@code getContext} method takes a "snapshot"
|
||||
* of the current calling context, and places
|
||||
* it in an AccessControlContext object, which it returns. A sample call is
|
||||
* the following:
|
||||
@ -61,7 +61,7 @@ import sun.security.util.SecurityConstants;
|
||||
*
|
||||
* <p>
|
||||
* Code within a different context can subsequently call the
|
||||
* <code>checkPermission</code> method on the
|
||||
* {@code checkPermission} method on the
|
||||
* previously-saved AccessControlContext object. A sample call is the
|
||||
* following:
|
||||
*
|
||||
@ -121,7 +121,7 @@ public final class AccessControlContext {
|
||||
* @param context the ProtectionDomains associated with this context.
|
||||
* The non-duplicate domains are copied from the array. Subsequent
|
||||
* changes to the array will not affect this AccessControlContext.
|
||||
* @throws NullPointerException if <code>context</code> is <code>null</code>
|
||||
* @throws NullPointerException if {@code context} is {@code null}
|
||||
*/
|
||||
public AccessControlContext(ProtectionDomain context[])
|
||||
{
|
||||
@ -147,22 +147,22 @@ public final class AccessControlContext {
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new <code>AccessControlContext</code> with the given
|
||||
* <code>AccessControlContext</code> and <code>DomainCombiner</code>.
|
||||
* Create a new {@code AccessControlContext} with the given
|
||||
* {@code AccessControlContext} and {@code DomainCombiner}.
|
||||
* This constructor associates the provided
|
||||
* <code>DomainCombiner</code> with the provided
|
||||
* <code>AccessControlContext</code>.
|
||||
* {@code DomainCombiner} with the provided
|
||||
* {@code AccessControlContext}.
|
||||
*
|
||||
* <p>
|
||||
*
|
||||
* @param acc the <code>AccessControlContext</code> associated
|
||||
* with the provided <code>DomainCombiner</code>.
|
||||
* @param acc the {@code AccessControlContext} associated
|
||||
* with the provided {@code DomainCombiner}.
|
||||
*
|
||||
* @param combiner the <code>DomainCombiner</code> to be associated
|
||||
* with the provided <code>AccessControlContext</code>.
|
||||
* @param combiner the {@code DomainCombiner} to be associated
|
||||
* with the provided {@code AccessControlContext}.
|
||||
*
|
||||
* @exception NullPointerException if the provided
|
||||
* <code>context</code> is <code>null</code>.
|
||||
* {@code context} is {@code null}.
|
||||
*
|
||||
* @exception SecurityException if a security manager is installed and the
|
||||
* caller does not have the "createAccessControlContext"
|
||||
@ -320,13 +320,13 @@ public final class AccessControlContext {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the <code>DomainCombiner</code> associated with this
|
||||
* <code>AccessControlContext</code>.
|
||||
* Get the {@code DomainCombiner} associated with this
|
||||
* {@code AccessControlContext}.
|
||||
*
|
||||
* <p>
|
||||
*
|
||||
* @return the <code>DomainCombiner</code> associated with this
|
||||
* <code>AccessControlContext</code>, or <code>null</code>
|
||||
* @return the {@code DomainCombiner} associated with this
|
||||
* {@code AccessControlContext}, or {@code null}
|
||||
* if there is none.
|
||||
*
|
||||
* @exception SecurityException if a security manager is installed and
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -48,7 +48,7 @@ public class AccessControlException extends SecurityException {
|
||||
private Permission perm;
|
||||
|
||||
/**
|
||||
* Constructs an <code>AccessControlException</code> with the
|
||||
* Constructs an {@code AccessControlException} with the
|
||||
* specified, detailed message.
|
||||
*
|
||||
* @param s the detail message.
|
||||
@ -58,7 +58,7 @@ public class AccessControlException extends SecurityException {
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs an <code>AccessControlException</code> with the
|
||||
* Constructs an {@code AccessControlException} with the
|
||||
* specified, detailed message, and the requested permission that caused
|
||||
* the exception.
|
||||
*
|
||||
|
@ -49,7 +49,7 @@ import sun.reflect.Reflection;
|
||||
* <p> The {@link #checkPermission(Permission) checkPermission} method
|
||||
* determines whether the access request indicated by a specified
|
||||
* permission should be granted or denied. A sample call appears
|
||||
* below. In this example, <code>checkPermission</code> will determine
|
||||
* below. In this example, {@code checkPermission} will determine
|
||||
* whether or not to grant "read" access to the file named "testFile" in
|
||||
* the "/temp" directory.
|
||||
*
|
||||
@ -61,7 +61,7 @@ import sun.reflect.Reflection;
|
||||
* </pre>
|
||||
*
|
||||
* <p> If a requested access is allowed,
|
||||
* <code>checkPermission</code> returns quietly. If denied, an
|
||||
* {@code checkPermission} returns quietly. If denied, an
|
||||
* AccessControlException is
|
||||
* thrown. AccessControlException can also be thrown if the requested
|
||||
* permission is of an incorrect type or contains an invalid value.
|
||||
@ -69,8 +69,8 @@ import sun.reflect.Reflection;
|
||||
*
|
||||
* Suppose the current thread traversed m callers, in the order of caller 1
|
||||
* to caller 2 to caller m. Then caller m invoked the
|
||||
* <code>checkPermission</code> method.
|
||||
* The <code>checkPermission </code>method determines whether access
|
||||
* {@code checkPermission} method.
|
||||
* The {@code checkPermission} method determines whether access
|
||||
* is granted or denied based on the following algorithm:
|
||||
*
|
||||
* <pre> {@code
|
||||
@ -102,20 +102,20 @@ import sun.reflect.Reflection;
|
||||
*
|
||||
* <p> A caller can be marked as being "privileged"
|
||||
* (see {@link #doPrivileged(PrivilegedAction) doPrivileged} and below).
|
||||
* When making access control decisions, the <code>checkPermission</code>
|
||||
* When making access control decisions, the {@code checkPermission}
|
||||
* method stops checking if it reaches a caller that
|
||||
* was marked as "privileged" via a <code>doPrivileged</code>
|
||||
* was marked as "privileged" via a {@code doPrivileged}
|
||||
* call without a context argument (see below for information about a
|
||||
* context argument). If that caller's domain has the
|
||||
* specified permission and at least one limiting permission argument (if any)
|
||||
* implies the requested permission, no further checking is done and
|
||||
* <code>checkPermission</code>
|
||||
* {@code checkPermission}
|
||||
* returns quietly, indicating that the requested access is allowed.
|
||||
* If that domain does not have the specified permission, an exception
|
||||
* is thrown, as usual. If the caller's domain had the specified permission
|
||||
* but it was not implied by any limiting permission arguments given in the call
|
||||
* to <code>doPrivileged</code> then the permission checking continues
|
||||
* until there are no more callers or another <code>doPrivileged</code>
|
||||
* to {@code doPrivileged} then the permission checking continues
|
||||
* until there are no more callers or another {@code doPrivileged}
|
||||
* call matches the requested permission and returns normally.
|
||||
*
|
||||
* <p> The normal use of the "privileged" feature is as follows. If you
|
||||
@ -137,17 +137,17 @@ import sun.reflect.Reflection;
|
||||
*
|
||||
* <p>
|
||||
* PrivilegedAction is an interface with a single method, named
|
||||
* <code>run</code>.
|
||||
* {@code run}.
|
||||
* The above example shows creation of an implementation
|
||||
* of that interface; a concrete implementation of the
|
||||
* <code>run</code> method is supplied.
|
||||
* When the call to <code>doPrivileged</code> is made, an
|
||||
* {@code run} method is supplied.
|
||||
* When the call to {@code doPrivileged} is made, an
|
||||
* instance of the PrivilegedAction implementation is passed
|
||||
* to it. The <code>doPrivileged</code> method calls the
|
||||
* <code>run</code> method from the PrivilegedAction
|
||||
* to it. The {@code doPrivileged} method calls the
|
||||
* {@code run} method from the PrivilegedAction
|
||||
* implementation after enabling privileges, and returns the
|
||||
* <code>run</code> method's return value as the
|
||||
* <code>doPrivileged</code> return value (which is
|
||||
* {@code run} method's return value as the
|
||||
* {@code doPrivileged} return value (which is
|
||||
* ignored in this example).
|
||||
*
|
||||
* <p> If you need to return a value, you can do something like the following:
|
||||
@ -164,11 +164,11 @@ import sun.reflect.Reflection;
|
||||
* ...normal code here...
|
||||
* }}</pre>
|
||||
*
|
||||
* <p>If the action performed in your <code>run</code> method could
|
||||
* throw a "checked" exception (those listed in the <code>throws</code> clause
|
||||
* <p>If the action performed in your {@code run} method could
|
||||
* throw a "checked" exception (those listed in the {@code throws} clause
|
||||
* of a method), then you need to use the
|
||||
* <code>PrivilegedExceptionAction</code> interface instead of the
|
||||
* <code>PrivilegedAction</code> interface:
|
||||
* {@code PrivilegedExceptionAction} interface instead of the
|
||||
* {@code PrivilegedAction} interface:
|
||||
*
|
||||
* <pre> {@code
|
||||
* somemethod() throws FileNotFoundException {
|
||||
@ -191,18 +191,18 @@ import sun.reflect.Reflection;
|
||||
*
|
||||
* <p> Be *very* careful in your use of the "privileged" construct, and
|
||||
* always remember to make the privileged code section as small as possible.
|
||||
* You can pass <code>Permission</code> arguments to further limit the
|
||||
* You can pass {@code Permission} arguments to further limit the
|
||||
* scope of the "privilege" (see below).
|
||||
*
|
||||
*
|
||||
* <p> Note that <code>checkPermission</code> always performs security checks
|
||||
* <p> Note that {@code checkPermission} always performs security checks
|
||||
* within the context of the currently executing thread.
|
||||
* Sometimes a security check that should be made within a given context
|
||||
* will actually need to be done from within a
|
||||
* <i>different</i> context (for example, from within a worker thread).
|
||||
* The {@link #getContext() getContext} method and
|
||||
* AccessControlContext class are provided
|
||||
* for this situation. The <code>getContext</code> method takes a "snapshot"
|
||||
* for this situation. The {@code getContext} method takes a "snapshot"
|
||||
* of the current calling context, and places
|
||||
* it in an AccessControlContext object, which it returns. A sample call is
|
||||
* the following:
|
||||
@ -214,7 +214,7 @@ import sun.reflect.Reflection;
|
||||
* </pre>
|
||||
*
|
||||
* <p>
|
||||
* AccessControlContext itself has a <code>checkPermission</code> method
|
||||
* AccessControlContext itself has a {@code checkPermission} method
|
||||
* that makes access decisions based on the context <i>it</i> encapsulates,
|
||||
* rather than that of the current execution thread.
|
||||
* Code within a different context can thus call that method on the
|
||||
@ -230,7 +230,7 @@ import sun.reflect.Reflection;
|
||||
* <p> There are also times where you don't know a priori which permissions
|
||||
* to check the context against. In these cases you can use the
|
||||
* doPrivileged method that takes a context. You can also limit the scope
|
||||
* of the privileged code by passing additional <code>Permission</code>
|
||||
* of the privileged code by passing additional {@code Permission}
|
||||
* parameters.
|
||||
*
|
||||
* <pre> {@code
|
||||
@ -248,12 +248,12 @@ import sun.reflect.Reflection;
|
||||
* }, acc, new FilePermission("/temp/*", read));
|
||||
* ...normal code here...
|
||||
* }}</pre>
|
||||
* <p> Passing a limiting <code>Permission</code> argument of an instance of
|
||||
* <code>AllPermission</code> is equivalent to calling the equivalent
|
||||
* <code>doPrivileged</code> method without limiting <code>Permission</code>
|
||||
* arguments. Passing a zero length array of <code>Permission</code> disables
|
||||
* <p> Passing a limiting {@code Permission} argument of an instance of
|
||||
* {@code AllPermission} is equivalent to calling the equivalent
|
||||
* {@code doPrivileged} method without limiting {@code Permission}
|
||||
* arguments. Passing a zero length array of {@code Permission} disables
|
||||
* the code privileges so that checking always continues beyond the caller of
|
||||
* that <code>doPrivileged</code> method.
|
||||
* that {@code doPrivileged} method.
|
||||
*
|
||||
* @see AccessControlContext
|
||||
*
|
||||
@ -269,11 +269,11 @@ public final class AccessController {
|
||||
private AccessController() { }
|
||||
|
||||
/**
|
||||
* Performs the specified <code>PrivilegedAction</code> with privileges
|
||||
* Performs the specified {@code PrivilegedAction} with privileges
|
||||
* enabled. The action is performed with <i>all</i> of the permissions
|
||||
* possessed by the caller's protection domain.
|
||||
*
|
||||
* <p> If the action's <code>run</code> method throws an (unchecked)
|
||||
* <p> If the action's {@code run} method throws an (unchecked)
|
||||
* exception, it will propagate through this method.
|
||||
*
|
||||
* <p> Note that any DomainCombiner associated with the current
|
||||
@ -281,9 +281,9 @@ public final class AccessController {
|
||||
*
|
||||
* @param action the action to be performed.
|
||||
*
|
||||
* @return the value returned by the action's <code>run</code> method.
|
||||
* @return the value returned by the action's {@code run} method.
|
||||
*
|
||||
* @exception NullPointerException if the action is <code>null</code>
|
||||
* @exception NullPointerException if the action is {@code null}
|
||||
*
|
||||
* @see #doPrivileged(PrivilegedAction,AccessControlContext)
|
||||
* @see #doPrivileged(PrivilegedExceptionAction)
|
||||
@ -295,11 +295,11 @@ public final class AccessController {
|
||||
public static native <T> T doPrivileged(PrivilegedAction<T> action);
|
||||
|
||||
/**
|
||||
* Performs the specified <code>PrivilegedAction</code> with privileges
|
||||
* Performs the specified {@code PrivilegedAction} with privileges
|
||||
* enabled. The action is performed with <i>all</i> of the permissions
|
||||
* possessed by the caller's protection domain.
|
||||
*
|
||||
* <p> If the action's <code>run</code> method throws an (unchecked)
|
||||
* <p> If the action's {@code run} method throws an (unchecked)
|
||||
* exception, it will propagate through this method.
|
||||
*
|
||||
* <p> This method preserves the current AccessControlContext's
|
||||
@ -307,9 +307,9 @@ public final class AccessController {
|
||||
*
|
||||
* @param action the action to be performed.
|
||||
*
|
||||
* @return the value returned by the action's <code>run</code> method.
|
||||
* @return the value returned by the action's {@code run} method.
|
||||
*
|
||||
* @exception NullPointerException if the action is <code>null</code>
|
||||
* @exception NullPointerException if the action is {@code null}
|
||||
*
|
||||
* @see #doPrivileged(PrivilegedAction)
|
||||
* @see java.security.DomainCombiner
|
||||
@ -364,17 +364,17 @@ public final class AccessController {
|
||||
|
||||
|
||||
/**
|
||||
* Performs the specified <code>PrivilegedAction</code> with privileges
|
||||
* Performs the specified {@code PrivilegedAction} with privileges
|
||||
* enabled and restricted by the specified
|
||||
* <code>AccessControlContext</code> and with a privilege scope limited
|
||||
* by specified <code>Permission</code> arguments.
|
||||
* {@code AccessControlContext} and with a privilege scope limited
|
||||
* by specified {@code Permission} arguments.
|
||||
*
|
||||
* The action is performed with the intersection of the permissions
|
||||
* possessed by the caller's protection domain, and those possessed
|
||||
* by the domains represented by the specified
|
||||
* <code>AccessControlContext</code>.
|
||||
* {@code AccessControlContext}.
|
||||
* <p>
|
||||
* If the action's <code>run</code> method throws an (unchecked) exception,
|
||||
* If the action's {@code run} method throws an (unchecked) exception,
|
||||
* it will propagate through this method.
|
||||
*
|
||||
* @param action the action to be performed.
|
||||
@ -382,16 +382,16 @@ public final class AccessController {
|
||||
* representing the restriction to be applied to the
|
||||
* caller's domain's privileges before performing
|
||||
* the specified action. If the context is
|
||||
* <code>null</code>,
|
||||
* {@code null},
|
||||
* then no additional restriction is applied.
|
||||
* @param perms the <code>Permission</code> arguments which limit the
|
||||
* @param perms the {@code Permission} arguments which limit the
|
||||
* scope of the caller's privileges. The number of arguments
|
||||
* is variable.
|
||||
*
|
||||
* @return the value returned by the action's <code>run</code> method.
|
||||
* @return the value returned by the action's {@code run} method.
|
||||
*
|
||||
* @throws NullPointerException if action or perms or any element of
|
||||
* perms is <code>null</code>
|
||||
* perms is {@code null}
|
||||
*
|
||||
* @see #doPrivileged(PrivilegedAction)
|
||||
* @see #doPrivileged(PrivilegedExceptionAction,AccessControlContext)
|
||||
@ -413,17 +413,17 @@ public final class AccessController {
|
||||
|
||||
|
||||
/**
|
||||
* Performs the specified <code>PrivilegedAction</code> with privileges
|
||||
* Performs the specified {@code PrivilegedAction} with privileges
|
||||
* enabled and restricted by the specified
|
||||
* <code>AccessControlContext</code> and with a privilege scope limited
|
||||
* by specified <code>Permission</code> arguments.
|
||||
* {@code AccessControlContext} and with a privilege scope limited
|
||||
* by specified {@code Permission} arguments.
|
||||
*
|
||||
* The action is performed with the intersection of the permissions
|
||||
* possessed by the caller's protection domain, and those possessed
|
||||
* by the domains represented by the specified
|
||||
* <code>AccessControlContext</code>.
|
||||
* {@code AccessControlContext}.
|
||||
* <p>
|
||||
* If the action's <code>run</code> method throws an (unchecked) exception,
|
||||
* If the action's {@code run} method throws an (unchecked) exception,
|
||||
* it will propagate through this method.
|
||||
*
|
||||
* <p> This method preserves the current AccessControlContext's
|
||||
@ -434,16 +434,16 @@ public final class AccessController {
|
||||
* representing the restriction to be applied to the
|
||||
* caller's domain's privileges before performing
|
||||
* the specified action. If the context is
|
||||
* <code>null</code>,
|
||||
* {@code null},
|
||||
* then no additional restriction is applied.
|
||||
* @param perms the <code>Permission</code> arguments which limit the
|
||||
* @param perms the {@code Permission} arguments which limit the
|
||||
* scope of the caller's privileges. The number of arguments
|
||||
* is variable.
|
||||
*
|
||||
* @return the value returned by the action's <code>run</code> method.
|
||||
* @return the value returned by the action's {@code run} method.
|
||||
*
|
||||
* @throws NullPointerException if action or perms or any element of
|
||||
* perms is <code>null</code>
|
||||
* perms is {@code null}
|
||||
*
|
||||
* @see #doPrivileged(PrivilegedAction)
|
||||
* @see #doPrivileged(PrivilegedExceptionAction,AccessControlContext)
|
||||
@ -469,11 +469,11 @@ public final class AccessController {
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the specified <code>PrivilegedExceptionAction</code> with
|
||||
* Performs the specified {@code PrivilegedExceptionAction} with
|
||||
* privileges enabled. The action is performed with <i>all</i> of the
|
||||
* permissions possessed by the caller's protection domain.
|
||||
*
|
||||
* <p> If the action's <code>run</code> method throws an <i>unchecked</i>
|
||||
* <p> If the action's {@code run} method throws an <i>unchecked</i>
|
||||
* exception, it will propagate through this method.
|
||||
*
|
||||
* <p> Note that any DomainCombiner associated with the current
|
||||
@ -481,11 +481,11 @@ public final class AccessController {
|
||||
*
|
||||
* @param action the action to be performed
|
||||
*
|
||||
* @return the value returned by the action's <code>run</code> method
|
||||
* @return the value returned by the action's {@code run} method
|
||||
*
|
||||
* @exception PrivilegedActionException if the specified action's
|
||||
* <code>run</code> method threw a <i>checked</i> exception
|
||||
* @exception NullPointerException if the action is <code>null</code>
|
||||
* {@code run} method threw a <i>checked</i> exception
|
||||
* @exception NullPointerException if the action is {@code null}
|
||||
*
|
||||
* @see #doPrivileged(PrivilegedAction)
|
||||
* @see #doPrivileged(PrivilegedExceptionAction,AccessControlContext)
|
||||
@ -499,11 +499,11 @@ public final class AccessController {
|
||||
|
||||
|
||||
/**
|
||||
* Performs the specified <code>PrivilegedExceptionAction</code> with
|
||||
* Performs the specified {@code PrivilegedExceptionAction} with
|
||||
* privileges enabled. The action is performed with <i>all</i> of the
|
||||
* permissions possessed by the caller's protection domain.
|
||||
*
|
||||
* <p> If the action's <code>run</code> method throws an <i>unchecked</i>
|
||||
* <p> If the action's {@code run} method throws an <i>unchecked</i>
|
||||
* exception, it will propagate through this method.
|
||||
*
|
||||
* <p> This method preserves the current AccessControlContext's
|
||||
@ -511,11 +511,11 @@ public final class AccessController {
|
||||
*
|
||||
* @param action the action to be performed.
|
||||
*
|
||||
* @return the value returned by the action's <code>run</code> method
|
||||
* @return the value returned by the action's {@code run} method
|
||||
*
|
||||
* @exception PrivilegedActionException if the specified action's
|
||||
* <code>run</code> method threw a <i>checked</i> exception
|
||||
* @exception NullPointerException if the action is <code>null</code>
|
||||
* {@code run} method threw a <i>checked</i> exception
|
||||
* @exception NullPointerException if the action is {@code null}
|
||||
*
|
||||
* @see #doPrivileged(PrivilegedAction)
|
||||
* @see #doPrivileged(PrivilegedExceptionAction,AccessControlContext)
|
||||
@ -609,17 +609,17 @@ public final class AccessController {
|
||||
|
||||
|
||||
/**
|
||||
* Performs the specified <code>PrivilegedExceptionAction</code> with
|
||||
* Performs the specified {@code PrivilegedExceptionAction} with
|
||||
* privileges enabled and restricted by the specified
|
||||
* <code>AccessControlContext</code> and with a privilege scope limited by
|
||||
* specified <code>Permission</code> arguments.
|
||||
* {@code AccessControlContext} and with a privilege scope limited by
|
||||
* specified {@code Permission} arguments.
|
||||
*
|
||||
* The action is performed with the intersection of the permissions
|
||||
* possessed by the caller's protection domain, and those possessed
|
||||
* by the domains represented by the specified
|
||||
* <code>AccessControlContext</code>.
|
||||
* {@code AccessControlContext}.
|
||||
* <p>
|
||||
* If the action's <code>run</code> method throws an (unchecked) exception,
|
||||
* If the action's {@code run} method throws an (unchecked) exception,
|
||||
* it will propagate through this method.
|
||||
*
|
||||
* @param action the action to be performed.
|
||||
@ -627,18 +627,18 @@ public final class AccessController {
|
||||
* representing the restriction to be applied to the
|
||||
* caller's domain's privileges before performing
|
||||
* the specified action. If the context is
|
||||
* <code>null</code>,
|
||||
* {@code null},
|
||||
* then no additional restriction is applied.
|
||||
* @param perms the <code>Permission</code> arguments which limit the
|
||||
* @param perms the {@code Permission} arguments which limit the
|
||||
* scope of the caller's privileges. The number of arguments
|
||||
* is variable.
|
||||
*
|
||||
* @return the value returned by the action's <code>run</code> method.
|
||||
* @return the value returned by the action's {@code run} method.
|
||||
*
|
||||
* @throws PrivilegedActionException if the specified action's
|
||||
* <code>run</code> method threw a <i>checked</i> exception
|
||||
* {@code run} method threw a <i>checked</i> exception
|
||||
* @throws NullPointerException if action or perms or any element of
|
||||
* perms is <code>null</code>
|
||||
* perms is {@code null}
|
||||
*
|
||||
* @see #doPrivileged(PrivilegedAction)
|
||||
* @see #doPrivileged(PrivilegedAction,AccessControlContext)
|
||||
@ -660,17 +660,17 @@ public final class AccessController {
|
||||
|
||||
|
||||
/**
|
||||
* Performs the specified <code>PrivilegedExceptionAction</code> with
|
||||
* Performs the specified {@code PrivilegedExceptionAction} with
|
||||
* privileges enabled and restricted by the specified
|
||||
* <code>AccessControlContext</code> and with a privilege scope limited by
|
||||
* specified <code>Permission</code> arguments.
|
||||
* {@code AccessControlContext} and with a privilege scope limited by
|
||||
* specified {@code Permission} arguments.
|
||||
*
|
||||
* The action is performed with the intersection of the permissions
|
||||
* possessed by the caller's protection domain, and those possessed
|
||||
* by the domains represented by the specified
|
||||
* <code>AccessControlContext</code>.
|
||||
* {@code AccessControlContext}.
|
||||
* <p>
|
||||
* If the action's <code>run</code> method throws an (unchecked) exception,
|
||||
* If the action's {@code run} method throws an (unchecked) exception,
|
||||
* it will propagate through this method.
|
||||
*
|
||||
* <p> This method preserves the current AccessControlContext's
|
||||
@ -681,18 +681,18 @@ public final class AccessController {
|
||||
* representing the restriction to be applied to the
|
||||
* caller's domain's privileges before performing
|
||||
* the specified action. If the context is
|
||||
* <code>null</code>,
|
||||
* {@code null},
|
||||
* then no additional restriction is applied.
|
||||
* @param perms the <code>Permission</code> arguments which limit the
|
||||
* @param perms the {@code Permission} arguments which limit the
|
||||
* scope of the caller's privileges. The number of arguments
|
||||
* is variable.
|
||||
*
|
||||
* @return the value returned by the action's <code>run</code> method.
|
||||
* @return the value returned by the action's {@code run} method.
|
||||
*
|
||||
* @throws PrivilegedActionException if the specified action's
|
||||
* <code>run</code> method threw a <i>checked</i> exception
|
||||
* {@code run} method threw a <i>checked</i> exception
|
||||
* @throws NullPointerException if action or perms or any element of
|
||||
* perms is <code>null</code>
|
||||
* perms is {@code null}
|
||||
*
|
||||
* @see #doPrivileged(PrivilegedAction)
|
||||
* @see #doPrivileged(PrivilegedAction,AccessControlContext)
|
||||
@ -770,14 +770,14 @@ public final class AccessController {
|
||||
* This method quietly returns if the access request
|
||||
* is permitted, or throws an AccessControlException otherwise. The
|
||||
* getPermission method of the AccessControlException returns the
|
||||
* <code>perm</code> Permission object instance.
|
||||
* {@code perm} Permission object instance.
|
||||
*
|
||||
* @param perm the requested permission.
|
||||
*
|
||||
* @exception AccessControlException if the specified permission
|
||||
* is not permitted, based on the current security policy.
|
||||
* @exception NullPointerException if the specified permission
|
||||
* is <code>null</code> and is checked based on the
|
||||
* is {@code null} and is checked based on the
|
||||
* security policy currently in effect.
|
||||
*/
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -28,10 +28,10 @@ package java.security;
|
||||
import java.security.spec.AlgorithmParameterSpec;
|
||||
|
||||
/**
|
||||
* The <code>AlgorithmParameterGenerator</code> class is used to generate a
|
||||
* The {@code AlgorithmParameterGenerator} class is used to generate a
|
||||
* set of
|
||||
* parameters to be used with a certain algorithm. Parameter generators
|
||||
* are constructed using the <code>getInstance</code> factory methods
|
||||
* are constructed using the {@code getInstance} factory methods
|
||||
* (static methods that return instances of a given class).
|
||||
*
|
||||
* <P>The object that will generate the parameters can be initialized
|
||||
@ -61,17 +61,17 @@ import java.security.spec.AlgorithmParameterSpec;
|
||||
*
|
||||
* <P>In case the client does not explicitly initialize the
|
||||
* AlgorithmParameterGenerator
|
||||
* (via a call to an <code>init</code> method), each provider must supply (and
|
||||
* (via a call to an {@code init} method), each provider must supply (and
|
||||
* document) a default initialization. For example, the Sun provider uses a
|
||||
* default modulus prime size of 1024 bits for the generation of DSA
|
||||
* parameters.
|
||||
*
|
||||
* <p> Every implementation of the Java platform is required to support the
|
||||
* following standard <code>AlgorithmParameterGenerator</code> algorithms and
|
||||
* following standard {@code AlgorithmParameterGenerator} algorithms and
|
||||
* keysizes in parentheses:
|
||||
* <ul>
|
||||
* <li><tt>DiffieHellman</tt> (1024)</li>
|
||||
* <li><tt>DSA</tt> (1024)</li>
|
||||
* <li>{@code DiffieHellman} (1024)</li>
|
||||
* <li>{@code DSA} (1024)</li>
|
||||
* </ul>
|
||||
* These algorithms are described in the <a href=
|
||||
* "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameterGenerator">
|
||||
@ -272,11 +272,11 @@ public class AlgorithmParameterGenerator {
|
||||
|
||||
/**
|
||||
* Initializes this parameter generator for a certain size.
|
||||
* To create the parameters, the <code>SecureRandom</code>
|
||||
* To create the parameters, the {@code SecureRandom}
|
||||
* implementation of the highest-priority installed provider is used as
|
||||
* the source of randomness.
|
||||
* (If none of the installed providers supply an implementation of
|
||||
* <code>SecureRandom</code>, a system-provided source of randomness is
|
||||
* {@code SecureRandom}, a system-provided source of randomness is
|
||||
* used.)
|
||||
*
|
||||
* @param size the size (number of bits).
|
||||
@ -299,11 +299,11 @@ public class AlgorithmParameterGenerator {
|
||||
/**
|
||||
* Initializes this parameter generator with a set of algorithm-specific
|
||||
* parameter generation values.
|
||||
* To generate the parameters, the <code>SecureRandom</code>
|
||||
* To generate the parameters, the {@code SecureRandom}
|
||||
* implementation of the highest-priority installed provider is used as
|
||||
* the source of randomness.
|
||||
* (If none of the installed providers supply an implementation of
|
||||
* <code>SecureRandom</code>, a system-provided source of randomness is
|
||||
* {@code SecureRandom}, a system-provided source of randomness is
|
||||
* used.)
|
||||
*
|
||||
* @param genParamSpec the set of algorithm-specific parameter generation values.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,7 +29,7 @@ import java.security.spec.AlgorithmParameterSpec;
|
||||
|
||||
/**
|
||||
* This class defines the <i>Service Provider Interface</i> (<b>SPI</b>)
|
||||
* for the <code>AlgorithmParameterGenerator</code> class, which
|
||||
* for the {@code AlgorithmParameterGenerator} class, which
|
||||
* is used to generate a set of parameters to be used with a certain algorithm.
|
||||
*
|
||||
* <p> All the abstract methods in this class must be implemented by each
|
||||
@ -37,7 +37,7 @@ import java.security.spec.AlgorithmParameterSpec;
|
||||
* of a parameter generator for a particular algorithm.
|
||||
*
|
||||
* <p> In case the client does not explicitly initialize the
|
||||
* AlgorithmParameterGenerator (via a call to an <code>engineInit</code>
|
||||
* AlgorithmParameterGenerator (via a call to an {@code engineInit}
|
||||
* method), each provider must supply (and document) a default initialization.
|
||||
* For example, the Sun provider uses a default modulus prime size of 1024
|
||||
* bits for the generation of DSA parameters.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -32,28 +32,28 @@ import java.security.spec.InvalidParameterSpecException;
|
||||
/**
|
||||
* This class is used as an opaque representation of cryptographic parameters.
|
||||
*
|
||||
* <p>An <code>AlgorithmParameters</code> object for managing the parameters
|
||||
* <p>An {@code AlgorithmParameters} object for managing the parameters
|
||||
* for a particular algorithm can be obtained by
|
||||
* calling one of the <code>getInstance</code> factory methods
|
||||
* calling one of the {@code getInstance} factory methods
|
||||
* (static methods that return instances of a given class).
|
||||
*
|
||||
* <p>Once an <code>AlgorithmParameters</code> object is obtained, it must be
|
||||
* initialized via a call to <code>init</code>, using an appropriate parameter
|
||||
* <p>Once an {@code AlgorithmParameters} object is obtained, it must be
|
||||
* initialized via a call to {@code init}, using an appropriate parameter
|
||||
* specification or parameter encoding.
|
||||
*
|
||||
* <p>A transparent parameter specification is obtained from an
|
||||
* <code>AlgorithmParameters</code> object via a call to
|
||||
* <code>getParameterSpec</code>, and a byte encoding of the parameters is
|
||||
* obtained via a call to <code>getEncoded</code>.
|
||||
* {@code AlgorithmParameters} object via a call to
|
||||
* {@code getParameterSpec}, and a byte encoding of the parameters is
|
||||
* obtained via a call to {@code getEncoded}.
|
||||
*
|
||||
* <p> Every implementation of the Java platform is required to support the
|
||||
* following standard <code>AlgorithmParameters</code> algorithms:
|
||||
* following standard {@code AlgorithmParameters} algorithms:
|
||||
* <ul>
|
||||
* <li><tt>AES</tt></li>
|
||||
* <li><tt>DES</tt></li>
|
||||
* <li><tt>DESede</tt></li>
|
||||
* <li><tt>DiffieHellman</tt></li>
|
||||
* <li><tt>DSA</tt></li>
|
||||
* <li>{@code AES}</li>
|
||||
* <li>{@code DES}</li>
|
||||
* <li>{@code DESede}</li>
|
||||
* <li>{@code DiffieHellman}</li>
|
||||
* <li>{@code DSA}</li>
|
||||
* </ul>
|
||||
* These algorithms are described in the <a href=
|
||||
* "{@docRoot}/../technotes/guides/security/StandardNames.html#AlgorithmParameters">
|
||||
@ -123,7 +123,7 @@ public class AlgorithmParameters {
|
||||
* the {@link Security#getProviders() Security.getProviders()} method.
|
||||
*
|
||||
* <p> The returned parameter object must be initialized via a call to
|
||||
* <code>init</code>, using an appropriate parameter specification or
|
||||
* {@code init}, using an appropriate parameter specification or
|
||||
* parameter encoding.
|
||||
*
|
||||
* @param algorithm the name of the algorithm requested.
|
||||
@ -165,7 +165,7 @@ public class AlgorithmParameters {
|
||||
* the {@link Security#getProviders() Security.getProviders()} method.
|
||||
*
|
||||
* <p>The returned parameter object must be initialized via a call to
|
||||
* <code>init</code>, using an appropriate parameter specification or
|
||||
* {@code init}, using an appropriate parameter specification or
|
||||
* parameter encoding.
|
||||
*
|
||||
* @param algorithm the name of the algorithm requested.
|
||||
@ -212,7 +212,7 @@ public class AlgorithmParameters {
|
||||
* does not have to be registered in the provider list.
|
||||
*
|
||||
* <p>The returned parameter object must be initialized via a call to
|
||||
* <code>init</code>, using an appropriate parameter specification or
|
||||
* {@code init}, using an appropriate parameter specification or
|
||||
* parameter encoding.
|
||||
*
|
||||
* @param algorithm the name of the algorithm requested.
|
||||
@ -259,7 +259,7 @@ public class AlgorithmParameters {
|
||||
|
||||
/**
|
||||
* Initializes this parameter object using the parameters
|
||||
* specified in <code>paramSpec</code>.
|
||||
* specified in {@code paramSpec}.
|
||||
*
|
||||
* @param paramSpec the parameter specification.
|
||||
*
|
||||
@ -295,9 +295,9 @@ public class AlgorithmParameters {
|
||||
}
|
||||
|
||||
/**
|
||||
* Imports the parameters from <code>params</code> and decodes them
|
||||
* Imports the parameters from {@code params} and decodes them
|
||||
* according to the specified decoding scheme.
|
||||
* If <code>format</code> is null, the
|
||||
* If {@code format} is null, the
|
||||
* primary decoding format for parameters is used. The primary decoding
|
||||
* format is ASN.1, if an ASN.1 specification for these parameters
|
||||
* exists.
|
||||
@ -318,11 +318,11 @@ public class AlgorithmParameters {
|
||||
|
||||
/**
|
||||
* Returns a (transparent) specification of this parameter object.
|
||||
* <code>paramSpec</code> identifies the specification class in which
|
||||
* {@code paramSpec} identifies the specification class in which
|
||||
* the parameters should be returned. It could, for example, be
|
||||
* <code>DSAParameterSpec.class</code>, to indicate that the
|
||||
* {@code DSAParameterSpec.class}, to indicate that the
|
||||
* parameters should be returned in an instance of the
|
||||
* <code>DSAParameterSpec</code> class.
|
||||
* {@code DSAParameterSpec} class.
|
||||
*
|
||||
* @param paramSpec the specification class in which
|
||||
* the parameters should be returned.
|
||||
@ -363,7 +363,7 @@ public class AlgorithmParameters {
|
||||
|
||||
/**
|
||||
* Returns the parameters encoded in the specified scheme.
|
||||
* If <code>format</code> is null, the
|
||||
* If {@code format} is null, the
|
||||
* primary encoding format for parameters is used. The primary encoding
|
||||
* format is ASN.1, if an ASN.1 specification for these parameters
|
||||
* exists.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -31,7 +31,7 @@ import java.security.spec.InvalidParameterSpecException;
|
||||
|
||||
/**
|
||||
* This class defines the <i>Service Provider Interface</i> (<b>SPI</b>)
|
||||
* for the <code>AlgorithmParameters</code> class, which is used to manage
|
||||
* for the {@code AlgorithmParameters} class, which is used to manage
|
||||
* algorithm parameters.
|
||||
*
|
||||
* <p> All the abstract methods in this class must be implemented by each
|
||||
@ -52,7 +52,7 @@ public abstract class AlgorithmParametersSpi {
|
||||
|
||||
/**
|
||||
* Initializes this parameters object using the parameters
|
||||
* specified in <code>paramSpec</code>.
|
||||
* specified in {@code paramSpec}.
|
||||
*
|
||||
* @param paramSpec the parameter specification.
|
||||
*
|
||||
@ -77,9 +77,9 @@ public abstract class AlgorithmParametersSpi {
|
||||
throws IOException;
|
||||
|
||||
/**
|
||||
* Imports the parameters from <code>params</code> and
|
||||
* Imports the parameters from {@code params} and
|
||||
* decodes them according to the specified decoding format.
|
||||
* If <code>format</code> is null, the
|
||||
* If {@code format} is null, the
|
||||
* primary decoding format for parameters is used. The primary decoding
|
||||
* format is ASN.1, if an ASN.1 specification for these parameters
|
||||
* exists.
|
||||
@ -96,11 +96,11 @@ public abstract class AlgorithmParametersSpi {
|
||||
/**
|
||||
* Returns a (transparent) specification of this parameters
|
||||
* object.
|
||||
* <code>paramSpec</code> identifies the specification class in which
|
||||
* {@code paramSpec} identifies the specification class in which
|
||||
* the parameters should be returned. It could, for example, be
|
||||
* <code>DSAParameterSpec.class</code>, to indicate that the
|
||||
* {@code DSAParameterSpec.class}, to indicate that the
|
||||
* parameters should be returned in an instance of the
|
||||
* <code>DSAParameterSpec</code> class.
|
||||
* {@code DSAParameterSpec} class.
|
||||
*
|
||||
* @param paramSpec the specification class in which
|
||||
* the parameters should be returned.
|
||||
@ -128,7 +128,7 @@ public abstract class AlgorithmParametersSpi {
|
||||
|
||||
/**
|
||||
* Returns the parameters encoded in the specified format.
|
||||
* If <code>format</code> is null, the
|
||||
* If {@code format} is null, the
|
||||
* primary encoding format for parameters is used. The primary encoding
|
||||
* format is ASN.1, if an ASN.1 specification for these parameters
|
||||
* exists.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -69,7 +69,7 @@ public final class AllPermission extends Permission {
|
||||
|
||||
/**
|
||||
* Creates a new AllPermission object. This
|
||||
* constructor exists for use by the <code>Policy</code> object
|
||||
* constructor exists for use by the {@code Policy} object
|
||||
* to instantiate new Permission objects.
|
||||
*
|
||||
* @param name ignored
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user