Merge
1
.hgtags
@ -444,3 +444,4 @@ e6d70017f5b9adbb2ec82d826973d0251800a3c3 jdk-10+12
|
||||
7db699468b4f84abbcc01647e5a964409737411a jdk-10+17
|
||||
3739654290616e533fc6f51bf9ad69ed47a6abba jdk-10+18
|
||||
14df107500cc3b8ab238c3e4ad2c74e12bfe6067 jdk-10+19
|
||||
4586bc5d28d13d3147b993e6237eaf29a7073bbb jdk-10+20
|
||||
|
@ -444,3 +444,4 @@ a133a7d1007b1456bc62824382fd8ac93b45d329 jdk-10+17
|
||||
b803e6cff41e72a1e6d8782e1ef7c25a6e3e5ee3 jdk-10+19
|
||||
d2982a786f53814367698e63efe6349c9128e1db jdk-9+180
|
||||
b656dea9398ef601f7fc08d1a5157a560e0ccbe0 jdk-9+181
|
||||
682e2a6df836f4731f92eb2ddcd467075047f6ea jdk-10+20
|
||||
|
@ -187,6 +187,9 @@ TOOLCHAIN_MISC_CHECKS
|
||||
# Setup the JTReg Regression Test Harness.
|
||||
TOOLCHAIN_SETUP_JTREG
|
||||
|
||||
# Setup Jib dependency tool
|
||||
TOOLCHAIN_SETUP_JIB
|
||||
|
||||
FLAGS_SETUP_INIT_FLAGS
|
||||
|
||||
# Now we can test some aspects on the target using configure macros.
|
||||
@ -220,7 +223,7 @@ BASIC_COMPILE_FIXPATH
|
||||
LIB_DETERMINE_DEPENDENCIES
|
||||
LIB_SETUP_LIBRARIES
|
||||
|
||||
# Hotspot setup depends on lib checks (AOT needs libelf).
|
||||
# Hotspot setup depends on lib checks.
|
||||
|
||||
HOTSPOT_SETUP_JVM_FEATURES
|
||||
|
||||
|
@ -760,6 +760,19 @@ AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK],
|
||||
[
|
||||
|
||||
FLAGS_SETUP_ABI_PROFILE
|
||||
|
||||
# Optional POSIX functionality needed by the JVM
|
||||
#
|
||||
# Check if clock_gettime is available and in which library. This indicates
|
||||
# availability of CLOCK_MONOTONIC for hotspot. But we don't need to link, so
|
||||
# don't let it update LIBS.
|
||||
save_LIBS="$LIBS"
|
||||
AC_SEARCH_LIBS(clock_gettime, rt, [HAS_CLOCK_GETTIME=true], [])
|
||||
if test "x$LIBS" = "x-lrt "; then
|
||||
CLOCK_GETTIME_IN_LIBRT=true
|
||||
fi
|
||||
LIBS="$save_LIBS"
|
||||
|
||||
FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER([TARGET])
|
||||
FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER([BUILD], [OPENJDK_BUILD_])
|
||||
|
||||
@ -897,7 +910,7 @@ AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER],
|
||||
$2CFLAGS_JDK="[$]$2CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal"
|
||||
$2CXXFLAGS_JDK="[$]$2CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib"
|
||||
elif test "x$TOOLCHAIN_TYPE" = xxlc; then
|
||||
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_REENTRANT -D__STDC_FORMAT_MACROS"
|
||||
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_REENTRANT"
|
||||
$2CFLAGS_JDK="[$]$2CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
|
||||
$2CXXFLAGS_JDK="[$]$2CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
|
||||
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
|
||||
@ -962,6 +975,11 @@ AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER],
|
||||
fi
|
||||
fi
|
||||
|
||||
# Always enable optional macros for VM.
|
||||
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -D__STDC_FORMAT_MACROS"
|
||||
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -D__STDC_LIMIT_MACROS"
|
||||
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -D__STDC_CONSTANT_MACROS"
|
||||
|
||||
# Setup target OS define. Use OS target name but in upper case.
|
||||
OPENJDK_$1_OS_UPPERCASE=`$ECHO $OPENJDK_$1_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
|
||||
$2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D$OPENJDK_$1_OS_UPPERCASE"
|
||||
@ -981,6 +999,16 @@ AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER],
|
||||
$2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DDEBUG"
|
||||
fi
|
||||
|
||||
# Optional POSIX functionality needed by the VM
|
||||
|
||||
if test "x$HAS_CLOCK_GETTIME" = "xtrue"; then
|
||||
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -DSUPPORTS_CLOCK_MONOTONIC"
|
||||
if test "x$CLOCK_GETTIME_IN_LIBRT" = "xtrue"; then
|
||||
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -DNEEDS_LIBRT"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Set some additional per-OS defines.
|
||||
if test "x$OPENJDK_$1_OS" = xlinux; then
|
||||
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -DLINUX"
|
||||
@ -989,7 +1017,7 @@ AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER],
|
||||
elif test "x$OPENJDK_$1_OS" = xsolaris; then
|
||||
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -DSOLARIS"
|
||||
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -template=no%extdef -features=no%split_init \
|
||||
-D_Crun_inline_placement -library=%none $PICFLAG -mt -features=no%except"
|
||||
-D_Crun_inline_placement -library=stlport4 $PICFLAG -mt -features=no%except"
|
||||
elif test "x$OPENJDK_$1_OS" = xmacosx; then
|
||||
$2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
|
||||
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_ALLBSD_SOURCE"
|
||||
|
@ -663,8 +663,6 @@ JVM_FEATURES_core
|
||||
JVM_FEATURES_client
|
||||
JVM_FEATURES_server
|
||||
INCLUDE_GRAAL
|
||||
ELF_LIBS
|
||||
ELF_CFLAGS
|
||||
STLPORT_LIB
|
||||
LIBZIP_CAN_USE_MMAP
|
||||
LIBDL
|
||||
@ -790,6 +788,7 @@ ARFLAGS
|
||||
COMPILER_BINDCMD_FILE_FLAG
|
||||
COMPILER_COMMAND_FILE_FLAG
|
||||
COMPILER_TARGET_BITS_FLAG
|
||||
JIB_JAR
|
||||
JT_HOME
|
||||
JTREGEXE
|
||||
HOTSPOT_TOOLCHAIN_TYPE
|
||||
@ -1182,6 +1181,7 @@ with_extra_ldflags
|
||||
with_toolchain_version
|
||||
with_build_devkit
|
||||
with_jtreg
|
||||
with_jib
|
||||
with_abi_profile
|
||||
with_macosx_version_max
|
||||
enable_warnings_as_errors
|
||||
@ -1219,9 +1219,6 @@ with_lcms
|
||||
with_dxsdk
|
||||
with_dxsdk_lib
|
||||
with_dxsdk_include
|
||||
with_libelf
|
||||
with_libelf_include
|
||||
with_libelf_lib
|
||||
with_jvm_features
|
||||
with_jvm_interpreter
|
||||
enable_jtreg_failure_handler
|
||||
@ -1351,8 +1348,6 @@ PNG_CFLAGS
|
||||
PNG_LIBS
|
||||
LCMS_CFLAGS
|
||||
LCMS_LIBS
|
||||
ELF_CFLAGS
|
||||
ELF_LIBS
|
||||
ICECC_CMD
|
||||
ICECC_CREATE_ENV
|
||||
ICECC_WRAPPER
|
||||
@ -2130,6 +2125,7 @@ Optional Packages:
|
||||
dependent]
|
||||
--with-build-devkit Devkit to use for the build platform toolchain
|
||||
--with-jtreg Regression Test Harness [probed]
|
||||
--with-jib Jib dependency management tool [not used]
|
||||
--with-abi-profile specify ABI profile for ARM builds
|
||||
(arm-vfp-sflt,arm-vfp-hflt,arm-sflt,
|
||||
armv5-vfp-sflt,armv6-vfp-hflt,arm64,aarch64)
|
||||
@ -2186,11 +2182,6 @@ Optional Packages:
|
||||
compatibility and is ignored
|
||||
--with-dxsdk-include Deprecated. Option is kept for backwards
|
||||
compatibility and is ignored
|
||||
--with-libelf specify prefix directory for the libelf package
|
||||
(expecting the libraries under PATH/lib and the
|
||||
headers under PATH/include)
|
||||
--with-libelf-include specify directory for the libelf include files
|
||||
--with-libelf-lib specify directory for the libelf library
|
||||
--with-jvm-features additional JVM features to enable (separated by
|
||||
comma), use '--help' to show possible values [none]
|
||||
--with-jvm-interpreter Deprecated. Option is kept for backwards
|
||||
@ -2327,8 +2318,6 @@ Some influential environment variables:
|
||||
PNG_LIBS linker flags for PNG, overriding pkg-config
|
||||
LCMS_CFLAGS C compiler flags for LCMS, overriding pkg-config
|
||||
LCMS_LIBS linker flags for LCMS, overriding pkg-config
|
||||
ELF_CFLAGS C compiler flags for ELF, overriding pkg-config
|
||||
ELF_LIBS linker flags for ELF, overriding pkg-config
|
||||
ICECC_CMD Override default value for ICECC_CMD
|
||||
ICECC_CREATE_ENV
|
||||
Override default value for ICECC_CREATE_ENV
|
||||
@ -4224,8 +4213,6 @@ apt_help() {
|
||||
PKGHANDLER_COMMAND="sudo apt-get install ccache" ;;
|
||||
dtrace)
|
||||
PKGHANDLER_COMMAND="sudo apt-get install systemtap-sdt-dev" ;;
|
||||
elf)
|
||||
PKGHANDLER_COMMAND="sudo apt-get install libelf-dev" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
@ -4245,8 +4232,6 @@ yum_help() {
|
||||
PKGHANDLER_COMMAND="sudo yum install libXtst-devel libXt-devel libXrender-devel libXi-devel" ;;
|
||||
ccache)
|
||||
PKGHANDLER_COMMAND="sudo yum install ccache" ;;
|
||||
elf)
|
||||
PKGHANDLER_COMMAND="sudo yum install elfutils-libelf-devel" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
@ -4516,7 +4501,7 @@ VALID_JVM_VARIANTS="server client minimal core zero zeroshark custom"
|
||||
|
||||
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -4793,36 +4778,6 @@ VALID_JVM_VARIANTS="server client minimal core zero zeroshark custom"
|
||||
################################################################################
|
||||
|
||||
|
||||
#
|
||||
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Setup libelf (ELF library)
|
||||
################################################################################
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
# Determine which libraries are needed for this configuration
|
||||
@ -4961,7 +4916,7 @@ VALID_JVM_VARIANTS="server client minimal core zero zeroshark custom"
|
||||
|
||||
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -5092,6 +5047,9 @@ TOOLCHAIN_MINIMUM_VERSION_xlc=""
|
||||
# Setup the JTReg Regression Test Harness.
|
||||
|
||||
|
||||
# Setup the JIB dependency resolver
|
||||
|
||||
|
||||
#
|
||||
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
@ -5193,7 +5151,7 @@ VS_SDK_PLATFORM_NAME_2013=
|
||||
#CUSTOM_AUTOCONF_INCLUDE
|
||||
|
||||
# Do not change or remove the following line, it is needed for consistency checks:
|
||||
DATE_WHEN_GENERATED=1500423205
|
||||
DATE_WHEN_GENERATED=1503411624
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
@ -49524,6 +49482,41 @@ $as_echo "$as_me: The path of JT_HOME, which resolves as \"$path\", is invalid."
|
||||
|
||||
|
||||
|
||||
# Setup Jib dependency tool
|
||||
|
||||
|
||||
# Check whether --with-jib was given.
|
||||
if test "${with_jib+set}" = set; then :
|
||||
withval=$with_jib;
|
||||
fi
|
||||
|
||||
|
||||
if test "x$with_jib" = xno || test "x$with_jib" = x; then
|
||||
# jib disabled
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jib" >&5
|
||||
$as_echo_n "checking for jib... " >&6; }
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
elif test "x$with_jib" = xyes; then
|
||||
as_fn_error $? "Must supply a value to --with-jib" "$LINENO" 5
|
||||
else
|
||||
JIB_HOME="${with_jib}"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jib" >&5
|
||||
$as_echo_n "checking for jib... " >&6; }
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${JIB_HOME}" >&5
|
||||
$as_echo "${JIB_HOME}" >&6; }
|
||||
if test ! -d "${JIB_HOME}"; then
|
||||
as_fn_error $? "--with-jib must be a directory" "$LINENO" 5
|
||||
fi
|
||||
JIB_JAR=$(ls ${JIB_HOME}/lib/jib-*.jar)
|
||||
if test ! -f "${JIB_JAR}"; then
|
||||
as_fn_error $? "Could not find jib jar file in ${JIB_HOME}" "$LINENO" 5
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# COMPILER_TARGET_BITS_FLAG : option for selecting 32- or 64-bit output
|
||||
# COMPILER_COMMAND_FILE_FLAG : option for passing a command file to the compiler
|
||||
@ -51066,6 +51059,74 @@ $as_echo "$JDK_ARCH_ABI_PROP_NAME" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
# Optional POSIX functionality needed by the JVM
|
||||
#
|
||||
# Check if clock_gettime is available and in which library. This indicates
|
||||
# availability of CLOCK_MONOTONIC for hotspot. But we don't need to link, so
|
||||
# don't let it update LIBS.
|
||||
save_LIBS="$LIBS"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
|
||||
$as_echo_n "checking for library containing clock_gettime... " >&6; }
|
||||
if ${ac_cv_search_clock_gettime+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_func_search_save_LIBS=$LIBS
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char clock_gettime ();
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return clock_gettime ();
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
for ac_lib in '' rt; do
|
||||
if test -z "$ac_lib"; then
|
||||
ac_res="none required"
|
||||
else
|
||||
ac_res=-l$ac_lib
|
||||
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
|
||||
fi
|
||||
if ac_fn_cxx_try_link "$LINENO"; then :
|
||||
ac_cv_search_clock_gettime=$ac_res
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext
|
||||
if ${ac_cv_search_clock_gettime+:} false; then :
|
||||
break
|
||||
fi
|
||||
done
|
||||
if ${ac_cv_search_clock_gettime+:} false; then :
|
||||
|
||||
else
|
||||
ac_cv_search_clock_gettime=no
|
||||
fi
|
||||
rm conftest.$ac_ext
|
||||
LIBS=$ac_func_search_save_LIBS
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
|
||||
$as_echo "$ac_cv_search_clock_gettime" >&6; }
|
||||
ac_res=$ac_cv_search_clock_gettime
|
||||
if test "$ac_res" != no; then :
|
||||
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
|
||||
HAS_CLOCK_GETTIME=true
|
||||
fi
|
||||
|
||||
if test "x$LIBS" = "x-lrt "; then
|
||||
CLOCK_GETTIME_IN_LIBRT=true
|
||||
fi
|
||||
LIBS="$save_LIBS"
|
||||
|
||||
|
||||
# Special extras...
|
||||
if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
|
||||
if test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then
|
||||
@ -51366,7 +51427,7 @@ $as_echo "$as_me: GCC >= 6 detected; adding ${NO_DELETE_NULL_POINTER_CHECKS_CFLA
|
||||
CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal"
|
||||
CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib"
|
||||
elif test "x$TOOLCHAIN_TYPE" = xxlc; then
|
||||
JVM_CFLAGS="$JVM_CFLAGS -D_REENTRANT -D__STDC_FORMAT_MACROS"
|
||||
JVM_CFLAGS="$JVM_CFLAGS -D_REENTRANT"
|
||||
CFLAGS_JDK="$CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
|
||||
CXXFLAGS_JDK="$CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
|
||||
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
|
||||
@ -51431,6 +51492,11 @@ $as_echo "$as_me: GCC >= 6 detected; adding ${NO_DELETE_NULL_POINTER_CHECKS_CFLA
|
||||
fi
|
||||
fi
|
||||
|
||||
# Always enable optional macros for VM.
|
||||
JVM_CFLAGS="$JVM_CFLAGS -D__STDC_FORMAT_MACROS"
|
||||
JVM_CFLAGS="$JVM_CFLAGS -D__STDC_LIMIT_MACROS"
|
||||
JVM_CFLAGS="$JVM_CFLAGS -D__STDC_CONSTANT_MACROS"
|
||||
|
||||
# Setup target OS define. Use OS target name but in upper case.
|
||||
OPENJDK_TARGET_OS_UPPERCASE=`$ECHO $OPENJDK_TARGET_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
|
||||
COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D$OPENJDK_TARGET_OS_UPPERCASE"
|
||||
@ -51450,6 +51516,16 @@ $as_echo "$as_me: GCC >= 6 detected; adding ${NO_DELETE_NULL_POINTER_CHECKS_CFLA
|
||||
COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DDEBUG"
|
||||
fi
|
||||
|
||||
# Optional POSIX functionality needed by the VM
|
||||
|
||||
if test "x$HAS_CLOCK_GETTIME" = "xtrue"; then
|
||||
JVM_CFLAGS="$JVM_CFLAGS -DSUPPORTS_CLOCK_MONOTONIC"
|
||||
if test "x$CLOCK_GETTIME_IN_LIBRT" = "xtrue"; then
|
||||
JVM_CFLAGS="$JVM_CFLAGS -DNEEDS_LIBRT"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Set some additional per-OS defines.
|
||||
if test "x$OPENJDK_TARGET_OS" = xlinux; then
|
||||
JVM_CFLAGS="$JVM_CFLAGS -DLINUX"
|
||||
@ -51458,7 +51534,7 @@ $as_echo "$as_me: GCC >= 6 detected; adding ${NO_DELETE_NULL_POINTER_CHECKS_CFLA
|
||||
elif test "x$OPENJDK_TARGET_OS" = xsolaris; then
|
||||
JVM_CFLAGS="$JVM_CFLAGS -DSOLARIS"
|
||||
JVM_CFLAGS="$JVM_CFLAGS -template=no%extdef -features=no%split_init \
|
||||
-D_Crun_inline_placement -library=%none $PICFLAG -mt -features=no%except"
|
||||
-D_Crun_inline_placement -library=stlport4 $PICFLAG -mt -features=no%except"
|
||||
elif test "x$OPENJDK_TARGET_OS" = xmacosx; then
|
||||
COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
|
||||
JVM_CFLAGS="$JVM_CFLAGS -D_ALLBSD_SOURCE"
|
||||
@ -52230,7 +52306,7 @@ $as_echo "$as_me: GCC >= 6 detected; adding ${NO_DELETE_NULL_POINTER_CHECKS_CFLA
|
||||
OPENJDK_BUILD_CFLAGS_JDK="$OPENJDK_BUILD_CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal"
|
||||
OPENJDK_BUILD_CXXFLAGS_JDK="$OPENJDK_BUILD_CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib"
|
||||
elif test "x$TOOLCHAIN_TYPE" = xxlc; then
|
||||
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -D_REENTRANT -D__STDC_FORMAT_MACROS"
|
||||
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -D_REENTRANT"
|
||||
OPENJDK_BUILD_CFLAGS_JDK="$OPENJDK_BUILD_CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
|
||||
OPENJDK_BUILD_CXXFLAGS_JDK="$OPENJDK_BUILD_CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
|
||||
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
|
||||
@ -52295,6 +52371,11 @@ $as_echo "$as_me: GCC >= 6 detected; adding ${NO_DELETE_NULL_POINTER_CHECKS_CFLA
|
||||
fi
|
||||
fi
|
||||
|
||||
# Always enable optional macros for VM.
|
||||
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -D__STDC_FORMAT_MACROS"
|
||||
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -D__STDC_LIMIT_MACROS"
|
||||
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -D__STDC_CONSTANT_MACROS"
|
||||
|
||||
# Setup target OS define. Use OS target name but in upper case.
|
||||
OPENJDK_BUILD_OS_UPPERCASE=`$ECHO $OPENJDK_BUILD_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
|
||||
OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK="$OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK -D$OPENJDK_BUILD_OS_UPPERCASE"
|
||||
@ -52314,6 +52395,16 @@ $as_echo "$as_me: GCC >= 6 detected; adding ${NO_DELETE_NULL_POINTER_CHECKS_CFLA
|
||||
OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK="$OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK -DDEBUG"
|
||||
fi
|
||||
|
||||
# Optional POSIX functionality needed by the VM
|
||||
|
||||
if test "x$HAS_CLOCK_GETTIME" = "xtrue"; then
|
||||
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -DSUPPORTS_CLOCK_MONOTONIC"
|
||||
if test "x$CLOCK_GETTIME_IN_LIBRT" = "xtrue"; then
|
||||
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -DNEEDS_LIBRT"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Set some additional per-OS defines.
|
||||
if test "x$OPENJDK_BUILD_OS" = xlinux; then
|
||||
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -DLINUX"
|
||||
@ -52322,7 +52413,7 @@ $as_echo "$as_me: GCC >= 6 detected; adding ${NO_DELETE_NULL_POINTER_CHECKS_CFLA
|
||||
elif test "x$OPENJDK_BUILD_OS" = xsolaris; then
|
||||
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -DSOLARIS"
|
||||
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -template=no%extdef -features=no%split_init \
|
||||
-D_Crun_inline_placement -library=%none $PICFLAG -mt -features=no%except"
|
||||
-D_Crun_inline_placement -library=stlport4 $PICFLAG -mt -features=no%except"
|
||||
elif test "x$OPENJDK_BUILD_OS" = xmacosx; then
|
||||
OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK="$OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
|
||||
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -D_ALLBSD_SOURCE"
|
||||
@ -53989,8 +54080,8 @@ $as_echo "no, forced" >&6; }
|
||||
fi
|
||||
|
||||
if test "x$ENABLE_AOT" = "xtrue"; then
|
||||
# Only enable AOT on linux-X64.
|
||||
if test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-x86_64"; then
|
||||
# Only enable AOT on X64 platforms.
|
||||
if test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
|
||||
if test -e "$HOTSPOT_TOPDIR/src/jdk.aot"; then
|
||||
if test -e "$HOTSPOT_TOPDIR/src/jdk.internal.vm.compiler"; then
|
||||
ENABLE_AOT="true"
|
||||
@ -54009,7 +54100,7 @@ $as_echo "no, forced" >&6; }
|
||||
else
|
||||
ENABLE_AOT="false"
|
||||
if test "x$enable_aot" = "xyes"; then
|
||||
as_fn_error $? "AOT is currently only supported on Linux-x86_64. Remove --enable-aot." "$LINENO" 5
|
||||
as_fn_error $? "AOT is currently only supported on x86_64. Remove --enable-aot." "$LINENO" 5
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -62526,7 +62617,7 @@ $as_echo "$FREETYPE_LIB_PATH" >&6; }
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
|
||||
POTENTIAL_FREETYPE_INCLUDE_PATH="$FREETYPE_BASE_DIR/include"
|
||||
POTENTIAL_FREETYPE_LIB_PATH="$FREETYPE_BASE_DIR/lib/x86_64-linux-gnu"
|
||||
POTENTIAL_FREETYPE_LIB_PATH="$FREETYPE_BASE_DIR/lib/$OPENJDK_TARGET_CPU-linux-gnu"
|
||||
METHOD="well-known location"
|
||||
|
||||
# Let's start with an optimistic view of the world :-)
|
||||
@ -65499,279 +65590,6 @@ $as_echo "no, not found at $STLPORT_LIB" >&6; }
|
||||
|
||||
|
||||
|
||||
# Check whether --with-libelf was given.
|
||||
if test "${with_libelf+set}" = set; then :
|
||||
withval=$with_libelf;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --with-libelf-include was given.
|
||||
if test "${with_libelf_include+set}" = set; then :
|
||||
withval=$with_libelf_include;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --with-libelf-lib was given.
|
||||
if test "${with_libelf_lib+set}" = set; then :
|
||||
withval=$with_libelf_lib;
|
||||
fi
|
||||
|
||||
|
||||
if test "x$ENABLE_AOT" = xfalse; then
|
||||
if (test "x${with_libelf}" != x && test "x${with_libelf}" != xno) || \
|
||||
(test "x${with_libelf_include}" != x && test "x${with_libelf_include}" != xno) || \
|
||||
(test "x${with_libelf_lib}" != x && test "x${with_libelf_lib}" != xno); then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libelf is not used, so --with-libelf[-*] is ignored" >&5
|
||||
$as_echo "$as_me: WARNING: libelf is not used, so --with-libelf[-*] is ignored" >&2;}
|
||||
fi
|
||||
LIBELF_CFLAGS=
|
||||
LIBELF_LIBS=
|
||||
else
|
||||
LIBELF_FOUND=no
|
||||
|
||||
if test "x${with_libelf}" = xno || test "x${with_libelf_include}" = xno || test "x${with_libelf_lib}" = xno; then
|
||||
ENABLE_AOT="false"
|
||||
if test "x${enable_aot}" = xyes; then
|
||||
as_fn_error $? "libelf is explicitly disabled, cannot build AOT. Enable libelf or remove --enable-aot to disable AOT." "$LINENO" 5
|
||||
fi
|
||||
else
|
||||
if test "x${with_libelf}" != x; then
|
||||
ELF_LIBS="-L${with_libelf}/lib -lelf"
|
||||
ELF_CFLAGS="-I${with_libelf}/include"
|
||||
LIBELF_FOUND=yes
|
||||
fi
|
||||
if test "x${with_libelf_include}" != x; then
|
||||
ELF_CFLAGS="-I${with_libelf_include}"
|
||||
LIBELF_FOUND=yes
|
||||
fi
|
||||
if test "x${with_libelf_lib}" != x; then
|
||||
ELF_LIBS="-L${with_libelf_lib} -lelf"
|
||||
LIBELF_FOUND=yes
|
||||
fi
|
||||
# Do not try pkg-config if we have a sysroot set.
|
||||
if test "x$SYSROOT" = x; then
|
||||
if test "x$LIBELF_FOUND" = xno; then
|
||||
# Figure out ELF_CFLAGS and ELF_LIBS
|
||||
|
||||
pkg_failed=no
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF" >&5
|
||||
$as_echo_n "checking for ELF... " >&6; }
|
||||
|
||||
if test -n "$ELF_CFLAGS"; then
|
||||
pkg_cv_ELF_CFLAGS="$ELF_CFLAGS"
|
||||
elif test -n "$PKG_CONFIG"; then
|
||||
if test -n "$PKG_CONFIG" && \
|
||||
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libelf\""; } >&5
|
||||
($PKG_CONFIG --exists --print-errors "libelf") 2>&5
|
||||
ac_status=$?
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
pkg_cv_ELF_CFLAGS=`$PKG_CONFIG --cflags "libelf" 2>/dev/null`
|
||||
else
|
||||
pkg_failed=yes
|
||||
fi
|
||||
else
|
||||
pkg_failed=untried
|
||||
fi
|
||||
if test -n "$ELF_LIBS"; then
|
||||
pkg_cv_ELF_LIBS="$ELF_LIBS"
|
||||
elif test -n "$PKG_CONFIG"; then
|
||||
if test -n "$PKG_CONFIG" && \
|
||||
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libelf\""; } >&5
|
||||
($PKG_CONFIG --exists --print-errors "libelf") 2>&5
|
||||
ac_status=$?
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
pkg_cv_ELF_LIBS=`$PKG_CONFIG --libs "libelf" 2>/dev/null`
|
||||
else
|
||||
pkg_failed=yes
|
||||
fi
|
||||
else
|
||||
pkg_failed=untried
|
||||
fi
|
||||
|
||||
|
||||
|
||||
if test $pkg_failed = yes; then
|
||||
|
||||
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
|
||||
_pkg_short_errors_supported=yes
|
||||
else
|
||||
_pkg_short_errors_supported=no
|
||||
fi
|
||||
if test $_pkg_short_errors_supported = yes; then
|
||||
ELF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libelf" 2>&1`
|
||||
else
|
||||
ELF_PKG_ERRORS=`$PKG_CONFIG --print-errors "libelf" 2>&1`
|
||||
fi
|
||||
# Put the nasty error message in config.log where it belongs
|
||||
echo "$ELF_PKG_ERRORS" >&5
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
LIBELF_FOUND=no
|
||||
elif test $pkg_failed = untried; then
|
||||
LIBELF_FOUND=no
|
||||
else
|
||||
ELF_CFLAGS=$pkg_cv_ELF_CFLAGS
|
||||
ELF_LIBS=$pkg_cv_ELF_LIBS
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
LIBELF_FOUND=yes
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test "x$LIBELF_FOUND" = xno; then
|
||||
for ac_header in libelf.h
|
||||
do :
|
||||
ac_fn_cxx_check_header_mongrel "$LINENO" "libelf.h" "ac_cv_header_libelf_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_libelf_h" = xyes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_LIBELF_H 1
|
||||
_ACEOF
|
||||
|
||||
LIBELF_FOUND=yes
|
||||
ELF_CFLAGS=
|
||||
ELF_LIBS=-lelf
|
||||
|
||||
else
|
||||
LIBELF_FOUND=no
|
||||
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
fi
|
||||
if test "x$LIBELF_FOUND" = xno; then
|
||||
ENABLE_AOT="false"
|
||||
|
||||
# Print a helpful message on how to acquire the necessary build dependency.
|
||||
# elf is the help tag: freetype, cups, alsa etc
|
||||
MISSING_DEPENDENCY=elf
|
||||
|
||||
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
|
||||
cygwin_help $MISSING_DEPENDENCY
|
||||
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
|
||||
msys_help $MISSING_DEPENDENCY
|
||||
else
|
||||
PKGHANDLER_COMMAND=
|
||||
|
||||
case $PKGHANDLER in
|
||||
apt-get)
|
||||
apt_help $MISSING_DEPENDENCY ;;
|
||||
yum)
|
||||
yum_help $MISSING_DEPENDENCY ;;
|
||||
brew)
|
||||
brew_help $MISSING_DEPENDENCY ;;
|
||||
port)
|
||||
port_help $MISSING_DEPENDENCY ;;
|
||||
pkgutil)
|
||||
pkgutil_help $MISSING_DEPENDENCY ;;
|
||||
pkgadd)
|
||||
pkgadd_help $MISSING_DEPENDENCY ;;
|
||||
esac
|
||||
|
||||
if test "x$PKGHANDLER_COMMAND" != x; then
|
||||
HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'."
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x${enable_aot}" = xyes; then
|
||||
as_fn_error $? "libelf not found, cannot build AOT. Remove --enable-aot to disable AOT or: $HELP_MSG" "$LINENO" 5
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libelf not found, cannot build AOT. $HELP_MSG" >&5
|
||||
$as_echo "$as_me: WARNING: libelf not found, cannot build AOT. $HELP_MSG" >&2;}
|
||||
fi
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if libelf works" >&5
|
||||
$as_echo_n "checking if libelf works... " >&6; }
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
OLD_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $ELF_CFLAGS"
|
||||
OLD_LIBS="$LIBS"
|
||||
LIBS="$LIBS $ELF_LIBS"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <libelf.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
elf_version(0);
|
||||
return 0;
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
LIBELF_WORKS=yes
|
||||
else
|
||||
LIBELF_WORKS=no
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
CFLAGS="$OLD_CFLAGS"
|
||||
LIBS="$OLD_LIBS"
|
||||
ac_ext=cpp
|
||||
ac_cpp='$CXXCPP $CPPFLAGS'
|
||||
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBELF_WORKS" >&5
|
||||
$as_echo "$LIBELF_WORKS" >&6; }
|
||||
|
||||
if test "x$LIBELF_WORKS" = xno; then
|
||||
ENABLE_AOT="false"
|
||||
|
||||
# Print a helpful message on how to acquire the necessary build dependency.
|
||||
# elf is the help tag: freetype, cups, alsa etc
|
||||
MISSING_DEPENDENCY=elf
|
||||
|
||||
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
|
||||
cygwin_help $MISSING_DEPENDENCY
|
||||
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
|
||||
msys_help $MISSING_DEPENDENCY
|
||||
else
|
||||
PKGHANDLER_COMMAND=
|
||||
|
||||
case $PKGHANDLER in
|
||||
apt-get)
|
||||
apt_help $MISSING_DEPENDENCY ;;
|
||||
yum)
|
||||
yum_help $MISSING_DEPENDENCY ;;
|
||||
brew)
|
||||
brew_help $MISSING_DEPENDENCY ;;
|
||||
port)
|
||||
port_help $MISSING_DEPENDENCY ;;
|
||||
pkgutil)
|
||||
pkgutil_help $MISSING_DEPENDENCY ;;
|
||||
pkgadd)
|
||||
pkgadd_help $MISSING_DEPENDENCY ;;
|
||||
esac
|
||||
|
||||
if test "x$PKGHANDLER_COMMAND" != x; then
|
||||
HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'."
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$enable_aot" = "xyes"; then
|
||||
as_fn_error $? "Found libelf but could not link and compile with it. Remove --enable-aot to disable AOT or: $HELP_MSG" "$LINENO" 5
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Found libelf but could not link and compile with it. $HELP_MSG" >&5
|
||||
$as_echo "$as_me: WARNING: Found libelf but could not link and compile with it. $HELP_MSG" >&2;}
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
@ -65783,14 +65601,7 @@ $as_echo "$as_me: WARNING: Found libelf but could not link and compile with it.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Hotspot setup depends on lib checks (AOT needs libelf).
|
||||
# Hotspot setup depends on lib checks.
|
||||
|
||||
|
||||
# The user can in some cases supply additional jvm features. For the custom
|
||||
|
@ -123,8 +123,6 @@ apt_help() {
|
||||
PKGHANDLER_COMMAND="sudo apt-get install ccache" ;;
|
||||
dtrace)
|
||||
PKGHANDLER_COMMAND="sudo apt-get install systemtap-sdt-dev" ;;
|
||||
elf)
|
||||
PKGHANDLER_COMMAND="sudo apt-get install libelf-dev" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
@ -144,8 +142,6 @@ yum_help() {
|
||||
PKGHANDLER_COMMAND="sudo yum install libXtst-devel libXt-devel libXrender-devel libXi-devel" ;;
|
||||
ccache)
|
||||
PKGHANDLER_COMMAND="sudo yum install ccache" ;;
|
||||
elf)
|
||||
PKGHANDLER_COMMAND="sudo yum install elfutils-libelf-devel" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
@ -212,8 +212,8 @@ AC_DEFUN_ONCE([HOTSPOT_ENABLE_DISABLE_AOT],
|
||||
fi
|
||||
|
||||
if test "x$ENABLE_AOT" = "xtrue"; then
|
||||
# Only enable AOT on linux-X64.
|
||||
if test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-x86_64"; then
|
||||
# Only enable AOT on X64 platforms.
|
||||
if test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
|
||||
if test -e "$HOTSPOT_TOPDIR/src/jdk.aot"; then
|
||||
if test -e "$HOTSPOT_TOPDIR/src/jdk.internal.vm.compiler"; then
|
||||
ENABLE_AOT="true"
|
||||
@ -232,7 +232,7 @@ AC_DEFUN_ONCE([HOTSPOT_ENABLE_DISABLE_AOT],
|
||||
else
|
||||
ENABLE_AOT="false"
|
||||
if test "x$enable_aot" = "xyes"; then
|
||||
AC_MSG_ERROR([AOT is currently only supported on Linux-x86_64. Remove --enable-aot.])
|
||||
AC_MSG_ERROR([AOT is currently only supported on x86_64. Remove --enable-aot.])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
@ -1,129 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Setup libelf (ELF library)
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_LIBELF],
|
||||
[
|
||||
AC_ARG_WITH(libelf, [AS_HELP_STRING([--with-libelf],
|
||||
[specify prefix directory for the libelf package
|
||||
(expecting the libraries under PATH/lib and the headers under PATH/include)])])
|
||||
AC_ARG_WITH(libelf-include, [AS_HELP_STRING([--with-libelf-include],
|
||||
[specify directory for the libelf include files])])
|
||||
AC_ARG_WITH(libelf-lib, [AS_HELP_STRING([--with-libelf-lib],
|
||||
[specify directory for the libelf library])])
|
||||
|
||||
if test "x$ENABLE_AOT" = xfalse; then
|
||||
if (test "x${with_libelf}" != x && test "x${with_libelf}" != xno) || \
|
||||
(test "x${with_libelf_include}" != x && test "x${with_libelf_include}" != xno) || \
|
||||
(test "x${with_libelf_lib}" != x && test "x${with_libelf_lib}" != xno); then
|
||||
AC_MSG_WARN([[libelf is not used, so --with-libelf[-*] is ignored]])
|
||||
fi
|
||||
LIBELF_CFLAGS=
|
||||
LIBELF_LIBS=
|
||||
else
|
||||
LIBELF_FOUND=no
|
||||
|
||||
if test "x${with_libelf}" = xno || test "x${with_libelf_include}" = xno || test "x${with_libelf_lib}" = xno; then
|
||||
ENABLE_AOT="false"
|
||||
if test "x${enable_aot}" = xyes; then
|
||||
AC_MSG_ERROR([libelf is explicitly disabled, cannot build AOT. Enable libelf or remove --enable-aot to disable AOT.])
|
||||
fi
|
||||
else
|
||||
if test "x${with_libelf}" != x; then
|
||||
ELF_LIBS="-L${with_libelf}/lib -lelf"
|
||||
ELF_CFLAGS="-I${with_libelf}/include"
|
||||
LIBELF_FOUND=yes
|
||||
fi
|
||||
if test "x${with_libelf_include}" != x; then
|
||||
ELF_CFLAGS="-I${with_libelf_include}"
|
||||
LIBELF_FOUND=yes
|
||||
fi
|
||||
if test "x${with_libelf_lib}" != x; then
|
||||
ELF_LIBS="-L${with_libelf_lib} -lelf"
|
||||
LIBELF_FOUND=yes
|
||||
fi
|
||||
# Do not try pkg-config if we have a sysroot set.
|
||||
if test "x$SYSROOT" = x; then
|
||||
if test "x$LIBELF_FOUND" = xno; then
|
||||
# Figure out ELF_CFLAGS and ELF_LIBS
|
||||
PKG_CHECK_MODULES([ELF], [libelf], [LIBELF_FOUND=yes], [LIBELF_FOUND=no])
|
||||
fi
|
||||
fi
|
||||
if test "x$LIBELF_FOUND" = xno; then
|
||||
AC_CHECK_HEADERS([libelf.h],
|
||||
[
|
||||
LIBELF_FOUND=yes
|
||||
ELF_CFLAGS=
|
||||
ELF_LIBS=-lelf
|
||||
],
|
||||
[LIBELF_FOUND=no]
|
||||
)
|
||||
fi
|
||||
if test "x$LIBELF_FOUND" = xno; then
|
||||
ENABLE_AOT="false"
|
||||
HELP_MSG_MISSING_DEPENDENCY([elf])
|
||||
if test "x${enable_aot}" = xyes; then
|
||||
AC_MSG_ERROR([libelf not found, cannot build AOT. Remove --enable-aot to disable AOT or: $HELP_MSG])
|
||||
else
|
||||
AC_MSG_WARN([libelf not found, cannot build AOT. $HELP_MSG])
|
||||
fi
|
||||
else
|
||||
AC_MSG_CHECKING([if libelf works])
|
||||
AC_LANG_PUSH(C)
|
||||
OLD_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $ELF_CFLAGS"
|
||||
OLD_LIBS="$LIBS"
|
||||
LIBS="$LIBS $ELF_LIBS"
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <libelf.h>],
|
||||
[
|
||||
elf_version(0);
|
||||
return 0;
|
||||
])],
|
||||
[LIBELF_WORKS=yes],
|
||||
[LIBELF_WORKS=no]
|
||||
)
|
||||
CFLAGS="$OLD_CFLAGS"
|
||||
LIBS="$OLD_LIBS"
|
||||
AC_LANG_POP(C)
|
||||
AC_MSG_RESULT([$LIBELF_WORKS])
|
||||
|
||||
if test "x$LIBELF_WORKS" = xno; then
|
||||
ENABLE_AOT="false"
|
||||
HELP_MSG_MISSING_DEPENDENCY([elf])
|
||||
if test "x$enable_aot" = "xyes"; then
|
||||
AC_MSG_ERROR([Found libelf but could not link and compile with it. Remove --enable-aot to disable AOT or: $HELP_MSG])
|
||||
else
|
||||
AC_MSG_WARN([Found libelf but could not link and compile with it. $HELP_MSG])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(ELF_CFLAGS)
|
||||
AC_SUBST(ELF_LIBS)
|
||||
])
|
@ -366,7 +366,7 @@ AC_DEFUN_ONCE([LIB_SETUP_FREETYPE],
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
FREETYPE_BASE_DIR="$SYSROOT/usr"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib/x86_64-linux-gnu], [well-known location])
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib/$OPENJDK_TARGET_CPU-linux-gnu], [well-known location])
|
||||
else
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib/i386-linux-gnu], [well-known location])
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# 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,6 @@ m4_include([lib-ffi.m4])
|
||||
m4_include([lib-freetype.m4])
|
||||
m4_include([lib-std.m4])
|
||||
m4_include([lib-x11.m4])
|
||||
m4_include([lib-elf.m4])
|
||||
|
||||
################################################################################
|
||||
# Determine which libraries are needed for this configuration
|
||||
@ -91,7 +90,6 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBRARIES],
|
||||
LIB_SETUP_BUNDLED_LIBS
|
||||
LIB_SETUP_MISC_LIBS
|
||||
LIB_SETUP_SOLARIS_STLPORT
|
||||
LIB_SETUP_LIBELF
|
||||
])
|
||||
|
||||
################################################################################
|
||||
|
@ -690,6 +690,7 @@ SETFILE:=@SETFILE@
|
||||
XATTR:=@XATTR@
|
||||
JT_HOME:=@JT_HOME@
|
||||
JTREGEXE:=@JTREGEXE@
|
||||
JIB_JAR:=@JIB_JAR@
|
||||
XCODEBUILD=@XCODEBUILD@
|
||||
DTRACE := @DTRACE@
|
||||
FIXPATH:=@FIXPATH@
|
||||
@ -774,9 +775,6 @@ USE_EXTERNAL_LIBPNG:=@USE_EXTERNAL_LIBPNG@
|
||||
PNG_LIBS:=@PNG_LIBS@
|
||||
PNG_CFLAGS:=@PNG_CFLAGS@
|
||||
|
||||
ELF_CFLAGS:=@ELF_CFLAGS@
|
||||
ELF_LIBS:=@ELF_LIBS@
|
||||
|
||||
####################################################
|
||||
#
|
||||
# Misc
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -1005,3 +1005,31 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG],
|
||||
AC_SUBST(JT_HOME)
|
||||
AC_SUBST(JTREGEXE)
|
||||
])
|
||||
|
||||
# Setup the JIB dependency resolver
|
||||
AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JIB],
|
||||
[
|
||||
AC_ARG_WITH(jib, [AS_HELP_STRING([--with-jib],
|
||||
[Jib dependency management tool @<:@not used@:>@])])
|
||||
|
||||
if test "x$with_jib" = xno || test "x$with_jib" = x; then
|
||||
# jib disabled
|
||||
AC_MSG_CHECKING([for jib])
|
||||
AC_MSG_RESULT(no)
|
||||
elif test "x$with_jib" = xyes; then
|
||||
AC_MSG_ERROR([Must supply a value to --with-jib])
|
||||
else
|
||||
JIB_HOME="${with_jib}"
|
||||
AC_MSG_CHECKING([for jib])
|
||||
AC_MSG_RESULT(${JIB_HOME})
|
||||
if test ! -d "${JIB_HOME}"; then
|
||||
AC_MSG_ERROR([--with-jib must be a directory])
|
||||
fi
|
||||
JIB_JAR=$(ls ${JIB_HOME}/lib/jib-*.jar)
|
||||
if test ! -f "${JIB_JAR}"; then
|
||||
AC_MSG_ERROR([Could not find jib jar file in ${JIB_HOME}])
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(JIB_JAR)
|
||||
])
|
||||
|
@ -237,7 +237,7 @@ var getJibProfilesCommon = function (input, data) {
|
||||
|
||||
// These are the base setttings for all the main build profiles.
|
||||
common.main_profile_base = {
|
||||
dependencies: ["boot_jdk", "gnumake", "jtreg"],
|
||||
dependencies: ["boot_jdk", "gnumake", "jtreg", "jib"],
|
||||
default_make_targets: ["product-bundles", "test-bundles"],
|
||||
configure_args: concat(["--enable-jtreg-failure-handler"],
|
||||
versionArgs(input, common))
|
||||
@ -590,7 +590,7 @@ var getJibProfilesProfiles = function (input, common, data) {
|
||||
"run-test-jprt": {
|
||||
target_os: input.build_os,
|
||||
target_cpu: input.build_cpu,
|
||||
dependencies: [ "jtreg", "gnumake", "boot_jdk" ],
|
||||
dependencies: [ "jtreg", "gnumake", "boot_jdk", "devkit", "jib" ],
|
||||
labels: "test",
|
||||
environment: {
|
||||
"JT_JAVA": common.boot_jdk_home
|
||||
@ -600,7 +600,7 @@ var getJibProfilesProfiles = function (input, common, data) {
|
||||
"run-test": {
|
||||
target_os: input.build_os,
|
||||
target_cpu: input.build_cpu,
|
||||
dependencies: [ "jtreg", "gnumake", "boot_jdk" ],
|
||||
dependencies: [ "jtreg", "gnumake", "boot_jdk", "devkit", "jib" ],
|
||||
labels: "test",
|
||||
environment: {
|
||||
"JT_JAVA": common.boot_jdk_home
|
||||
@ -619,7 +619,7 @@ var getJibProfilesProfiles = function (input, common, data) {
|
||||
target_os: input.build_os,
|
||||
target_cpu: input.build_cpu,
|
||||
src: "src.conf",
|
||||
dependencies: [ "jtreg", "gnumake", "boot_jdk", testedProfile + ".jdk",
|
||||
dependencies: [ "jtreg", "gnumake", "boot_jdk", "jib", testedProfile + ".jdk",
|
||||
testedProfile + ".test", "src.full"
|
||||
],
|
||||
work_dir: input.get("src.full", "install_path") + "/test",
|
||||
@ -974,7 +974,7 @@ var getJibProfilesDependencies = function (input, common) {
|
||||
jtreg: {
|
||||
server: "javare",
|
||||
revision: "4.2",
|
||||
build_number: "b07",
|
||||
build_number: "b08",
|
||||
checksum_file: "MD5_VALUES",
|
||||
file: "jtreg_bin-4.2.zip",
|
||||
environment_name: "JT_HOME",
|
||||
@ -1023,8 +1023,26 @@ var getJibProfilesDependencies = function (input, common) {
|
||||
configure_args: "PANDOC=" + input.get("pandoc", "install_path") + "/pandoc/pandoc",
|
||||
environment_path: input.get("pandoc", "install_path") + "/pandoc"
|
||||
},
|
||||
// This adds java jib as a dependency for the test artifacts resolver
|
||||
jib: {
|
||||
organization: "com.oracle.java.jib",
|
||||
ext: "zip",
|
||||
classifier: "distribution",
|
||||
revision: "3.0-SNAPSHOT",
|
||||
environment_name: "JIB_JAR",
|
||||
environment_value: input.get("jib", "install_path")
|
||||
+ "/jib-3.0-SNAPSHOT-distribution/lib/jib-3.0-SNAPSHOT.jar"
|
||||
}
|
||||
};
|
||||
|
||||
// Need to add a value for the Visual Studio tools variable to make
|
||||
// jaot be able to pick up the Visual Studio linker in testing.
|
||||
if (input.target_os == "windows") {
|
||||
dependencies.devkit.environment = {
|
||||
VS120COMNTOOLS: input.get("devkit", "install_path") + "/Common7/Tools"
|
||||
};
|
||||
}
|
||||
|
||||
return dependencies;
|
||||
};
|
||||
|
||||
|
@ -58,7 +58,6 @@
|
||||
<li><a href="#x11">X11</a></li>
|
||||
<li><a href="#alsa">ALSA</a></li>
|
||||
<li><a href="#libffi">libffi</a></li>
|
||||
<li><a href="#libelf">libelf</a></li>
|
||||
</ul></li>
|
||||
<li><a href="#other-tooling-requirements">Other Tooling Requirements</a><ul>
|
||||
<li><a href="#gnu-make">GNU Make</a></li>
|
||||
@ -469,13 +468,6 @@ tar -xzf freetype-2.5.3.tar.gz</code></pre>
|
||||
<li>To install on an rpm-based Linux, try running <code>sudo yum install libffi-devel</code>.</li>
|
||||
</ul>
|
||||
<p>Use <code>--with-libffi=<path></code> if <code>configure</code> does not properly locate your libffi files.</p>
|
||||
<h3 id="libelf">libelf</h3>
|
||||
<p>libelf from the <a href="http://sourceware.org/elfutils">elfutils project</a> is required when building the AOT feature of Hotspot.</p>
|
||||
<ul>
|
||||
<li>To install on an apt-based Linux, try running <code>sudo apt-get install libelf-dev</code>.</li>
|
||||
<li>To install on an rpm-based Linux, try running <code>sudo yum install elfutils-libelf-devel</code>.</li>
|
||||
</ul>
|
||||
<p>Use <code>--with-libelf=<path></code> if <code>configure</code> does not properly locate your libelf files.</p>
|
||||
<h2 id="other-tooling-requirements">Other Tooling Requirements</h2>
|
||||
<h3 id="gnu-make">GNU Make</h3>
|
||||
<p>OpenJDK requires <a href="http://www.gnu.org/software/make">GNU Make</a>. No other flavors of make are supported.</p>
|
||||
@ -537,7 +529,6 @@ tar -xzf freetype-2.5.3.tar.gz</code></pre>
|
||||
<li><code>--with-x=<path></code> - Set the path to <a href="#x11">X11</a></li>
|
||||
<li><code>--with-alsa=<path></code> - Set the path to <a href="#alsa">ALSA</a></li>
|
||||
<li><code>--with-libffi=<path></code> - Set the path to <a href="#libffi">libffi</a></li>
|
||||
<li><code>--with-libelf=<path></code> - Set the path to <a href="#libelf">libelf</a></li>
|
||||
<li><code>--with-jtreg=<path></code> - Set the path to JTReg. See <a href="#running-tests">Running Tests</a></li>
|
||||
</ul>
|
||||
<p>Certain third-party libraries used by OpenJDK (libjpeg, giflib, libpng, lcms and zlib) are included in the OpenJDK repository. The default behavior of the OpenJDK build is to use this version of these libraries, but they might be replaced by an external version. To do so, specify <code>system</code> as the <code><source></code> option in these arguments. (The default is <code>bundled</code>).</p>
|
||||
|
@ -648,19 +648,6 @@ Hotspot.
|
||||
Use `--with-libffi=<path>` if `configure` does not properly locate your libffi
|
||||
files.
|
||||
|
||||
### libelf
|
||||
|
||||
libelf from the [elfutils project](http://sourceware.org/elfutils) is required
|
||||
when building the AOT feature of Hotspot.
|
||||
|
||||
* To install on an apt-based Linux, try running `sudo apt-get install
|
||||
libelf-dev`.
|
||||
* To install on an rpm-based Linux, try running `sudo yum install
|
||||
elfutils-libelf-devel`.
|
||||
|
||||
Use `--with-libelf=<path>` if `configure` does not properly locate your libelf
|
||||
files.
|
||||
|
||||
## Other Tooling Requirements
|
||||
|
||||
### GNU Make
|
||||
@ -813,7 +800,6 @@ features, use `bash configure --help=short` instead.)
|
||||
* `--with-x=<path>` - Set the path to [X11](#x11)
|
||||
* `--with-alsa=<path>` - Set the path to [ALSA](#alsa)
|
||||
* `--with-libffi=<path>` - Set the path to [libffi](#libffi)
|
||||
* `--with-libelf=<path>` - Set the path to [libelf](#libelf)
|
||||
* `--with-jtreg=<path>` - Set the path to JTReg. See [Running Tests](
|
||||
#running-tests)
|
||||
|
||||
|
@ -444,3 +444,4 @@ a923b3f30e7bddb4f960059ddfc7978fc63e2e6e jdk-10+18
|
||||
28488561cfbcfa4d0d9c489e8afe0155f4231360 jdk-10+19
|
||||
6ce6cb8ff41c71c49f23b15e0f0468aca5d52b17 jdk-9+180
|
||||
ba71941ad9dba53b8fffb30602ef673eee88696c jdk-9+181
|
||||
7a54ec280513a33e49e60546c0cf9ca573925a43 jdk-10+20
|
||||
|
@ -605,3 +605,4 @@ c9d3317623d48da3327232c81e3f8cfc0d29d888 jdk-10+18
|
||||
d7baadc223e790c08bc69bf7e553bce65b4e7e40 jdk-9+180
|
||||
4a443796f6f57842d6a0434ac27ca3d1033ccc20 jdk-9+181
|
||||
e93ed1a092409351c90b3a76d80b9aa8b44d5e6a jdk-10+20
|
||||
bdb2dbc43ff065b74c2121bdfb0d6e1fa8684b73 jdk-10+21
|
||||
|
47
hotspot/test/compiler/jvmci/TestValidateModules.java
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 8186145
|
||||
* @requires vm.jvmci
|
||||
* @library /test/lib
|
||||
* @build TestValidateModules jdk.test.lib.process.*
|
||||
* @run main TestValidateModules
|
||||
* @summary Ensure java --validate-modules works with --XX:+EnableJVMCI
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
public class TestValidateModules {
|
||||
public static void main(String... args) throws Exception {
|
||||
ProcessTools.executeTestJava("-XX:+UnlockExperimentalVMOptions",
|
||||
"-XX:+EnableJVMCI",
|
||||
"--validate-modules")
|
||||
.outputTo(System.out)
|
||||
.errorTo(System.out)
|
||||
.stdoutShouldContain("java.base")
|
||||
.stdoutShouldContain("jdk.internal.vm.ci")
|
||||
.shouldHaveExitValue(0);
|
||||
}
|
||||
}
|
@ -444,3 +444,4 @@ d109d55cf642bf2b438624e81f94c18c168f9178 jdk-10+16
|
||||
f5789425c26cee0274d0e2ebabb21faf268f218f jdk-10+19
|
||||
9934a03646f91ce55f61f53d8448c629828f8088 jdk-9+180
|
||||
ea18d767c9ec50ea7f40bbe6cf7379d3538110f1 jdk-9+181
|
||||
f7d596aa57aece4e5f473b1ac97e26cd0aebc647 jdk-10+20
|
||||
|
@ -23,7 +23,7 @@ modules=java.xml
|
||||
groups=TEST.groups
|
||||
|
||||
# Minimum jtreg version
|
||||
requiredVersion=4.2 b07
|
||||
requiredVersion=4.2 b08
|
||||
|
||||
# Path to libraries in the topmost test directory. This is needed so @library
|
||||
# does not need ../../ notation to reach them
|
||||
|
@ -25,7 +25,7 @@
|
||||
* @test
|
||||
* @bug 8003147
|
||||
* @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
|
||||
* @compile Bug8003147TestClass.java
|
||||
* @compile -g Bug8003147TestClass.java
|
||||
* @run testng/othervm -DrunSecMngr=true parsers.Bug8003147Test
|
||||
* @run testng/othervm parsers.Bug8003147Test
|
||||
* @summary Test port fix for BCEL bug 39695.
|
||||
@ -52,16 +52,17 @@ import com.sun.org.apache.bcel.internal.classfile.JavaClass;
|
||||
import com.sun.org.apache.bcel.internal.classfile.Method;
|
||||
import com.sun.org.apache.bcel.internal.generic.ClassGen;
|
||||
import com.sun.org.apache.bcel.internal.generic.MethodGen;
|
||||
import com.sun.org.apache.bcel.internal.generic.InstructionFactory;
|
||||
import com.sun.org.apache.bcel.internal.generic.InstructionList;
|
||||
|
||||
@Listeners({ jaxp.library.FilePolicy.class, jaxp.library.InternalAPIPolicy.class })
|
||||
public class Bug8003147Test {
|
||||
|
||||
@Test
|
||||
public void test() throws Exception {
|
||||
// Note: com.sun.org.apache.bcel.internal.classfile.JavaClass doesn't
|
||||
// support InvokeDynamic, so can't use lambda, also can't use string1 +
|
||||
// string2, because javac will generate a dynamic call where invoking
|
||||
// string1.concat(string2), so create a separate Bug8003147TestClass
|
||||
// Note: Because BCEL library is always behind java version, to make sure
|
||||
// JavaClass can parse the class file, create a separate
|
||||
// Bug8003147TestClass.java, which only uses basic features.
|
||||
JAXPTestUtilities.tryRunWithTmpPermission(() -> {
|
||||
String classfile = getSystemProperty("test.classes") + "/parsers/Bug8003147TestClass.class";
|
||||
JavaClass jc = new ClassParser(classfile).parse();
|
||||
@ -80,6 +81,16 @@ public class Bug8003147Test {
|
||||
}
|
||||
Method m = methods[index];
|
||||
MethodGen mg = new MethodGen(m, gen.getClassName(), gen.getConstantPool());
|
||||
|
||||
// @bug 8064516, not currently used directly by JAXP, but we may need
|
||||
// to modify preexisting methods in the future.
|
||||
InstructionFactory f = new InstructionFactory(gen);
|
||||
InstructionList il = mg.getInstructionList();
|
||||
InstructionList newInst = new InstructionList();
|
||||
newInst.append(f.createPrintln("Hello Sekai!"));
|
||||
il.insert(newInst);
|
||||
mg.setMaxStack();
|
||||
|
||||
gen.replaceMethod(m, mg.getMethod());
|
||||
String path = classfile.replace("Bug8003147TestClass", "Bug8003147TestClassPrime");
|
||||
gen.getJavaClass().dump(new FileOutputStream(path));
|
||||
|
@ -447,3 +447,4 @@ d0190aaf1816081d9b2e0577b65b793804896d1e jdk-9+178
|
||||
0c3c118b0245165ed46dc32d0a28c39648de7cdb jdk-10+19
|
||||
f112f294a89ea61260b645f450bd37fd6578a5e8 jdk-9+180
|
||||
4f852cc3a1c998e78a989ba4667ffa9b867d9d01 jdk-9+181
|
||||
1658a5e7d171e9c3cc2462fac2789ec63294ecca jdk-10+20
|
||||
|
@ -444,3 +444,4 @@ c4b709bad6c5d29294124de5e74e1e2ac84fcf1f jdk-10+18
|
||||
b561eeca30decc6258b4aca8bb23beffbb6e2f7d jdk-10+19
|
||||
4feab1acec6a9c3620a19ff379a65ab8618d0e2a jdk-9+180
|
||||
bd66ea2fdde3d60a73b5272263a7b8b0ca926a33 jdk-9+181
|
||||
6256e94781f55e6f9e04eb284298d00eb9c5e106 jdk-10+20
|
||||
|
@ -46,6 +46,7 @@ $(eval $(call SetupBuildLauncher, jaotc, \
|
||||
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.runtime=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \
|
||||
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.sparc=$(call CommaList, jdk.internal.vm.compiler jdk.aot) \
|
||||
-XX:+UseAOT \
|
||||
-XX:+CalculateClassFingerprint \
|
||||
-Djvmci.UseProfilingInformation=false \
|
||||
-Dgraal.UseExceptionProbability=false \
|
||||
-Djvmci.Compiler=graal \
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,7 +27,6 @@
|
||||
|
||||
SUNWprivate_1.1 {
|
||||
global:
|
||||
Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo;
|
||||
Java_com_sun_security_auth_module_UnixSystem_getUnixInfo;
|
||||
local:
|
||||
*;
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -35,12 +35,14 @@ include $(SPEC)
|
||||
include MakeBase.gmk
|
||||
include TestFilesCompilation.gmk
|
||||
|
||||
$(eval $(call IncludeCustomExtension, jdk, test/JtregNative.gmk))
|
||||
|
||||
################################################################################
|
||||
# Targets for building the native tests themselves.
|
||||
################################################################################
|
||||
|
||||
# Add more directories here when needed.
|
||||
BUILD_JDK_JTREG_NATIVE_SRC := \
|
||||
BUILD_JDK_JTREG_NATIVE_SRC += \
|
||||
$(JDK_TOPDIR)/test/native_sanity \
|
||||
$(JDK_TOPDIR)/test/java/lang/String/nativeEncoding \
|
||||
#
|
||||
|
@ -64,7 +64,7 @@
|
||||
#include <sys/uio.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sys/poll.h>
|
||||
#include <poll.h>
|
||||
#include "jvm.h"
|
||||
#include "net_util.h"
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/poll.h>
|
||||
#include <poll.h>
|
||||
#include <sys/pollset.h>
|
||||
#include <fcntl.h>
|
||||
#include <stddef.h>
|
||||
|
@ -36,7 +36,7 @@
|
||||
#include <sys/uio.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sys/poll.h>
|
||||
#include <poll.h>
|
||||
#include "jvm.h"
|
||||
#include "net_util.h"
|
||||
|
||||
|
@ -32,7 +32,7 @@
|
||||
#include <dlfcn.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/poll.h>
|
||||
#include <poll.h>
|
||||
#include <sys/inotify.h>
|
||||
|
||||
#include "sun_nio_fs_LinuxWatchService.h"
|
||||
|
@ -60,7 +60,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/signal.h>
|
||||
#include <signal.h>
|
||||
|
||||
/* O Flags */
|
||||
|
||||
|
@ -290,8 +290,6 @@ static int (*main_fptr)(int argc, char **argv) = NULL;
|
||||
*/
|
||||
static void *apple_main (void *arg)
|
||||
{
|
||||
objc_registerThreadWithCollector();
|
||||
|
||||
if (main_fptr == NULL) {
|
||||
#ifdef STATIC_BUILD
|
||||
extern int main(int argc, char **argv);
|
||||
@ -732,6 +730,7 @@ ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void
|
||||
if (stack_size > 0) {
|
||||
pthread_attr_setstacksize(&attr, stack_size);
|
||||
}
|
||||
pthread_attr_setguardsize(&attr, 0); // no pthread guard page on java threads
|
||||
|
||||
if (pthread_create(&tid, &attr, (void *(*)(void*))continuation, (void*)args) == 0) {
|
||||
void * tmp;
|
||||
@ -771,7 +770,7 @@ JLI_GetJavaVMInstance()
|
||||
void
|
||||
RegisterThread()
|
||||
{
|
||||
objc_registerThreadWithCollector();
|
||||
// stubbed out for windows and *nixes.
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -38,7 +38,7 @@
|
||||
#include <sys/uio.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sys/poll.h>
|
||||
#include <poll.h>
|
||||
#include "jvm.h"
|
||||
#include "net_util.h"
|
||||
|
||||
|
@ -24,7 +24,8 @@
|
||||
*/
|
||||
|
||||
package java.io;
|
||||
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
|
||||
|
||||
import jdk.internal.misc.Unsafe;
|
||||
|
||||
/**
|
||||
* A <code>BufferedInputStream</code> adds
|
||||
@ -60,23 +61,28 @@ class BufferedInputStream extends FilterInputStream {
|
||||
*/
|
||||
private static int MAX_BUFFER_SIZE = Integer.MAX_VALUE - 8;
|
||||
|
||||
/**
|
||||
* As this class is used early during bootstrap, it's motivated to use
|
||||
* Unsafe.compareAndSetObject instead of AtomicReferenceFieldUpdater
|
||||
* (or VarHandles) to reduce dependencies and improve startup time.
|
||||
*/
|
||||
private static final Unsafe U = Unsafe.getUnsafe();
|
||||
|
||||
private static final long BUF_OFFSET
|
||||
= U.objectFieldOffset(BufferedInputStream.class, "buf");
|
||||
|
||||
/**
|
||||
* The internal buffer array where the data is stored. When necessary,
|
||||
* it may be replaced by another array of
|
||||
* a different size.
|
||||
*/
|
||||
protected volatile byte buf[];
|
||||
|
||||
/**
|
||||
* Atomic updater to provide compareAndSet for buf. This is
|
||||
* necessary because closes can be asynchronous. We use nullness
|
||||
* of buf[] as primary indicator that this stream is closed. (The
|
||||
* "in" field is also nulled out on close.)
|
||||
/*
|
||||
* We null this out with a CAS on close(), which is necessary since
|
||||
* closes can be asynchronous. We use nullness of buf[] as primary
|
||||
* indicator that this stream is closed. (The "in" field is also
|
||||
* nulled out on close.)
|
||||
*/
|
||||
private static final
|
||||
AtomicReferenceFieldUpdater<BufferedInputStream, byte[]> bufUpdater =
|
||||
AtomicReferenceFieldUpdater.newUpdater
|
||||
(BufferedInputStream.class, byte[].class, "buf");
|
||||
protected volatile byte[] buf;
|
||||
|
||||
/**
|
||||
* The index one greater than the index of the last valid byte in
|
||||
@ -230,9 +236,9 @@ class BufferedInputStream extends FilterInputStream {
|
||||
pos * 2 : MAX_BUFFER_SIZE;
|
||||
if (nsz > marklimit)
|
||||
nsz = marklimit;
|
||||
byte nbuf[] = new byte[nsz];
|
||||
byte[] nbuf = new byte[nsz];
|
||||
System.arraycopy(buffer, 0, nbuf, 0, pos);
|
||||
if (!bufUpdater.compareAndSet(this, buffer, nbuf)) {
|
||||
if (!U.compareAndSetObject(this, BUF_OFFSET, buffer, nbuf)) {
|
||||
// Can't replace buf if there was an async close.
|
||||
// Note: This would need to be changed if fill()
|
||||
// is ever made accessible to multiple threads.
|
||||
@ -476,7 +482,7 @@ class BufferedInputStream extends FilterInputStream {
|
||||
public void close() throws IOException {
|
||||
byte[] buffer;
|
||||
while ( (buffer = buf) != null) {
|
||||
if (bufUpdater.compareAndSet(this, buffer, null)) {
|
||||
if (U.compareAndSetObject(this, BUF_OFFSET, buffer, null)) {
|
||||
InputStream input = in;
|
||||
in = null;
|
||||
if (input != null)
|
||||
|
@ -2241,22 +2241,12 @@ public class File
|
||||
UNSAFE.putIntVolatile(this, PREFIX_LENGTH_OFFSET, fs.prefixLength(path));
|
||||
}
|
||||
|
||||
private static final long PATH_OFFSET;
|
||||
private static final long PREFIX_LENGTH_OFFSET;
|
||||
private static final jdk.internal.misc.Unsafe UNSAFE;
|
||||
static {
|
||||
try {
|
||||
jdk.internal.misc.Unsafe unsafe = jdk.internal.misc.Unsafe.getUnsafe();
|
||||
PATH_OFFSET = unsafe.objectFieldOffset(
|
||||
File.class.getDeclaredField("path"));
|
||||
PREFIX_LENGTH_OFFSET = unsafe.objectFieldOffset(
|
||||
File.class.getDeclaredField("prefixLength"));
|
||||
UNSAFE = unsafe;
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static final jdk.internal.misc.Unsafe UNSAFE
|
||||
= jdk.internal.misc.Unsafe.getUnsafe();
|
||||
private static final long PATH_OFFSET
|
||||
= UNSAFE.objectFieldOffset(File.class, "path");
|
||||
private static final long PREFIX_LENGTH_OFFSET
|
||||
= UNSAFE.objectFieldOffset(File.class, "prefixLength");
|
||||
|
||||
/** use serialVersionUID from JDK 1.0.2 for interoperability */
|
||||
private static final long serialVersionUID = 301077366599181567L;
|
||||
|
@ -2864,26 +2864,14 @@ public final class Class<T> implements java.io.Serializable,
|
||||
// and have to avoid calling it in the static initializer of the Class class...
|
||||
private static final Unsafe unsafe = Unsafe.getUnsafe();
|
||||
// offset of Class.reflectionData instance field
|
||||
private static final long reflectionDataOffset;
|
||||
private static final long reflectionDataOffset
|
||||
= unsafe.objectFieldOffset(Class.class, "reflectionData");
|
||||
// offset of Class.annotationType instance field
|
||||
private static final long annotationTypeOffset;
|
||||
private static final long annotationTypeOffset
|
||||
= unsafe.objectFieldOffset(Class.class, "annotationType");
|
||||
// offset of Class.annotationData instance field
|
||||
private static final long annotationDataOffset;
|
||||
|
||||
static {
|
||||
Field[] fields = Class.class.getDeclaredFields0(false); // bypass caches
|
||||
reflectionDataOffset = objectFieldOffset(fields, "reflectionData");
|
||||
annotationTypeOffset = objectFieldOffset(fields, "annotationType");
|
||||
annotationDataOffset = objectFieldOffset(fields, "annotationData");
|
||||
}
|
||||
|
||||
private static long objectFieldOffset(Field[] fields, String fieldName) {
|
||||
Field field = searchFields(fields, fieldName);
|
||||
if (field == null) {
|
||||
throw new Error("No " + fieldName + " field found in java.lang.Class");
|
||||
}
|
||||
return unsafe.objectFieldOffset(field);
|
||||
}
|
||||
private static final long annotationDataOffset
|
||||
= unsafe.objectFieldOffset(Class.class, "annotationData");
|
||||
|
||||
static <T> boolean casReflectionData(Class<?> clazz,
|
||||
SoftReference<ReflectionData<T>> oldData,
|
||||
|
@ -30,7 +30,6 @@ import java.io.IOException;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.net.URL;
|
||||
import java.security.AccessController;
|
||||
import java.security.AccessControlContext;
|
||||
@ -2895,12 +2894,7 @@ public abstract class ClassLoader {
|
||||
Unsafe unsafe = Unsafe.getUnsafe();
|
||||
Class<?> k = ClassLoader.class;
|
||||
long offset;
|
||||
try {
|
||||
Field f = k.getDeclaredField(name);
|
||||
offset = unsafe.objectFieldOffset(f);
|
||||
} catch (NoSuchFieldException e) {
|
||||
throw new InternalError(e);
|
||||
}
|
||||
offset = unsafe.objectFieldOffset(k, name);
|
||||
return unsafe.compareAndSetObject(this, offset, null, obj);
|
||||
}
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ public final class Module implements AnnotatedElement {
|
||||
|
||||
// define module to VM
|
||||
|
||||
boolean isOpen = descriptor.isOpen();
|
||||
boolean isOpen = descriptor.isOpen() || descriptor.isAutomatic();
|
||||
Version version = descriptor.version().orElse(null);
|
||||
String vs = Objects.toString(version, null);
|
||||
String loc = Objects.toString(uri, null);
|
||||
@ -1156,18 +1156,14 @@ public final class Module implements AnnotatedElement {
|
||||
m.implAddReads(ALL_UNNAMED_MODULE, true);
|
||||
}
|
||||
|
||||
// exports and opens
|
||||
if (descriptor.isOpen() || descriptor.isAutomatic()) {
|
||||
// The VM doesn't special case open or automatic modules yet
|
||||
// so need to export all packages
|
||||
for (String source : descriptor.packages()) {
|
||||
addExportsToAll0(m, source);
|
||||
// exports and opens, skipped for open and automatic
|
||||
if (!descriptor.isOpen() && !descriptor.isAutomatic()) {
|
||||
if (isBootLayer && descriptor.opens().isEmpty()) {
|
||||
// no open packages, no qualified exports to modules in parent layers
|
||||
initExports(m, nameToModule);
|
||||
} else {
|
||||
initExportsAndOpens(m, nameToSource, nameToModule, layer.parents());
|
||||
}
|
||||
} else if (isBootLayer && descriptor.opens().isEmpty()) {
|
||||
// no open packages, no qualified exports to modules in parent layers
|
||||
initExports(m, nameToModule);
|
||||
} else {
|
||||
initExportsAndOpens(m, nameToSource, nameToModule, layer.parents());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -132,34 +132,37 @@ final class ProcessHandleImpl implements ProcessHandle {
|
||||
// newCompletion has just been installed successfully
|
||||
completion = newCompletion;
|
||||
// spawn a thread to wait for and deliver the exit value
|
||||
processReaperExecutor.execute(() -> {
|
||||
int exitValue = waitForProcessExit0(pid, shouldReap);
|
||||
if (exitValue == NOT_A_CHILD) {
|
||||
// pid not alive or not a child of this process
|
||||
// If it is alive wait for it to terminate
|
||||
long sleep = 300; // initial milliseconds to sleep
|
||||
int incr = 30; // increment to the sleep time
|
||||
processReaperExecutor.execute(new Runnable() {
|
||||
// Use inner class to avoid lambda stack overhead
|
||||
public void run() {
|
||||
int exitValue = waitForProcessExit0(pid, shouldReap);
|
||||
if (exitValue == NOT_A_CHILD) {
|
||||
// pid not alive or not a child of this process
|
||||
// If it is alive wait for it to terminate
|
||||
long sleep = 300; // initial milliseconds to sleep
|
||||
int incr = 30; // increment to the sleep time
|
||||
|
||||
long startTime = isAlive0(pid);
|
||||
long origStart = startTime;
|
||||
while (startTime >= 0) {
|
||||
try {
|
||||
Thread.sleep(Math.min(sleep, 5000L)); // no more than 5 sec
|
||||
sleep += incr;
|
||||
} catch (InterruptedException ie) {
|
||||
// ignore and retry
|
||||
}
|
||||
startTime = isAlive0(pid); // recheck if is alive
|
||||
if (origStart > 0 && startTime != origStart) {
|
||||
// start time changed, pid is not the same process
|
||||
break;
|
||||
long startTime = isAlive0(pid);
|
||||
long origStart = startTime;
|
||||
while (startTime >= 0) {
|
||||
try {
|
||||
Thread.sleep(Math.min(sleep, 5000L)); // no more than 5 sec
|
||||
sleep += incr;
|
||||
} catch (InterruptedException ie) {
|
||||
// ignore and retry
|
||||
}
|
||||
startTime = isAlive0(pid); // recheck if is alive
|
||||
if (origStart > 0 && startTime != origStart) {
|
||||
// start time changed, pid is not the same process
|
||||
break;
|
||||
}
|
||||
}
|
||||
exitValue = 0;
|
||||
}
|
||||
exitValue = 0;
|
||||
newCompletion.complete(exitValue);
|
||||
// remove from cache afterwards
|
||||
completions.remove(pid, newCompletion);
|
||||
}
|
||||
newCompletion.complete(exitValue);
|
||||
// remove from cache afterwards
|
||||
completions.remove(pid, newCompletion);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -2488,12 +2488,8 @@ public final class String
|
||||
* <tr>
|
||||
* <td>(all)</td>
|
||||
* <th scope="row" style="font-weight:normal; text-align:left">
|
||||
* <img src="doc-files/capiota.gif" alt="capiota"><img src="doc-files/capchi.gif" alt="capchi">
|
||||
* <img src="doc-files/captheta.gif" alt="captheta"><img src="doc-files/capupsil.gif" alt="capupsil">
|
||||
* <img src="doc-files/capsigma.gif" alt="capsigma"></th>
|
||||
* <td><img src="doc-files/iota.gif" alt="iota"><img src="doc-files/chi.gif" alt="chi">
|
||||
* <img src="doc-files/theta.gif" alt="theta"><img src="doc-files/upsilon.gif" alt="upsilon">
|
||||
* <img src="doc-files/sigma1.gif" alt="sigma"></td>
|
||||
* ΙΧΘΥΣ</th>
|
||||
* <td>ιχθυσ</td>
|
||||
* <td>lowercased all chars in String</td>
|
||||
* </tr>
|
||||
* </tbody>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Value-based Classes</title>
|
||||
|
Before Width: | Height: | Size: 144 B |
Before Width: | Height: | Size: 111 B |
Before Width: | Height: | Size: 131 B |
Before Width: | Height: | Size: 153 B |
Before Width: | Height: | Size: 140 B |
Before Width: | Height: | Size: 145 B |
Before Width: | Height: | Size: 112 B |
Before Width: | Height: | Size: 206 B |
Before Width: | Height: | Size: 220 B |
Before Width: | Height: | Size: 187 B |
Before Width: | Height: | Size: 191 B |
Before Width: | Height: | Size: 135 B |
Before Width: | Height: | Size: 144 B |
@ -1,3 +1,4 @@
|
||||
<!doctype html>
|
||||
<!--
|
||||
Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
@ -22,7 +23,6 @@
|
||||
or visit www.oracle.com if you need additional information or have any
|
||||
questions.
|
||||
-->
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Java Thread Primitive Deprecation</title>
|
||||
@ -30,7 +30,7 @@
|
||||
</head>
|
||||
<body>
|
||||
<h2>Java Thread Primitive Deprecation</h2>
|
||||
<hr size="3" noshade="noshade" />
|
||||
<hr>
|
||||
<h3>Why is <code>Thread.stop</code> deprecated?</h3>
|
||||
<p>Because it is inherently unsafe. Stopping a thread causes it to
|
||||
unlock all the monitors that it has locked. (The monitors are
|
||||
@ -45,7 +45,7 @@ detect, or it may be pronounced. Unlike other unchecked exceptions,
|
||||
no warning that his program may be corrupted. The corruption can
|
||||
manifest itself at any time after the actual damage occurs, even
|
||||
hours or days in the future.</p>
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>Couldn't I just catch the <code>ThreadDeath</code> exception
|
||||
and fix the damaged object?</h3>
|
||||
<p>In theory, perhaps, but it would <em>vastly</em> complicate the
|
||||
@ -61,7 +61,7 @@ while cleaning up from the first (in the <code>catch</code> or
|
||||
it succeeded. The code to ensure this would be quite complex.</li>
|
||||
</ol>
|
||||
In sum, it just isn't practical.
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>What about <code>Thread.stop(Throwable)</code>?</h3>
|
||||
<p>In addition to all of the problems noted above, this method may
|
||||
be used to generate exceptions that its target thread is unprepared
|
||||
@ -76,7 +76,7 @@ the checked exceptions that it may throw:</p>
|
||||
Thread.currentThread().stop(t);
|
||||
}
|
||||
</pre>
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>What should I use instead of <code>Thread.stop</code>?</h3>
|
||||
<p>Most uses of <code>stop</code> should be replaced by code that
|
||||
simply modifies some variable to indicate that the target thread
|
||||
@ -84,7 +84,7 @@ should stop running. The target thread should check this variable
|
||||
regularly, and return from its run method in an orderly fashion if
|
||||
the variable indicates that it is to stop running. To ensure prompt
|
||||
communication of the stop-request, the variable must be
|
||||
<tt>volatile</tt> (or access to the variable must be
|
||||
<code>volatile</code> (or access to the variable must be
|
||||
synchronized).</p>
|
||||
<p>For example, suppose your applet contains the following
|
||||
<code>start</code>, <code>stop</code> and <code>run</code>
|
||||
@ -131,7 +131,7 @@ applet's <code>stop</code> and <code>run</code> methods with:
|
||||
}
|
||||
}
|
||||
</pre>
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>How do I stop a thread that waits for long periods (e.g., for
|
||||
input)?</h3>
|
||||
<p>That's what the <code>Thread.interrupt</code> method is for. The
|
||||
@ -159,7 +159,7 @@ following incantation:
|
||||
</pre>
|
||||
This ensures that the Thread will reraise the
|
||||
<code>InterruptedException</code> as soon as it is able.
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>What if a thread doesn't respond to
|
||||
<code>Thread.interrupt</code>?</h3>
|
||||
<p>In some cases, you can use application specific tricks. For
|
||||
@ -172,7 +172,7 @@ wouldn't respond to <code>Thread.stop</code> either.</em> Such
|
||||
cases include deliberate denial-of-service attacks, and I/O
|
||||
operations for which thread.stop and thread.interrupt do not work
|
||||
properly.</p>
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>Why are <code>Thread.suspend</code> and
|
||||
<code>Thread.resume</code> deprecated?</h3>
|
||||
<p><code>Thread.suspend</code> is inherently deadlock-prone. If the
|
||||
@ -182,7 +182,7 @@ resource until the target thread is resumed. If the thread that
|
||||
would resume the target thread attempts to lock this monitor prior
|
||||
to calling <code>resume</code>, deadlock results. Such deadlocks
|
||||
typically manifest themselves as "frozen" processes.</p>
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>What should I use instead of <code>Thread.suspend</code> and
|
||||
<code>Thread.resume</code>?</h3>
|
||||
<p>As with <code>Thread.stop</code>, the prudent approach is to
|
||||
@ -274,7 +274,7 @@ block only if the thread has actually been suspended:</p>
|
||||
}
|
||||
</pre>
|
||||
<p>In the absence of explicit synchronization,
|
||||
<tt>threadSuspended</tt> must be made <tt>volatile</tt> to ensure
|
||||
<code>threadSuspended</code> must be made <code>volatile</code> to ensure
|
||||
prompt communication of the suspend-request.</p>
|
||||
The resulting <code>run</code> method is:
|
||||
<pre>
|
||||
@ -302,17 +302,17 @@ The resulting <code>run</code> method is:
|
||||
be safely "stopped" or "suspended"?</h3>
|
||||
Yes, it's reasonably straightforward. The one subtlety is that the
|
||||
target thread may already be suspended at the time that another
|
||||
thread tries to stop it. If the <tt>stop</tt> method merely sets
|
||||
the state variable (<tt>blinker</tt>) to null, the target thread
|
||||
thread tries to stop it. If the <code>stop</code> method merely sets
|
||||
the state variable (<code>blinker</code>) to null, the target thread
|
||||
will remain suspended (waiting on the monitor), rather than exiting
|
||||
gracefully as it should. If the applet is restarted, multiple
|
||||
threads could end up waiting on the monitor at the same time,
|
||||
resulting in erratic behavior.
|
||||
<p>To rectify this situation, the <tt>stop</tt> method must ensure
|
||||
<p>To rectify this situation, the <code>stop</code> method must ensure
|
||||
that the target thread resumes immediately if it is suspended. Once
|
||||
the target thread resumes, it must recognize immediately that it
|
||||
has been stopped, and exit gracefully. Here's how the resulting
|
||||
<tt>run</tt> and <tt>stop</tt> methods look:</p>
|
||||
<code>run</code> and <code>stop</code> methods look:</p>
|
||||
<pre>
|
||||
public void run() {
|
||||
Thread thisThread = Thread.currentThread();
|
||||
@ -335,18 +335,18 @@ has been stopped, and exit gracefully. Here's how the resulting
|
||||
notify();
|
||||
}
|
||||
</pre>
|
||||
If the <tt>stop</tt> method calls <tt>Thread.interrupt</tt>, as
|
||||
described above, it needn't call <tt>notify</tt> as well, but it
|
||||
If the <code>stop</code> method calls <code>Thread.interrupt</code>, as
|
||||
described above, it needn't call <code>notify</code> as well, but it
|
||||
still must be synchronized. This ensures that the target thread
|
||||
won't miss an interrupt due to a race condition.
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>What about <code>Thread.destroy</code>?</h3>
|
||||
<code>Thread.destroy</code> was never implemented and has been
|
||||
deprecated. If it were implemented, it would be deadlock-prone in
|
||||
the manner of <code>Thread.suspend</code>. (In fact, it is roughly
|
||||
equivalent to <code>Thread.suspend</code> without the possibility
|
||||
of a subsequent <code>Thread.resume</code>.)
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>Why is <code>Runtime.runFinalizersOnExit</code>
|
||||
deprecated?</h3>
|
||||
Because it is inherently unsafe. It may result in finalizers being
|
||||
|
Before Width: | Height: | Size: 133 B |
@ -276,11 +276,9 @@ public class CallSite {
|
||||
if (offset > 0) {
|
||||
return offset;
|
||||
}
|
||||
try {
|
||||
offset = TARGET_OFFSET = UNSAFE.objectFieldOffset(CallSite.class.getDeclaredField("target"));
|
||||
assert(offset > 0);
|
||||
return offset;
|
||||
} catch (Exception ex) { throw newInternalError(ex); }
|
||||
offset = TARGET_OFFSET = UNSAFE.objectFieldOffset(CallSite.class, "target");
|
||||
assert(offset > 0);
|
||||
return offset;
|
||||
}
|
||||
|
||||
/*package-private*/
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -70,13 +70,18 @@ import static java.lang.invoke.MethodHandleStatics.newInternalError;
|
||||
* and those seven fields omit much of the information in Method.
|
||||
* @author jrose
|
||||
*/
|
||||
/*non-public*/ final class ResolvedMethodName {
|
||||
//@Injected JVM_Method* vmtarget;
|
||||
//@Injected Class<?> vmholder;
|
||||
};
|
||||
|
||||
/*non-public*/ final class MemberName implements Member, Cloneable {
|
||||
private Class<?> clazz; // class in which the method is defined
|
||||
private Class<?> clazz; // class in which the member is defined
|
||||
private String name; // may be null if not yet materialized
|
||||
private Object type; // may be null if not yet materialized
|
||||
private int flags; // modifier bits; see reflect.Modifier
|
||||
//@Injected JVM_Method* vmtarget;
|
||||
//@Injected int vmindex;
|
||||
private ResolvedMethodName method; // cached resolved method information
|
||||
//@Injected intptr_t vmindex; // vtable index or offset of resolved member
|
||||
Object resolution; // if null, this guy is resolved
|
||||
|
||||
/** Return the declaring class of this member.
|
||||
|
@ -1587,12 +1587,6 @@ assertEquals("[three, thee, tee]", asListFix.invoke((Object)argv).toString());
|
||||
}
|
||||
}
|
||||
|
||||
private static final long FORM_OFFSET;
|
||||
static {
|
||||
try {
|
||||
FORM_OFFSET = UNSAFE.objectFieldOffset(MethodHandle.class.getDeclaredField("form"));
|
||||
} catch (ReflectiveOperationException ex) {
|
||||
throw newInternalError(ex);
|
||||
}
|
||||
}
|
||||
private static final long FORM_OFFSET
|
||||
= UNSAFE.objectFieldOffset(MethodHandle.class, "form");
|
||||
}
|
||||
|
@ -1239,17 +1239,11 @@ s.writeObject(this.parameterArray());
|
||||
// Support for resetting final fields while deserializing. Implement Holder
|
||||
// pattern to make the rarely needed offset calculation lazy.
|
||||
private static class OffsetHolder {
|
||||
private static final long rtypeOffset, ptypesOffset;
|
||||
static {
|
||||
try {
|
||||
rtypeOffset = UNSAFE.objectFieldOffset
|
||||
(MethodType.class.getDeclaredField("rtype"));
|
||||
ptypesOffset = UNSAFE.objectFieldOffset
|
||||
(MethodType.class.getDeclaredField("ptypes"));
|
||||
} catch (Exception ex) {
|
||||
throw new Error(ex);
|
||||
}
|
||||
}
|
||||
static final long rtypeOffset
|
||||
= UNSAFE.objectFieldOffset(MethodType.class, "rtype");
|
||||
|
||||
static final long ptypesOffset
|
||||
= UNSAFE.objectFieldOffset(MethodType.class, "ptypes");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -25,19 +25,24 @@
|
||||
|
||||
package java.lang.invoke;
|
||||
|
||||
import jdk.internal.misc.Unsafe;
|
||||
import jdk.internal.org.objectweb.asm.ClassWriter;
|
||||
import jdk.internal.org.objectweb.asm.Label;
|
||||
import jdk.internal.org.objectweb.asm.MethodVisitor;
|
||||
import jdk.internal.org.objectweb.asm.Opcodes;
|
||||
import jdk.internal.vm.annotation.ForceInline;
|
||||
import jdk.internal.misc.Unsafe;
|
||||
import sun.invoke.util.Wrapper;
|
||||
import sun.security.action.GetPropertyAction;
|
||||
|
||||
import java.lang.invoke.MethodHandles.Lookup;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.function.Function;
|
||||
import sun.security.action.GetPropertyAction;
|
||||
|
||||
import static jdk.internal.org.objectweb.asm.Opcodes.*;
|
||||
|
||||
@ -319,12 +324,12 @@ public final class StringConcatFactory {
|
||||
}
|
||||
|
||||
private static final class RecipeElement {
|
||||
private final Object value;
|
||||
private final String value;
|
||||
private final int argPos;
|
||||
private final char tag;
|
||||
|
||||
public RecipeElement(Object cnst) {
|
||||
this.value = Objects.requireNonNull(cnst);
|
||||
this.value = String.valueOf(Objects.requireNonNull(cnst));
|
||||
this.argPos = -1;
|
||||
this.tag = TAG_CONST;
|
||||
}
|
||||
@ -335,7 +340,7 @@ public final class StringConcatFactory {
|
||||
this.tag = TAG_ARG;
|
||||
}
|
||||
|
||||
public Object getValue() {
|
||||
public String getValue() {
|
||||
assert (tag == TAG_CONST);
|
||||
return value;
|
||||
}
|
||||
@ -923,8 +928,7 @@ public final class StringConcatFactory {
|
||||
for (RecipeElement el : recipe.getElements()) {
|
||||
switch (el.getTag()) {
|
||||
case TAG_CONST:
|
||||
Object cnst = el.getValue();
|
||||
len += cnst.toString().length();
|
||||
len += el.getValue().length();
|
||||
break;
|
||||
case TAG_ARG:
|
||||
/*
|
||||
@ -983,9 +987,8 @@ public final class StringConcatFactory {
|
||||
String desc;
|
||||
switch (el.getTag()) {
|
||||
case TAG_CONST:
|
||||
Object cnst = el.getValue();
|
||||
mv.visitLdcInsn(cnst);
|
||||
desc = getSBAppendDesc(cnst.getClass());
|
||||
mv.visitLdcInsn(el.getValue());
|
||||
desc = getSBAppendDesc(String.class);
|
||||
break;
|
||||
case TAG_ARG:
|
||||
Class<?> cl = arr[el.getArgPos()];
|
||||
@ -1273,8 +1276,7 @@ public final class StringConcatFactory {
|
||||
for (RecipeElement el : recipe.getElements()) {
|
||||
switch (el.getTag()) {
|
||||
case TAG_CONST:
|
||||
Object cnst = el.getValue();
|
||||
initial += cnst.toString().length();
|
||||
initial += el.getValue().length();
|
||||
break;
|
||||
case TAG_ARG:
|
||||
final int i = el.getArgPos();
|
||||
@ -1303,9 +1305,8 @@ public final class StringConcatFactory {
|
||||
MethodHandle appender;
|
||||
switch (el.getTag()) {
|
||||
case TAG_CONST:
|
||||
Object constant = el.getValue();
|
||||
MethodHandle mh = appender(adaptToStringBuilder(constant.getClass()));
|
||||
appender = MethodHandles.insertArguments(mh, 1, constant);
|
||||
MethodHandle mh = appender(adaptToStringBuilder(String.class));
|
||||
appender = MethodHandles.insertArguments(mh, 1, el.getValue());
|
||||
break;
|
||||
case TAG_ARG:
|
||||
int ac = el.getArgPos();
|
||||
@ -1506,8 +1507,7 @@ public final class StringConcatFactory {
|
||||
mh = MethodHandles.dropArguments(mh, 2, int.class);
|
||||
switch (el.getTag()) {
|
||||
case TAG_CONST: {
|
||||
Object cnst = el.getValue();
|
||||
MethodHandle prepender = MethodHandles.insertArguments(prepender(cnst.getClass()), 3, cnst);
|
||||
MethodHandle prepender = MethodHandles.insertArguments(prepender(String.class), 3, el.getValue());
|
||||
mh = MethodHandles.foldArguments(mh, 1, prepender,
|
||||
2, 0, 3 // index, storage, coder
|
||||
);
|
||||
@ -1550,10 +1550,9 @@ public final class StringConcatFactory {
|
||||
for (RecipeElement el : recipe.getElements()) {
|
||||
switch (el.getTag()) {
|
||||
case TAG_CONST:
|
||||
Object constant = el.getValue();
|
||||
String s = constant.toString();
|
||||
initialCoder = (byte) coderMixer(String.class).invoke(initialCoder, s);
|
||||
initialLen += s.length();
|
||||
String constant = el.getValue();
|
||||
initialCoder = (byte) coderMixer(String.class).invoke(initialCoder, constant);
|
||||
initialLen += constant.length();
|
||||
break;
|
||||
case TAG_ARG:
|
||||
int ac = el.getArgPos();
|
||||
@ -1621,7 +1620,8 @@ public final class StringConcatFactory {
|
||||
private static final Function<Class<?>, MethodHandle> PREPEND = new Function<Class<?>, MethodHandle>() {
|
||||
@Override
|
||||
public MethodHandle apply(Class<?> c) {
|
||||
return lookupStatic(Lookup.IMPL_LOOKUP, STRING_HELPER, "prepend", int.class, int.class, byte[].class, byte.class, c);
|
||||
return lookupStatic(Lookup.IMPL_LOOKUP, STRING_HELPER, "prepend", int.class, int.class, byte[].class, byte.class,
|
||||
Wrapper.asPrimitiveType(c));
|
||||
}
|
||||
};
|
||||
|
||||
@ -1629,7 +1629,8 @@ public final class StringConcatFactory {
|
||||
private static final Function<Class<?>, MethodHandle> CODER_MIX = new Function<Class<?>, MethodHandle>() {
|
||||
@Override
|
||||
public MethodHandle apply(Class<?> c) {
|
||||
return lookupStatic(Lookup.IMPL_LOOKUP, STRING_HELPER, "mixCoder", byte.class, byte.class, c);
|
||||
return lookupStatic(Lookup.IMPL_LOOKUP, STRING_HELPER, "mixCoder", byte.class, byte.class,
|
||||
Wrapper.asPrimitiveType(c));
|
||||
}
|
||||
};
|
||||
|
||||
@ -1637,7 +1638,8 @@ public final class StringConcatFactory {
|
||||
private static final Function<Class<?>, MethodHandle> LENGTH_MIX = new Function<Class<?>, MethodHandle>() {
|
||||
@Override
|
||||
public MethodHandle apply(Class<?> c) {
|
||||
return lookupStatic(Lookup.IMPL_LOOKUP, STRING_HELPER, "mixLen", int.class, int.class, c);
|
||||
return lookupStatic(Lookup.IMPL_LOOKUP, STRING_HELPER, "mixLen", int.class, int.class,
|
||||
Wrapper.asPrimitiveType(c));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -2014,12 +2014,7 @@ public abstract class VarHandle {
|
||||
private static final long VFORM_OFFSET;
|
||||
|
||||
static {
|
||||
try {
|
||||
VFORM_OFFSET = UNSAFE.objectFieldOffset(VarHandle.class.getDeclaredField("vform"));
|
||||
}
|
||||
catch (ReflectiveOperationException e) {
|
||||
throw newInternalError(e);
|
||||
}
|
||||
VFORM_OFFSET = UNSAFE.objectFieldOffset(VarHandle.class, "vform");
|
||||
|
||||
// The VarHandleGuards must be initialized to ensure correct
|
||||
// compilation of the guard methods
|
||||
|
@ -35,32 +35,20 @@ import static java.lang.invoke.MethodHandleStatics.UNSAFE;
|
||||
*/
|
||||
abstract class VarHandleByteArrayBase {
|
||||
// Buffer.address
|
||||
static final long BUFFER_ADDRESS;
|
||||
static final long BUFFER_ADDRESS
|
||||
= UNSAFE.objectFieldOffset(Buffer.class, "address");
|
||||
|
||||
// Buffer.limit
|
||||
static final long BUFFER_LIMIT;
|
||||
static final long BUFFER_LIMIT
|
||||
= UNSAFE.objectFieldOffset(Buffer.class, "limit");
|
||||
|
||||
// ByteBuffer.hb
|
||||
static final long BYTE_BUFFER_HB;
|
||||
static final long BYTE_BUFFER_HB
|
||||
= UNSAFE.objectFieldOffset(ByteBuffer.class, "hb");
|
||||
|
||||
// ByteBuffer.isReadOnly
|
||||
static final long BYTE_BUFFER_IS_READ_ONLY;
|
||||
|
||||
static {
|
||||
try {
|
||||
BUFFER_ADDRESS = UNSAFE.objectFieldOffset(
|
||||
Buffer.class.getDeclaredField("address"));
|
||||
|
||||
BUFFER_LIMIT = UNSAFE.objectFieldOffset(
|
||||
Buffer.class.getDeclaredField("limit"));
|
||||
|
||||
BYTE_BUFFER_HB = UNSAFE.objectFieldOffset(
|
||||
ByteBuffer.class.getDeclaredField("hb"));
|
||||
|
||||
BYTE_BUFFER_IS_READ_ONLY = UNSAFE.objectFieldOffset(
|
||||
ByteBuffer.class.getDeclaredField("isReadOnly"));
|
||||
}
|
||||
catch (ReflectiveOperationException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
static final long BYTE_BUFFER_IS_READ_ONLY
|
||||
= UNSAFE.objectFieldOffset(ByteBuffer.class, "isReadOnly");
|
||||
|
||||
static final boolean BE = UNSAFE.isBigEndian();
|
||||
|
||||
|
@ -4067,20 +4067,13 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
|
||||
}
|
||||
|
||||
private static class UnsafeHolder {
|
||||
private static final jdk.internal.misc.Unsafe unsafe;
|
||||
private static final long intCompactOffset;
|
||||
private static final long intValOffset;
|
||||
static {
|
||||
try {
|
||||
unsafe = jdk.internal.misc.Unsafe.getUnsafe();
|
||||
intCompactOffset = unsafe.objectFieldOffset
|
||||
(BigDecimal.class.getDeclaredField("intCompact"));
|
||||
intValOffset = unsafe.objectFieldOffset
|
||||
(BigDecimal.class.getDeclaredField("intVal"));
|
||||
} catch (Exception ex) {
|
||||
throw new ExceptionInInitializerError(ex);
|
||||
}
|
||||
}
|
||||
private static final jdk.internal.misc.Unsafe unsafe
|
||||
= jdk.internal.misc.Unsafe.getUnsafe();
|
||||
private static final long intCompactOffset
|
||||
= unsafe.objectFieldOffset(BigDecimal.class, "intCompact");
|
||||
private static final long intValOffset
|
||||
= unsafe.objectFieldOffset(BigDecimal.class, "intVal");
|
||||
|
||||
static void setIntCompact(BigDecimal bd, long val) {
|
||||
unsafe.putLong(bd, intCompactOffset, val);
|
||||
}
|
||||
|
@ -4582,20 +4582,12 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
|
||||
|
||||
// Support for resetting final fields while deserializing
|
||||
private static class UnsafeHolder {
|
||||
private static final jdk.internal.misc.Unsafe unsafe;
|
||||
private static final long signumOffset;
|
||||
private static final long magOffset;
|
||||
static {
|
||||
try {
|
||||
unsafe = jdk.internal.misc.Unsafe.getUnsafe();
|
||||
signumOffset = unsafe.objectFieldOffset
|
||||
(BigInteger.class.getDeclaredField("signum"));
|
||||
magOffset = unsafe.objectFieldOffset
|
||||
(BigInteger.class.getDeclaredField("mag"));
|
||||
} catch (Exception ex) {
|
||||
throw new ExceptionInInitializerError(ex);
|
||||
}
|
||||
}
|
||||
private static final jdk.internal.misc.Unsafe unsafe
|
||||
= jdk.internal.misc.Unsafe.getUnsafe();
|
||||
private static final long signumOffset
|
||||
= unsafe.objectFieldOffset(BigInteger.class, "signum");
|
||||
private static final long magOffset
|
||||
= unsafe.objectFieldOffset(BigInteger.class, "mag");
|
||||
|
||||
static void putSign(BigInteger bi, int sign) {
|
||||
unsafe.putInt(bi, signumOffset, sign);
|
||||
|
@ -576,19 +576,10 @@ class Inet6Address extends InetAddress {
|
||||
new ObjectStreamField("ifname", String.class)
|
||||
};
|
||||
|
||||
private static final long FIELDS_OFFSET;
|
||||
private static final jdk.internal.misc.Unsafe UNSAFE;
|
||||
|
||||
static {
|
||||
try {
|
||||
jdk.internal.misc.Unsafe unsafe = jdk.internal.misc.Unsafe.getUnsafe();
|
||||
FIELDS_OFFSET = unsafe.objectFieldOffset(
|
||||
Inet6Address.class.getDeclaredField("holder6"));
|
||||
UNSAFE = unsafe;
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
private static final jdk.internal.misc.Unsafe UNSAFE
|
||||
= jdk.internal.misc.Unsafe.getUnsafe();
|
||||
private static final long FIELDS_OFFSET = UNSAFE.objectFieldOffset(
|
||||
Inet6Address.class, "holder6");
|
||||
|
||||
/**
|
||||
* restore the state of this object from stream
|
||||
|
@ -1707,20 +1707,10 @@ class InetAddress implements java.io.Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
private static final long FIELDS_OFFSET;
|
||||
private static final jdk.internal.misc.Unsafe UNSAFE;
|
||||
|
||||
static {
|
||||
try {
|
||||
jdk.internal.misc.Unsafe unsafe = jdk.internal.misc.Unsafe.getUnsafe();
|
||||
FIELDS_OFFSET = unsafe.objectFieldOffset(
|
||||
InetAddress.class.getDeclaredField("holder")
|
||||
);
|
||||
UNSAFE = unsafe;
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
private static final jdk.internal.misc.Unsafe UNSAFE
|
||||
= jdk.internal.misc.Unsafe.getUnsafe();
|
||||
private static final long FIELDS_OFFSET
|
||||
= UNSAFE.objectFieldOffset(InetAddress.class, "holder");
|
||||
|
||||
private void readObject (ObjectInputStream s) throws
|
||||
IOException, ClassNotFoundException {
|
||||
|
@ -302,18 +302,10 @@ public class InetSocketAddress
|
||||
throw new InvalidObjectException("Stream data required");
|
||||
}
|
||||
|
||||
private static final long FIELDS_OFFSET;
|
||||
private static final jdk.internal.misc.Unsafe UNSAFE;
|
||||
static {
|
||||
try {
|
||||
jdk.internal.misc.Unsafe unsafe = jdk.internal.misc.Unsafe.getUnsafe();
|
||||
FIELDS_OFFSET = unsafe.objectFieldOffset(
|
||||
InetSocketAddress.class.getDeclaredField("holder"));
|
||||
UNSAFE = unsafe;
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
private static final jdk.internal.misc.Unsafe UNSAFE
|
||||
= jdk.internal.misc.Unsafe.getUnsafe();
|
||||
private static final long FIELDS_OFFSET
|
||||
= UNSAFE.objectFieldOffset(InetSocketAddress.class, "holder");
|
||||
|
||||
/**
|
||||
* Gets the port number.
|
||||
|
@ -202,26 +202,26 @@ public class ChoiceFormat extends NumberFormat {
|
||||
segments[part].append(ch);
|
||||
} else if (ch == '<' || ch == '#' || ch == '\u2264') {
|
||||
if (segments[0].length() == 0) {
|
||||
throw new IllegalArgumentException();
|
||||
throw new IllegalArgumentException("Each interval must"
|
||||
+ " contain a number before a format");
|
||||
}
|
||||
try {
|
||||
String tempBuffer = segments[0].toString();
|
||||
if (tempBuffer.equals("\u221E")) {
|
||||
startValue = Double.POSITIVE_INFINITY;
|
||||
} else if (tempBuffer.equals("-\u221E")) {
|
||||
startValue = Double.NEGATIVE_INFINITY;
|
||||
} else {
|
||||
startValue = Double.valueOf(segments[0].toString()).doubleValue();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
String tempBuffer = segments[0].toString();
|
||||
if (tempBuffer.equals("\u221E")) {
|
||||
startValue = Double.POSITIVE_INFINITY;
|
||||
} else if (tempBuffer.equals("-\u221E")) {
|
||||
startValue = Double.NEGATIVE_INFINITY;
|
||||
} else {
|
||||
startValue = Double.valueOf(tempBuffer);
|
||||
}
|
||||
|
||||
if (ch == '<' && startValue != Double.POSITIVE_INFINITY &&
|
||||
startValue != Double.NEGATIVE_INFINITY) {
|
||||
startValue = nextDouble(startValue);
|
||||
}
|
||||
if (startValue <= oldStartValue) {
|
||||
throw new IllegalArgumentException();
|
||||
throw new IllegalArgumentException("Incorrect order of"
|
||||
+ " intervals, must be in ascending order");
|
||||
}
|
||||
segments[0].setLength(0);
|
||||
part = 1;
|
||||
|
@ -223,7 +223,7 @@ import java.util.Set;
|
||||
* <tr>
|
||||
* <th scope="row"> {@link #ISO_OFFSET_DATE_TIME}</th>
|
||||
* <td> Date Time with Offset
|
||||
* </td><td>2011-12-03T10:15:30+01:00'</td>
|
||||
* </td><td>'2011-12-03T10:15:30+01:00'</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <th scope="row"> {@link #ISO_ZONED_DATE_TIME}</th>
|
||||
@ -243,7 +243,7 @@ import java.util.Set;
|
||||
* <tr>
|
||||
* <th scope="row"> {@link #ISO_WEEK_DATE}</th>
|
||||
* <td> Year and Week </td>
|
||||
* <td>2012-W48-6'</td></tr>
|
||||
* <td>'2012-W48-6'</td></tr>
|
||||
* <tr>
|
||||
* <th scope="row"> {@link #ISO_INSTANT}</th>
|
||||
* <td> Date and Time of an Instant </td>
|
||||
|
@ -56,41 +56,44 @@ package java.util;
|
||||
* <p>The twelve methods described above are summarized in the
|
||||
* following table:
|
||||
*
|
||||
* <table class="plain">
|
||||
* <table class="striped">
|
||||
* <caption>Summary of Deque methods</caption>
|
||||
* <thead>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td style="text-align:center" COLSPAN = 2> <b>First Element (Head)</b></td>
|
||||
* <td style="text-align:center" COLSPAN = 2> <b>Last Element (Tail)</b></td>
|
||||
* <td rowspan="2"></td>
|
||||
* <th scope="col" colspan="2"> First Element (Head)</th>
|
||||
* <th scope="col" colspan="2"> Last Element (Tail)</th>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td style="text-align:center"><em>Throws exception</em></td>
|
||||
* <td style="text-align:center"><em>Special value</em></td>
|
||||
* <td style="text-align:center"><em>Throws exception</em></td>
|
||||
* <td style="text-align:center"><em>Special value</em></td>
|
||||
* <th scope="col" style="font-weight:normal; font-style:italic">Throws exception</th>
|
||||
* <th scope="col" style="font-weight:normal; font-style:italic">Special value</th>
|
||||
* <th scope="col" style="font-weight:normal; font-style:italic">Throws exception</th>
|
||||
* <th scope="col" style="font-weight:normal; font-style:italic">Special value</th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr>
|
||||
* <td><b>Insert</b></td>
|
||||
* <th scope="row">Insert</th>
|
||||
* <td>{@link #addFirst(Object) addFirst(e)}</td>
|
||||
* <td>{@link #offerFirst(Object) offerFirst(e)}</td>
|
||||
* <td>{@link #addLast(Object) addLast(e)}</td>
|
||||
* <td>{@link #offerLast(Object) offerLast(e)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Remove</b></td>
|
||||
* <th scope="row">Remove</th>
|
||||
* <td>{@link #removeFirst() removeFirst()}</td>
|
||||
* <td>{@link #pollFirst() pollFirst()}</td>
|
||||
* <td>{@link #removeLast() removeLast()}</td>
|
||||
* <td>{@link #pollLast() pollLast()}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Examine</b></td>
|
||||
* <th scope="row">Examine</th>
|
||||
* <td>{@link #getFirst() getFirst()}</td>
|
||||
* <td>{@link #peekFirst() peekFirst()}</td>
|
||||
* <td>{@link #getLast() getLast()}</td>
|
||||
* <td>{@link #peekLast() peekLast()}</td>
|
||||
* </tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
*
|
||||
* <p>This interface extends the {@link Queue} interface. When a deque is
|
||||
@ -99,36 +102,40 @@ package java.util;
|
||||
* inherited from the {@code Queue} interface are precisely equivalent to
|
||||
* {@code Deque} methods as indicated in the following table:
|
||||
*
|
||||
* <table class="plain">
|
||||
* <table class="striped">
|
||||
* <caption>Comparison of Queue and Deque methods</caption>
|
||||
* <thead>
|
||||
* <tr>
|
||||
* <td style="text-align:center"> <b>{@code Queue} Method</b></td>
|
||||
* <td style="text-align:center"> <b>Equivalent {@code Deque} Method</b></td>
|
||||
* <th scope="col"> {@code Queue} Method</th>
|
||||
* <th scope="col"> Equivalent {@code Deque} Method</th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr>
|
||||
* <td>{@link #add(Object) add(e)}</td>
|
||||
* <th scope="row">{@link #add(Object) add(e)}</th>
|
||||
* <td>{@link #addLast(Object) addLast(e)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #offer(Object) offer(e)}</td>
|
||||
* <th scope="row">{@link #offer(Object) offer(e)}</th>
|
||||
* <td>{@link #offerLast(Object) offerLast(e)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #remove() remove()}</td>
|
||||
* <th scope="row">{@link #remove() remove()}</th>
|
||||
* <td>{@link #removeFirst() removeFirst()}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #poll() poll()}</td>
|
||||
* <th scope="row">{@link #poll() poll()}</th>
|
||||
* <td>{@link #pollFirst() pollFirst()}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #element() element()}</td>
|
||||
* <th scope="row">{@link #element() element()}</th>
|
||||
* <td>{@link #getFirst() getFirst()}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #peek() peek()}</td>
|
||||
* <th scope="row">{@link #peek() peek()}</th>
|
||||
* <td>{@link #peekFirst() peekFirst()}</td>
|
||||
* </tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
*
|
||||
* <p>Deques can also be used as LIFO (Last-In-First-Out) stacks. This
|
||||
@ -137,24 +144,28 @@ package java.util;
|
||||
* beginning of the deque. Stack methods are precisely equivalent to
|
||||
* {@code Deque} methods as indicated in the table below:
|
||||
*
|
||||
* <table class="plain">
|
||||
* <table class="striped">
|
||||
* <caption>Comparison of Stack and Deque methods</caption>
|
||||
* <thead>
|
||||
* <tr>
|
||||
* <td style="text-align:center"> <b>Stack Method</b></td>
|
||||
* <td style="text-align:center"> <b>Equivalent {@code Deque} Method</b></td>
|
||||
* <th scope="col"> Stack Method</th>
|
||||
* <th scope="col"> Equivalent {@code Deque} Method</th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr>
|
||||
* <td>{@link #push(Object) push(e)}</td>
|
||||
* <th scope="row">{@link #push(Object) push(e)}</th>
|
||||
* <td>{@link #addFirst(Object) addFirst(e)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #pop() pop()}</td>
|
||||
* <th scope="row">{@link #pop() pop()}</th>
|
||||
* <td>{@link #removeFirst() removeFirst()}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #peek() peek()}</td>
|
||||
* <th scope="row">{@link #peek() peek()}</th>
|
||||
* <td>{@link #peekFirst() peekFirst()}</td>
|
||||
* </tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
*
|
||||
* <p>Note that the {@link #peek peek} method works equally well when
|
||||
|
@ -46,28 +46,32 @@ package java.util;
|
||||
* use with capacity-restricted {@code Queue} implementations; in most
|
||||
* implementations, insert operations cannot fail.
|
||||
*
|
||||
* <table class="plain">
|
||||
* <table class="striped">
|
||||
* <caption>Summary of Queue methods</caption>
|
||||
* <thead>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td style="text-align:center"><em>Throws exception</em></td>
|
||||
* <td style="text-align:center"><em>Returns special value</em></td>
|
||||
* <th scope="col" style="font-weight:normal; font-style:italic">Throws exception</th>
|
||||
* <th scope="col" style="font-weight:normal; font-style:italic">Returns special value</th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr>
|
||||
* <td><b>Insert</b></td>
|
||||
* <th scope="row">Insert</th>
|
||||
* <td>{@link #add(Object) add(e)}</td>
|
||||
* <td>{@link #offer(Object) offer(e)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Remove</b></td>
|
||||
* <th scope="row">Remove</th>
|
||||
* <td>{@link #remove() remove()}</td>
|
||||
* <td>{@link #poll() poll()}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Examine</b></td>
|
||||
* <th scope="row">Examine</th>
|
||||
* <td>{@link #element() element()}</td>
|
||||
* <td>{@link #peek() peek()}</td>
|
||||
* </tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
*
|
||||
* <p>Queues typically, but do not necessarily, order elements in a
|
||||
|
@ -1210,15 +1210,15 @@ public abstract class ResourceBundle {
|
||||
* <strong>Example:</strong></a>
|
||||
* <p>
|
||||
* The following class and property files are provided:
|
||||
* <pre>
|
||||
* MyResources.class
|
||||
* MyResources.properties
|
||||
* MyResources_fr.properties
|
||||
* MyResources_fr_CH.class
|
||||
* MyResources_fr_CH.properties
|
||||
* MyResources_en.properties
|
||||
* MyResources_es_ES.class
|
||||
* </pre>
|
||||
* <ul>
|
||||
* <li>MyResources.class
|
||||
* <li>MyResources.properties
|
||||
* <li>MyResources_fr.properties
|
||||
* <li>MyResources_fr_CH.class
|
||||
* <li>MyResources_fr_CH.properties
|
||||
* <li>MyResources_en.properties
|
||||
* <li>MyResources_es_ES.class
|
||||
* </ul>
|
||||
*
|
||||
* The contents of all files are valid (that is, public non-abstract
|
||||
* subclasses of <code>ResourceBundle</code> for the ".class" files,
|
||||
@ -1228,14 +1228,17 @@ public abstract class ResourceBundle {
|
||||
* <p>Calling <code>getBundle</code> with the locale arguments below will
|
||||
* instantiate resource bundles as follows:
|
||||
*
|
||||
* <table class="borderless">
|
||||
* <table class="striped">
|
||||
* <caption style="display:none">getBundle() locale to resource bundle mapping</caption>
|
||||
* <thead>
|
||||
* <tr><th scope="col">Locale</th><th scope="col">Resource bundle</th></tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr><td>Locale("fr", "CH")</td><td>MyResources_fr_CH.class, parent MyResources_fr.properties, parent MyResources.class</td></tr>
|
||||
* <tr><td>Locale("fr", "FR")</td><td>MyResources_fr.properties, parent MyResources.class</td></tr>
|
||||
* <tr><td>Locale("de", "DE")</td><td>MyResources_en.properties, parent MyResources.class</td></tr>
|
||||
* <tr><td>Locale("en", "US")</td><td>MyResources_en.properties, parent MyResources.class</td></tr>
|
||||
* <tr><td>Locale("es", "ES")</td><td>MyResources_es_ES.class, parent MyResources.class</td></tr>
|
||||
* <tr><th scope="row">Locale("fr", "CH")</th><td>MyResources_fr_CH.class, parent MyResources_fr.properties, parent MyResources.class</td></tr>
|
||||
* <tr><th scope="row">Locale("fr", "FR")</th><td>MyResources_fr.properties, parent MyResources.class</td></tr>
|
||||
* <tr><th scope="row">Locale("de", "DE")</th><td>MyResources_en.properties, parent MyResources.class</td></tr>
|
||||
* <tr><th scope="row">Locale("en", "US")</th><td>MyResources_en.properties, parent MyResources.class</td></tr>
|
||||
* <tr><th scope="row">Locale("es", "ES")</th><td>MyResources_es_ES.class, parent MyResources.class</td></tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
*
|
||||
@ -1324,42 +1327,41 @@ public abstract class ResourceBundle {
|
||||
* <caption style="display:none">locale-format combinations for newBundle</caption>
|
||||
* <thead>
|
||||
* <tr>
|
||||
* <td
|
||||
* style="vertical-align: top; text-align: left; font-weight: bold; width: 50%;"><code>Locale</code><br>
|
||||
* </td>
|
||||
* <td
|
||||
* style="vertical-align: top; text-align: left; font-weight: bold; width: 50%;"><code>format</code><br>
|
||||
* </td>
|
||||
* <th scope="col">Index</th>
|
||||
* <th scope="col"><code>Locale</code></th>
|
||||
* <th scope="col"><code>format</code></th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr>
|
||||
* <td style="vertical-align: top; width: 50%;"><code>Locale("de", "DE")</code><br>
|
||||
* </td>
|
||||
* <td style="vertical-align: top; width: 50%;"><code>java.class</code><br>
|
||||
* </td>
|
||||
* <th scope="row">1</th>
|
||||
* <td><code>Locale("de", "DE")</code></td>
|
||||
* <td><code>java.class</code></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td style="vertical-align: top; width: 50%;"><code>Locale("de", "DE")</code></td>
|
||||
* <td style="vertical-align: top; width: 50%;"><code>java.properties</code><br>
|
||||
* </td>
|
||||
* <th scope="row">2</th>
|
||||
* <td><code>Locale("de", "DE")</code></td>
|
||||
* <td><code>java.properties</code></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td style="vertical-align: top; width: 50%;"><code>Locale("de")</code></td>
|
||||
* <td style="vertical-align: top; width: 50%;"><code>java.class</code></td>
|
||||
* <th scope="row">3</th>
|
||||
* <td><code>Locale("de")</code></td>
|
||||
* <td><code>java.class</code></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td style="vertical-align: top; width: 50%;"><code>Locale("de")</code></td>
|
||||
* <td style="vertical-align: top; width: 50%;"><code>java.properties</code></td>
|
||||
* <th scope="row">4</th>
|
||||
* <td><code>Locale("de")</code></td>
|
||||
* <td><code>java.properties</code></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td style="vertical-align: top; width: 50%;"><code>Locale("")</code><br>
|
||||
* </td>
|
||||
* <td style="vertical-align: top; width: 50%;"><code>java.class</code></td>
|
||||
* <th scope="row">5</th>
|
||||
* <td><code>Locale("")</code></td>
|
||||
* <td><code>java.class</code></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td style="vertical-align: top; width: 50%;"><code>Locale("")</code></td>
|
||||
* <td style="vertical-align: top; width: 50%;"><code>java.properties</code></td>
|
||||
* <th scope="row">6</th>
|
||||
* <td><code>Locale("")</code></td>
|
||||
* <td><code>java.properties</code></td>
|
||||
* </tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
@ -3453,15 +3455,15 @@ public abstract class ResourceBundle {
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the given <code>bundleName</code> to the form required
|
||||
* Converts the given {@code bundleName} to the form required
|
||||
* by the {@link ClassLoader#getResource ClassLoader.getResource}
|
||||
* method by replacing all occurrences of <code>'.'</code> in
|
||||
* <code>bundleName</code> with <code>'/'</code> and appending a
|
||||
* <code>'.'</code> and the given file <code>suffix</code>. For
|
||||
* example, if <code>bundleName</code> is
|
||||
* <code>"foo.bar.MyResources_ja_JP"</code> and <code>suffix</code>
|
||||
* is <code>"properties"</code>, then
|
||||
* <code>"foo/bar/MyResources_ja_JP.properties"</code> is returned.
|
||||
* method by replacing all occurrences of {@code '.'} in
|
||||
* {@code bundleName} with {@code '/'} and appending a
|
||||
* {@code '.'} and the given file {@code suffix}. For
|
||||
* example, if {@code bundleName} is
|
||||
* {@code "foo.bar.MyResources_ja_JP"} and {@code suffix}
|
||||
* is {@code "properties"}, then
|
||||
* {@code "foo/bar/MyResources_ja_JP.properties"} is returned.
|
||||
*
|
||||
* @param bundleName
|
||||
* the bundle name
|
||||
@ -3469,8 +3471,8 @@ public abstract class ResourceBundle {
|
||||
* the file type suffix
|
||||
* @return the converted resource name
|
||||
* @exception NullPointerException
|
||||
* if <code>bundleName</code> or <code>suffix</code>
|
||||
* is <code>null</code>
|
||||
* if {@code bundleName} or {@code suffix}
|
||||
* is {@code null}
|
||||
*/
|
||||
public final String toResourceName(String bundleName, String suffix) {
|
||||
StringBuilder sb = new StringBuilder(bundleName.length() + 1 + suffix.length());
|
||||
|
@ -56,66 +56,66 @@ import java.util.NoSuchElementException;
|
||||
* <table class="plain">
|
||||
* <caption>Summary of BlockingDeque methods</caption>
|
||||
* <tr>
|
||||
* <td style="text-align:center" COLSPAN = 5> <b>First Element (Head)</b></td>
|
||||
* <th id="First" colspan="5"> First Element (Head)</th>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td style="text-align:center"><em>Throws exception</em></td>
|
||||
* <td style="text-align:center"><em>Special value</em></td>
|
||||
* <td style="text-align:center"><em>Blocks</em></td>
|
||||
* <td style="text-align:center"><em>Times out</em></td>
|
||||
* <th id="FThrow" style="font-weight:normal; font-style: italic">Throws exception</th>
|
||||
* <th id="FValue" style="font-weight:normal; font-style: italic">Special value</th>
|
||||
* <th id="FBlock" style="font-weight:normal; font-style: italic">Blocks</th>
|
||||
* <th id="FTimes" style="font-weight:normal; font-style: italic">Times out</th>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Insert</b></td>
|
||||
* <td>{@link #addFirst(Object) addFirst(e)}</td>
|
||||
* <td>{@link #offerFirst(Object) offerFirst(e)}</td>
|
||||
* <td>{@link #putFirst(Object) putFirst(e)}</td>
|
||||
* <td>{@link #offerFirst(Object, long, TimeUnit) offerFirst(e, time, unit)}</td>
|
||||
* <th id="FInsert" style="text-align:left">Insert</th>
|
||||
* <td headers="First FInsert FThrow">{@link #addFirst(Object) addFirst(e)}</td>
|
||||
* <td headers="First FInsert FValue">{@link #offerFirst(Object) offerFirst(e)}</td>
|
||||
* <td headers="First FInsert FBlock">{@link #putFirst(Object) putFirst(e)}</td>
|
||||
* <td headers="First FInsert FTimes">{@link #offerFirst(Object, long, TimeUnit) offerFirst(e, time, unit)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Remove</b></td>
|
||||
* <td>{@link #removeFirst() removeFirst()}</td>
|
||||
* <td>{@link #pollFirst() pollFirst()}</td>
|
||||
* <td>{@link #takeFirst() takeFirst()}</td>
|
||||
* <td>{@link #pollFirst(long, TimeUnit) pollFirst(time, unit)}</td>
|
||||
* <th id="FRemove" style="text-align:left">Remove</th>
|
||||
* <td headers="First FRemove FThrow">{@link #removeFirst() removeFirst()}</td>
|
||||
* <td headers="First FRemove FValue">{@link #pollFirst() pollFirst()}</td>
|
||||
* <td headers="First FRemove FBlock">{@link #takeFirst() takeFirst()}</td>
|
||||
* <td headers="First FRemove FTimes">{@link #pollFirst(long, TimeUnit) pollFirst(time, unit)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Examine</b></td>
|
||||
* <td>{@link #getFirst() getFirst()}</td>
|
||||
* <td>{@link #peekFirst() peekFirst()}</td>
|
||||
* <td><em>not applicable</em></td>
|
||||
* <td><em>not applicable</em></td>
|
||||
* <th id="FExamine" style="text-align:left">Examine</th>
|
||||
* <td headers="First FExamine FThrow">{@link #getFirst() getFirst()}</td>
|
||||
* <td headers="First FExamine FValue">{@link #peekFirst() peekFirst()}</td>
|
||||
* <td headers="First FExamine FBlock" style="font-style:italic">not applicable</td>
|
||||
* <td headers="First FExamine FTimes" style="font-style:italic">not applicable</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td style="text-align:center" COLSPAN = 5> <b>Last Element (Tail)</b></td>
|
||||
* <th id="Last" colspan="5"> Last Element (Tail)</th>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td style="text-align:center"><em>Throws exception</em></td>
|
||||
* <td style="text-align:center"><em>Special value</em></td>
|
||||
* <td style="text-align:center"><em>Blocks</em></td>
|
||||
* <td style="text-align:center"><em>Times out</em></td>
|
||||
* <th id="LThrow" style="font-weight:normal; font-style: italic">Throws exception</th>
|
||||
* <th id="LValue" style="font-weight:normal; font-style: italic">Special value</th>
|
||||
* <th id="LBlock" style="font-weight:normal; font-style: italic">Blocks</th>
|
||||
* <th id="LTimes" style="font-weight:normal; font-style: italic">Times out</th>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Insert</b></td>
|
||||
* <td>{@link #addLast(Object) addLast(e)}</td>
|
||||
* <td>{@link #offerLast(Object) offerLast(e)}</td>
|
||||
* <td>{@link #putLast(Object) putLast(e)}</td>
|
||||
* <td>{@link #offerLast(Object, long, TimeUnit) offerLast(e, time, unit)}</td>
|
||||
* <th id="LInsert" style="text-align:left">Insert</th>
|
||||
* <td headers="Last LInsert LThrow">{@link #addLast(Object) addLast(e)}</td>
|
||||
* <td headers="Last LInsert LValue">{@link #offerLast(Object) offerLast(e)}</td>
|
||||
* <td headers="Last LInsert LBlock">{@link #putLast(Object) putLast(e)}</td>
|
||||
* <td headers="Last LInsert LTimes">{@link #offerLast(Object, long, TimeUnit) offerLast(e, time, unit)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Remove</b></td>
|
||||
* <td>{@link #removeLast() removeLast()}</td>
|
||||
* <td>{@link #pollLast() pollLast()}</td>
|
||||
* <td>{@link #takeLast() takeLast()}</td>
|
||||
* <td>{@link #pollLast(long, TimeUnit) pollLast(time, unit)}</td>
|
||||
* <th id="LRemove" style="text-align:left">Remove</th>
|
||||
* <td headers="Last LRemove LThrow">{@link #removeLast() removeLast()}</td>
|
||||
* <td headers="Last LRemove LValue">{@link #pollLast() pollLast()}</td>
|
||||
* <td headers="Last LRemove LBlock">{@link #takeLast() takeLast()}</td>
|
||||
* <td headers="Last LRemove LTimes">{@link #pollLast(long, TimeUnit) pollLast(time, unit)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Examine</b></td>
|
||||
* <td>{@link #getLast() getLast()}</td>
|
||||
* <td>{@link #peekLast() peekLast()}</td>
|
||||
* <td><em>not applicable</em></td>
|
||||
* <td><em>not applicable</em></td>
|
||||
* <th id="LExamine" style="text-align:left">Examine</th>
|
||||
* <td headers="Last LExamine LThrow">{@link #getLast() getLast()}</td>
|
||||
* <td headers="Last LExamine LValue">{@link #peekLast() peekLast()}</td>
|
||||
* <td headers="Last LExamine LBlock" style="font-style:italic">not applicable</td>
|
||||
* <td headers="Last LExamine LTimes" style="font-style:italic">not applicable</td>
|
||||
* </tr>
|
||||
* </table>
|
||||
*
|
||||
@ -131,57 +131,52 @@ import java.util.NoSuchElementException;
|
||||
* <table class="plain">
|
||||
* <caption>Comparison of BlockingQueue and BlockingDeque methods</caption>
|
||||
* <tr>
|
||||
* <td style="text-align:center"> <b>{@code BlockingQueue} Method</b></td>
|
||||
* <td style="text-align:center"> <b>Equivalent {@code BlockingDeque} Method</b></td>
|
||||
* <td></td>
|
||||
* <th id="BQueue"> {@code BlockingQueue} Method</th>
|
||||
* <th id="BDeque"> Equivalent {@code BlockingDeque} Method</th>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td style="text-align:center" COLSPAN = 2> <b>Insert</b></td>
|
||||
* <th id="Insert" rowspan="4" style="text-align:left; vertical-align:top">Insert</th>
|
||||
* <th id="add" style="font-weight:normal; text-align:left">{@link #add(Object) add(e)}</th>
|
||||
* <td headers="Insert BDeque add">{@link #addLast(Object) addLast(e)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #add(Object) add(e)}</td>
|
||||
* <td>{@link #addLast(Object) addLast(e)}</td>
|
||||
* <th id="offer1" style="font-weight:normal; text-align:left">{@link #offer(Object) offer(e)}</th>
|
||||
* <td headers="Insert BDeque offer1">{@link #offerLast(Object) offerLast(e)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #offer(Object) offer(e)}</td>
|
||||
* <td>{@link #offerLast(Object) offerLast(e)}</td>
|
||||
* <th id="put" style="font-weight:normal; text-align:left">{@link #put(Object) put(e)}</th>
|
||||
* <td headers="Insert BDeque put">{@link #putLast(Object) putLast(e)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #put(Object) put(e)}</td>
|
||||
* <td>{@link #putLast(Object) putLast(e)}</td>
|
||||
* <th id="offer2" style="font-weight:normal; text-align:left">{@link #offer(Object, long, TimeUnit) offer(e, time, unit)}</th>
|
||||
* <td headers="Insert BDeque offer2">{@link #offerLast(Object, long, TimeUnit) offerLast(e, time, unit)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #offer(Object, long, TimeUnit) offer(e, time, unit)}</td>
|
||||
* <td>{@link #offerLast(Object, long, TimeUnit) offerLast(e, time, unit)}</td>
|
||||
* <th id="Remove" rowspan="4" style="text-align:left; vertical-align:top">Remove</th>
|
||||
* <th id="remove" style="font-weight:normal; text-align:left">{@link #remove() remove()}</th>
|
||||
* <td headers="Remove BDeque remove">{@link #removeFirst() removeFirst()}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td style="text-align:center" COLSPAN = 2> <b>Remove</b></td>
|
||||
* <th id="poll1" style="font-weight:normal; text-align:left">{@link #poll() poll()}</th>
|
||||
* <td headers="Remove BDeque poll1">{@link #pollFirst() pollFirst()}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #remove() remove()}</td>
|
||||
* <td>{@link #removeFirst() removeFirst()}</td>
|
||||
* <th id="take" style="font-weight:normal; text-align:left">{@link #take() take()}</th>
|
||||
* <td headers="Remove BDeque take">{@link #takeFirst() takeFirst()}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #poll() poll()}</td>
|
||||
* <td>{@link #pollFirst() pollFirst()}</td>
|
||||
* <th id="poll2" style="font-weight:normal; text-align:left">{@link #poll(long, TimeUnit) poll(time, unit)}</th>
|
||||
* <td headers="Remove BDeque poll2">{@link #pollFirst(long, TimeUnit) pollFirst(time, unit)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #take() take()}</td>
|
||||
* <td>{@link #takeFirst() takeFirst()}</td>
|
||||
* <th id="Examine" rowspan="2" style="text-align:left; vertical-align:top">Examine</th>
|
||||
* <th id="element" style="font-weight:normal; text-align:left">{@link #element() element()}</th>
|
||||
* <td headers="Examine BDeque element">{@link #getFirst() getFirst()}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #poll(long, TimeUnit) poll(time, unit)}</td>
|
||||
* <td>{@link #pollFirst(long, TimeUnit) pollFirst(time, unit)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td style="text-align:center" COLSPAN = 2> <b>Examine</b></td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #element() element()}</td>
|
||||
* <td>{@link #getFirst() getFirst()}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #peek() peek()}</td>
|
||||
* <td>{@link #peekFirst() peekFirst()}</td>
|
||||
* <th id="peek" style="font-weight:normal; text-align:left">{@link #peek() peek()}</th>
|
||||
* <td headers="Examine BDeque peek">{@link #peekFirst() peekFirst()}</td>
|
||||
* </tr>
|
||||
* </table>
|
||||
*
|
||||
|
@ -56,31 +56,31 @@ import java.util.Queue;
|
||||
* <caption>Summary of BlockingQueue methods</caption>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td style="text-align:center"><em>Throws exception</em></td>
|
||||
* <td style="text-align:center"><em>Special value</em></td>
|
||||
* <td style="text-align:center"><em>Blocks</em></td>
|
||||
* <td style="text-align:center"><em>Times out</em></td>
|
||||
* <th scope="col" style="font-weight:normal; font-style:italic">Throws exception</th>
|
||||
* <th scope="col" style="font-weight:normal; font-style:italic">Special value</th>
|
||||
* <th scope="col" style="font-weight:normal; font-style:italic">Blocks</th>
|
||||
* <th scope="col" style="font-weight:normal; font-style:italic">Times out</th>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Insert</b></td>
|
||||
* <th scope="row" style="text-align:left">Insert</th>
|
||||
* <td>{@link #add(Object) add(e)}</td>
|
||||
* <td>{@link #offer(Object) offer(e)}</td>
|
||||
* <td>{@link #put(Object) put(e)}</td>
|
||||
* <td>{@link #offer(Object, long, TimeUnit) offer(e, time, unit)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Remove</b></td>
|
||||
* <th scope="row" style="text-align:left">Remove</th>
|
||||
* <td>{@link #remove() remove()}</td>
|
||||
* <td>{@link #poll() poll()}</td>
|
||||
* <td>{@link #take() take()}</td>
|
||||
* <td>{@link #poll(long, TimeUnit) poll(time, unit)}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td><b>Examine</b></td>
|
||||
* <th scope="row" style="text-align:left">Examine</th>
|
||||
* <td>{@link #element() element()}</td>
|
||||
* <td>{@link #peek() peek()}</td>
|
||||
* <td><em>not applicable</em></td>
|
||||
* <td><em>not applicable</em></td>
|
||||
* <td style="font-style: italic">not applicable</td>
|
||||
* <td style="font-style: italic">not applicable</td>
|
||||
* </tr>
|
||||
* </table>
|
||||
*
|
||||
|
@ -3306,15 +3306,8 @@ public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>
|
||||
}
|
||||
|
||||
private static final Unsafe U = Unsafe.getUnsafe();
|
||||
private static final long LOCKSTATE;
|
||||
static {
|
||||
try {
|
||||
LOCKSTATE = U.objectFieldOffset
|
||||
(TreeBin.class.getDeclaredField("lockState"));
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
private static final long LOCKSTATE
|
||||
= U.objectFieldOffset(TreeBin.class, "lockState");
|
||||
}
|
||||
|
||||
/* ----------------Table Traversal -------------- */
|
||||
@ -6380,27 +6373,23 @@ public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>
|
||||
private static final int ASHIFT;
|
||||
|
||||
static {
|
||||
try {
|
||||
SIZECTL = U.objectFieldOffset
|
||||
(ConcurrentHashMap.class.getDeclaredField("sizeCtl"));
|
||||
TRANSFERINDEX = U.objectFieldOffset
|
||||
(ConcurrentHashMap.class.getDeclaredField("transferIndex"));
|
||||
BASECOUNT = U.objectFieldOffset
|
||||
(ConcurrentHashMap.class.getDeclaredField("baseCount"));
|
||||
CELLSBUSY = U.objectFieldOffset
|
||||
(ConcurrentHashMap.class.getDeclaredField("cellsBusy"));
|
||||
SIZECTL = U.objectFieldOffset
|
||||
(ConcurrentHashMap.class, "sizeCtl");
|
||||
TRANSFERINDEX = U.objectFieldOffset
|
||||
(ConcurrentHashMap.class, "transferIndex");
|
||||
BASECOUNT = U.objectFieldOffset
|
||||
(ConcurrentHashMap.class, "baseCount");
|
||||
CELLSBUSY = U.objectFieldOffset
|
||||
(ConcurrentHashMap.class, "cellsBusy");
|
||||
|
||||
CELLVALUE = U.objectFieldOffset
|
||||
(CounterCell.class.getDeclaredField("value"));
|
||||
CELLVALUE = U.objectFieldOffset
|
||||
(CounterCell.class, "value");
|
||||
|
||||
ABASE = U.arrayBaseOffset(Node[].class);
|
||||
int scale = U.arrayIndexScale(Node[].class);
|
||||
if ((scale & (scale - 1)) != 0)
|
||||
throw new Error("array index scale not a power of two");
|
||||
ASHIFT = 31 - Integer.numberOfLeadingZeros(scale);
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
ABASE = U.arrayBaseOffset(Node[].class);
|
||||
int scale = U.arrayIndexScale(Node[].class);
|
||||
if ((scale & (scale - 1)) != 0)
|
||||
throw new Error("array index scale not a power of two");
|
||||
ASHIFT = 31 - Integer.numberOfLeadingZeros(scale);
|
||||
|
||||
// Reduce the risk of rare disastrous classloading in first call to
|
||||
// LockSupport.park: https://bugs.openjdk.java.net/browse/JDK-8074773
|
||||
|
@ -113,21 +113,21 @@ import java.util.concurrent.locks.LockSupport;
|
||||
* <caption>Summary of task execution methods</caption>
|
||||
* <tr>
|
||||
* <td></td>
|
||||
* <td style="text-align:center"> <b>Call from non-fork/join clients</b></td>
|
||||
* <td style="text-align:center"> <b>Call from within fork/join computations</b></td>
|
||||
* <th scope="col"> Call from non-fork/join clients</th>
|
||||
* <th scope="col"> Call from within fork/join computations</th>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td> <b>Arrange async execution</b></td>
|
||||
* <th scope="row" style="text-align:left"> Arrange async execution</th>
|
||||
* <td> {@link #execute(ForkJoinTask)}</td>
|
||||
* <td> {@link ForkJoinTask#fork}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td> <b>Await and obtain result</b></td>
|
||||
* <th scope="row" style="text-align:left"> Await and obtain result</th>
|
||||
* <td> {@link #invoke(ForkJoinTask)}</td>
|
||||
* <td> {@link ForkJoinTask#invoke}</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td> <b>Arrange exec and obtain Future</b></td>
|
||||
* <th scope="row" style="text-align:left"> Arrange exec and obtain Future</th>
|
||||
* <td> {@link #submit(ForkJoinTask)}</td>
|
||||
* <td> {@link ForkJoinTask#fork} (ForkJoinTasks <em>are</em> Futures)</td>
|
||||
* </tr>
|
||||
|
@ -1050,30 +1050,18 @@ public class ThreadLocalRandom extends Random {
|
||||
|
||||
// Unsafe mechanics
|
||||
private static final Unsafe U = Unsafe.getUnsafe();
|
||||
private static final long SEED;
|
||||
private static final long PROBE;
|
||||
private static final long SECONDARY;
|
||||
private static final long THREADLOCALS;
|
||||
private static final long INHERITABLETHREADLOCALS;
|
||||
private static final long INHERITEDACCESSCONTROLCONTEXT;
|
||||
static {
|
||||
try {
|
||||
SEED = U.objectFieldOffset
|
||||
(Thread.class.getDeclaredField("threadLocalRandomSeed"));
|
||||
PROBE = U.objectFieldOffset
|
||||
(Thread.class.getDeclaredField("threadLocalRandomProbe"));
|
||||
SECONDARY = U.objectFieldOffset
|
||||
(Thread.class.getDeclaredField("threadLocalRandomSecondarySeed"));
|
||||
THREADLOCALS = U.objectFieldOffset
|
||||
(Thread.class.getDeclaredField("threadLocals"));
|
||||
INHERITABLETHREADLOCALS = U.objectFieldOffset
|
||||
(Thread.class.getDeclaredField("inheritableThreadLocals"));
|
||||
INHERITEDACCESSCONTROLCONTEXT = U.objectFieldOffset
|
||||
(Thread.class.getDeclaredField("inheritedAccessControlContext"));
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
private static final long SEED = U.objectFieldOffset
|
||||
(Thread.class, "threadLocalRandomSeed");
|
||||
private static final long PROBE = U.objectFieldOffset
|
||||
(Thread.class, "threadLocalRandomProbe");
|
||||
private static final long SECONDARY = U.objectFieldOffset
|
||||
(Thread.class, "threadLocalRandomSecondarySeed");
|
||||
private static final long THREADLOCALS = U.objectFieldOffset
|
||||
(Thread.class, "threadLocals");
|
||||
private static final long INHERITABLETHREADLOCALS = U.objectFieldOffset
|
||||
(Thread.class, "inheritableThreadLocals");
|
||||
private static final long INHERITEDACCESSCONTROLCONTEXT = U.objectFieldOffset
|
||||
(Thread.class, "inheritedAccessControlContext");
|
||||
|
||||
/** Rarely-used holder for the second of a pair of Gaussians */
|
||||
private static final ThreadLocal<Double> nextLocalGaussian =
|
||||
|
@ -59,16 +59,7 @@ public class AtomicInteger extends Number implements java.io.Serializable {
|
||||
* are unresolved cyclic startup dependencies.
|
||||
*/
|
||||
private static final jdk.internal.misc.Unsafe U = jdk.internal.misc.Unsafe.getUnsafe();
|
||||
private static final long VALUE;
|
||||
|
||||
static {
|
||||
try {
|
||||
VALUE = U.objectFieldOffset
|
||||
(AtomicInteger.class.getDeclaredField("value"));
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
private static final long VALUE = U.objectFieldOffset(AtomicInteger.class, "value");
|
||||
|
||||
private volatile int value;
|
||||
|
||||
|
@ -73,16 +73,7 @@ public class AtomicLong extends Number implements java.io.Serializable {
|
||||
* are unresolved cyclic startup dependencies.
|
||||
*/
|
||||
private static final jdk.internal.misc.Unsafe U = jdk.internal.misc.Unsafe.getUnsafe();
|
||||
private static final long VALUE;
|
||||
|
||||
static {
|
||||
try {
|
||||
VALUE = U.objectFieldOffset
|
||||
(AtomicLong.class.getDeclaredField("value"));
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
private static final long VALUE = U.objectFieldOffset(AtomicLong.class, "value");
|
||||
|
||||
private volatile long value;
|
||||
|
||||
|
@ -421,21 +421,11 @@ public class LockSupport {
|
||||
|
||||
// Hotspot implementation via intrinsics API
|
||||
private static final Unsafe U = Unsafe.getUnsafe();
|
||||
private static final long PARKBLOCKER;
|
||||
private static final long SECONDARY;
|
||||
private static final long TID;
|
||||
static {
|
||||
try {
|
||||
PARKBLOCKER = U.objectFieldOffset
|
||||
(Thread.class.getDeclaredField("parkBlocker"));
|
||||
SECONDARY = U.objectFieldOffset
|
||||
(Thread.class.getDeclaredField("threadLocalRandomSecondarySeed"));
|
||||
TID = U.objectFieldOffset
|
||||
(Thread.class.getDeclaredField("tid"));
|
||||
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
private static final long PARKBLOCKER = U.objectFieldOffset
|
||||
(Thread.class, "parkBlocker");
|
||||
private static final long SECONDARY = U.objectFieldOffset
|
||||
(Thread.class, "threadLocalRandomSecondarySeed");
|
||||
private static final long TID = U.objectFieldOffset
|
||||
(Thread.class, "tid");
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
@ -26,16 +23,15 @@
|
||||
or visit www.oracle.com if you need additional information or have any
|
||||
questions.
|
||||
-->
|
||||
|
||||
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang=
|
||||
"en-US">
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<title>Java Collections API Design FAQ</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
</head>
|
||||
<body>
|
||||
<h2>Java Collections API Design FAQ</h2>
|
||||
<!-- Body text begins here -->
|
||||
<hr />
|
||||
<hr>
|
||||
This document answers frequently asked questions concerning the
|
||||
design of the Java collections framework. It is derived from the
|
||||
large volume of traffic on the collections-comments alias. It
|
||||
@ -105,10 +101,10 @@ aliasing.</b></a></li>
|
||||
collections that send out Events when they're
|
||||
modified?</b></a></li>
|
||||
</ol>
|
||||
<hr size="3" noshade="noshade" />
|
||||
<hr>
|
||||
<h3>Core Interfaces - General Questions</h3>
|
||||
<ol>
|
||||
<li><a name="a1" id="a1"><b>Why don't you support immutability
|
||||
<li><a id="a1"><b>Why don't you support immutability
|
||||
directly in the core collection interfaces so that you can do away
|
||||
with <em>optional operations</em> (and
|
||||
UnsupportedOperationException)?</b></a>
|
||||
@ -168,7 +164,7 @@ engineering compromise to sidestep the whole issue by providing a
|
||||
very small set of core interfaces that can throw a runtime
|
||||
exception.</p>
|
||||
</li>
|
||||
<li><a name="a2" id="a2"><b>Won't programmers have to surround any
|
||||
<li><a id="a2"><b>Won't programmers have to surround any
|
||||
code that calls optional operations with a try-catch clause in case
|
||||
they throw an UnsupportedOperationException?</b></a>
|
||||
<p>It was never our intention that programs should catch these
|
||||
@ -176,7 +172,7 @@ exceptions: that's why they're unchecked (runtime) exceptions. They
|
||||
should only arise as a result of programming errors, in which case,
|
||||
your program will halt due to the uncaught exception.</p>
|
||||
</li>
|
||||
<li><a name="a3" id="a3"><b>Why isn't there a core interface for
|
||||
<li><a id="a3"><b>Why isn't there a core interface for
|
||||
"bags" (AKA multisets)?</b></a>
|
||||
<p>The Collection interface provides this functionality. We are not
|
||||
providing any public implementations of this interface, as we think
|
||||
@ -185,7 +181,7 @@ occasionally return such Collections, which are implemented easily
|
||||
atop AbstractCollection (for example, the Collection returned by
|
||||
Map.values).</p>
|
||||
</li>
|
||||
<li><a name="a28" id="a28"><b>Why didn't you use "Beans-style
|
||||
<li><a id="a28"><b>Why didn't you use "Beans-style
|
||||
names" for consistency?</b></a>
|
||||
<p>While the names of the new collections methods do not adhere to
|
||||
the "Beans naming conventions", we believe that they are
|
||||
@ -207,10 +203,10 @@ a long expression. If we named the methods "getIterator",
|
||||
case. Thus, we adopted the "traditional" JDK style rather than the
|
||||
Beans style.</li>
|
||||
</ol>
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>Collection Interface</h3>
|
||||
<ol>
|
||||
<li><a name="a5" id="a5"><b>Why doesn't Collection extend Cloneable
|
||||
<li><a id="a5"><b>Why doesn't Collection extend Cloneable
|
||||
and Serializable?</b></a>
|
||||
<p>Many Collection implementations (including all of the ones
|
||||
provided by the JDK) will have a public clone method, but it would
|
||||
@ -224,7 +220,7 @@ what type of Collection is desired, create an empty Collection of
|
||||
this type, and use the addAll method to copy the elements of the
|
||||
original collection into the new one.</p>
|
||||
</li>
|
||||
<li><a name="a6" id="a6"><b>Why don't you provide an "apply" method
|
||||
<li><a id="a6"><b>Why don't you provide an "apply" method
|
||||
in Collection to apply a given method ("upcall") to all the
|
||||
elements of the Collection?</b></a>
|
||||
<p>This is what is referred to as an "Internal Iterator" in the
|
||||
@ -235,7 +231,7 @@ for external iterators (with Enumerations). The "throw weight" of
|
||||
this functionality is increased by the fact that it requires a
|
||||
public interface to describe upcalls.</p>
|
||||
</li>
|
||||
<li><a name="a7" id="a7"><b>Why didn't you provide a "Predicate"
|
||||
<li><a id="a7"><b>Why didn't you provide a "Predicate"
|
||||
interface, and related methods (e.g., a method to find the first
|
||||
element in the Collection satisfying the predicate)?</b></a>
|
||||
<p>It's easy to implement this functionality atop Iterators, and
|
||||
@ -244,14 +240,14 @@ the predicate. Thus, it's not clear whether this facility pulls its
|
||||
weight. It could be added to the Collections class at a later date
|
||||
(implemented atop Iterator), if it's deemed useful.</p>
|
||||
</li>
|
||||
<li><a name="a8" id="a8"><b>Why don't you provide a form of the
|
||||
<li><a id="a8"><b>Why don't you provide a form of the
|
||||
addAll method that takes an Enumeration (or an Iterator)?</b></a>
|
||||
<p>Because we don't believe in using Enumerations (or Iterators) as
|
||||
"poor man's collections." This was occasionally done in prior
|
||||
releases, but now that we have the Collection interface, it is the
|
||||
preferred way to pass around abstract collections of objects.</p>
|
||||
</li>
|
||||
<li><a name="a9" id="a9"><b>Why don't the concrete implementations
|
||||
<li><a id="a9"><b>Why don't the concrete implementations
|
||||
in the JDK have Enumeration (or Iterator) constructors?</b></a>
|
||||
<p>Again, this is an instance of an Enumeration serving as a "poor
|
||||
man's collection" and we're trying to discourage that. Note
|
||||
@ -259,7 +255,7 @@ however, that we strongly suggest that all concrete implementations
|
||||
should have constructors that take a Collection (and create a new
|
||||
Collection with the same elements).</p>
|
||||
</li>
|
||||
<li><a name="a10" id="a10"><b>Why don't you provide an Iterator.add
|
||||
<li><a id="a10"><b>Why don't you provide an Iterator.add
|
||||
method?</b></a>
|
||||
<p>The semantics are unclear, given that the contract for Iterator
|
||||
makes no guarantees about the order of iteration. Note, however,
|
||||
@ -267,10 +263,10 @@ that ListIterator does provide an add operation, as it does
|
||||
guarantee the order of the iteration.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>List Interface</h3>
|
||||
<ol>
|
||||
<li><a name="a11" id="a11"><b>Why don't you rename the List
|
||||
<li><a id="a11"><b>Why don't you rename the List
|
||||
interface to Sequence; doesn't "list" generally suggest "linked
|
||||
list"? Also, doesn't it conflict with java.awt.List?</b></a>
|
||||
<p>People were evenly divided as to whether List suggests linked
|
||||
@ -285,16 +281,16 @@ naming conflict can be dealt with by the following incantation:</p>
|
||||
import java.awt.*;
|
||||
import java.util.List; // Dictates interpretation of "List"
|
||||
</pre></li>
|
||||
<li><a name="a12" id="a12"><b>Why don't you rename List's set
|
||||
<li><a id="a12"><b>Why don't you rename List's set
|
||||
method to replace, to avoid confusion with Set.</b></a>
|
||||
<p>It was decided that the "set/get" naming convention was strongly
|
||||
enough enshrined in the language that we'd stick with it.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>Map Interface</h3>
|
||||
<ol>
|
||||
<li><a name="a14" id="a14"><b>Why doesn't Map extend
|
||||
<li><a id="a14"><b>Why doesn't Map extend
|
||||
Collection?</b></a>
|
||||
<p>This was by design. We feel that mappings are not collections
|
||||
and collections are not mappings. Thus, it makes little sense for
|
||||
@ -317,10 +313,10 @@ deleted element. That's why we don't have a map view operation on
|
||||
Lists.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>Iterator Interface</h3>
|
||||
<ol>
|
||||
<li><a name="a18" id="a18"><b>Why doesn't Iterator extend
|
||||
<li><a id="a18"><b>Why doesn't Iterator extend
|
||||
Enumeration?</b></a>
|
||||
<p>We view the method names for Enumeration as unfortunate. They're
|
||||
very long, and very frequently used. Given that we were adding a
|
||||
@ -329,7 +325,7 @@ foolish not to take advantage of the opportunity to improve the
|
||||
names. Of course we could support the new and old names in
|
||||
Iterator, but it doesn't seem worthwhile.</p>
|
||||
</li>
|
||||
<li><a name="a19" id="a19"><b>Why don't you provide an
|
||||
<li><a id="a19"><b>Why don't you provide an
|
||||
Iterator.peek method that allows you to look at the next element in
|
||||
an iteration without advancing the iterator?</b></a>
|
||||
<p>It can be implemented atop the current Iterators (a similar
|
||||
@ -338,10 +334,10 @@ would be rare enough that it isn't worth including in the interface
|
||||
that everyone has to implement.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<hr />
|
||||
<hr>
|
||||
<h3>Miscellaneous</h3>
|
||||
<ol>
|
||||
<li><a name="a23" id="a23"><b>Why did you write a new collections
|
||||
<li><a id="a23"><b>Why did you write a new collections
|
||||
framework instead of adopting JGL (a preexisting collections
|
||||
package from ObjectSpace, Inc.) into the JDK?</b></a>
|
||||
<p>If you examine the goals for our Collections framework (in the
|
||||
@ -363,7 +359,7 @@ libraries mature, they inevitably grow, but we are trying as hard
|
||||
as we can to keep them small and manageable, so that Java continues
|
||||
to be an easy, fun language to learn and to use.</p>
|
||||
</li>
|
||||
<li><a name="a26" id="a26"><b>Why don't you eliminate all of the
|
||||
<li><a id="a26"><b>Why don't you eliminate all of the
|
||||
methods and classes that return "views" (Collections backed by
|
||||
other collection-like objects). This would greatly reduce
|
||||
aliasing.</b></a>
|
||||
@ -380,7 +376,7 @@ The existence of this method means that people who write methods
|
||||
taking List on input do not have to write secondary forms taking an
|
||||
offset and a length (as they do for arrays).</p>
|
||||
</li>
|
||||
<li><a name="a27" id="a27"><b>Why don't you provide for
|
||||
<li><a id="a27"><b>Why don't you provide for
|
||||
"observable" collections that send out Events when they're
|
||||
modified?</b></a>
|
||||
<p>Primarily, resource constraints. If we're going to commit to
|
||||
@ -390,9 +386,9 @@ some day. In the meantime, it's not difficult to implement such a
|
||||
facility on top of the public APIs.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<hr />
|
||||
<hr>
|
||||
<p style="font-size:smaller">
|
||||
Copyright © 1998, 2017, Oracle and/or its affiliates. 500 Oracle Parkway<br />
|
||||
Copyright © 1998, 2017, Oracle and/or its affiliates. 500 Oracle Parkway<br>
|
||||
Redwood Shores, CA 94065 USA. All rights reserved.</p>
|
||||
<!-- Body text ends here -->
|
||||
</body>
|
||||
|
@ -1,6 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
@ -27,8 +25,7 @@
|
||||
questions.
|
||||
-->
|
||||
|
||||
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang=
|
||||
"en-US">
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy, see www.w3.org" />
|
||||
<title>The Collections Framework</title>
|
||||
@ -71,7 +68,7 @@ collections framework, with links into the API Specification.</li>
|
||||
frequently asked questions (FAQ) about the design of the
|
||||
collections framework.</li>
|
||||
</ul>
|
||||
<hr />
|
||||
<hr>
|
||||
<p style="font-size:smaller">
|
||||
Copyright © 1998, 2017, Oracle and/or its affiliates. 500 Oracle Parkway<br />
|
||||
Redwood Shores, CA 94065 USA. All rights reserved.</p>
|
||||
|
@ -1,7 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
@ -26,11 +23,29 @@
|
||||
or visit www.oracle.com if you need additional information or have any
|
||||
questions.
|
||||
-->
|
||||
|
||||
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang=
|
||||
"en-US">
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>Collections Framework Overview</title>
|
||||
<style>
|
||||
#impls {
|
||||
border: 1px solid black;
|
||||
border-collapse: collapse;
|
||||
margin: 0 auto;
|
||||
}
|
||||
#impls caption {
|
||||
font-weight: bold;
|
||||
font-size: smaller;
|
||||
}
|
||||
#impls, #impls th, #impls td {
|
||||
border: 1px solid black;
|
||||
padding: 2px .5em;
|
||||
}
|
||||
#impls tbody th {
|
||||
font-weight: normal;
|
||||
text-align:left;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Collections Framework Overview</h1>
|
||||
@ -73,7 +88,7 @@ interfaces form the basis of the framework.</li>
|
||||
<li><strong>General-purpose implementations</strong>. Primary
|
||||
implementations of the collection interfaces.</li>
|
||||
<li><strong>Legacy implementations</strong>. The collection classes
|
||||
from earlier releases, <tt>Vector</tt> and <tt>Hashtable</tt>, were
|
||||
from earlier releases, <code>Vector</code> and <code>Hashtable</code>, were
|
||||
retrofitted to implement the collection interfaces.</li>
|
||||
<li><strong>Special-purpose implementations</strong>.
|
||||
Implementations designed for use in special situations. These
|
||||
@ -101,57 +116,57 @@ relies on some of the same infrastructure.</li>
|
||||
<hr />
|
||||
<h2>Collection Interfaces</h2>
|
||||
<p>The <i>collection interfaces</i> are divided into two groups.
|
||||
The most basic interface, <tt><a href=
|
||||
"../Collection.html">java.util.Collection</a></tt>,
|
||||
The most basic interface, <code><a href=
|
||||
"../Collection.html">java.util.Collection</a></code>,
|
||||
has the following descendants:</p>
|
||||
<ul>
|
||||
<li><tt><a href=
|
||||
"../Set.html">java.util.Set</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../SortedSet.html">java.util.SortedSet</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../NavigableSet.html">java.util.NavigableSet</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../Queue.html">java.util.Queue</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/BlockingQueue.html">java.util.concurrent.BlockingQueue</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/TransferQueue.html">java.util.concurrent.TransferQueue</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../Deque.html">java.util.Deque</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/BlockingDeque.html">java.util.concurrent.BlockingDeque</a></tt></li>
|
||||
<li><code><a href=
|
||||
"../Set.html">java.util.Set</a></code></li>
|
||||
<li><code><a href=
|
||||
"../SortedSet.html">java.util.SortedSet</a></code></li>
|
||||
<li><code><a href=
|
||||
"../NavigableSet.html">java.util.NavigableSet</a></code></li>
|
||||
<li><code><a href=
|
||||
"../Queue.html">java.util.Queue</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/BlockingQueue.html">java.util.concurrent.BlockingQueue</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/TransferQueue.html">java.util.concurrent.TransferQueue</a></code></li>
|
||||
<li><code><a href=
|
||||
"../Deque.html">java.util.Deque</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/BlockingDeque.html">java.util.concurrent.BlockingDeque</a></code></li>
|
||||
</ul>
|
||||
<p>The other collection interfaces are based on <tt><a href=
|
||||
"../Map.html">java.util.Map</a></tt> and are
|
||||
<p>The other collection interfaces are based on <code><a href=
|
||||
"../Map.html">java.util.Map</a></code> and are
|
||||
not true collections. However, these interfaces contain
|
||||
<i>collection-view</i> operations, which enable them to be
|
||||
manipulated as collections. <tt>Map</tt> has the following
|
||||
manipulated as collections. <code>Map</code> has the following
|
||||
offspring:</p>
|
||||
<ul>
|
||||
<li><tt><a href=
|
||||
"../SortedMap.html">java.util.SortedMap</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../NavigableMap.html">java.util.NavigableMap</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/ConcurrentMap.html">java.util.concurrent.ConcurrentMap</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/ConcurrentNavigableMap.html">java.util.concurrent.ConcurrentNavigableMap</a></tt></li>
|
||||
<li><code><a href=
|
||||
"../SortedMap.html">java.util.SortedMap</a></code></li>
|
||||
<li><code><a href=
|
||||
"../NavigableMap.html">java.util.NavigableMap</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/ConcurrentMap.html">java.util.concurrent.ConcurrentMap</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/ConcurrentNavigableMap.html">java.util.concurrent.ConcurrentNavigableMap</a></code></li>
|
||||
</ul>
|
||||
<p>Many of the modification methods in the collection interfaces
|
||||
are labeled <i>optional</i>. Implementations are permitted to not
|
||||
perform one or more of these operations, throwing a runtime
|
||||
exception (<tt>UnsupportedOperationException</tt>) if they are
|
||||
exception (<code>UnsupportedOperationException</code>) if they are
|
||||
attempted. The documentation for each implementation must specify
|
||||
which optional operations are supported. Several terms are
|
||||
introduced to aid in this specification:</p>
|
||||
<ul>
|
||||
<li>Collections that do not support modification operations (such
|
||||
as <tt>add</tt>, <tt>remove</tt> and <tt>clear</tt>) are referred
|
||||
as <code>add</code>, <code>remove</code> and <code>clear</code>) are referred
|
||||
to as <i>unmodifiable</i>. Collections that are not unmodifiable
|
||||
are <i>modifiable.</i></li>
|
||||
<li>Collections that additionally guarantee that no change in the
|
||||
<tt>Collection</tt> object will be visible are referred to as
|
||||
<code>Collection</code> object will be visible are referred to as
|
||||
<i>immutable</i>. Collections that are not immutable are
|
||||
<i>mutable</i>.</li>
|
||||
<li>Lists that guarantee that their size remains constant even
|
||||
@ -161,15 +176,15 @@ though the elements can change are referred to as
|
||||
<li>Lists that support fast (generally constant time) indexed
|
||||
element access are known as <i>random access</i> lists. Lists that
|
||||
do not support fast indexed element access are known as
|
||||
<i>sequential access</i> lists. The <tt><a href=
|
||||
"../RandomAccess.html">RandomAccess</a></tt>
|
||||
<i>sequential access</i> lists. The <code><a href=
|
||||
"../RandomAccess.html">RandomAccess</a></code>
|
||||
marker interface enables lists to advertise the fact that they
|
||||
support random access. This enables generic algorithms to change
|
||||
their behavior to provide good performance when applied to either
|
||||
random or sequential access lists.</li>
|
||||
</ul>
|
||||
<p>Some implementations restrict what elements (or in the case of
|
||||
<tt>Maps</tt>, keys and values) can be stored. Possible
|
||||
<code>Maps</code>, keys and values) can be stored. Possible
|
||||
restrictions include requiring elements to:</p>
|
||||
<ul>
|
||||
<li>Be of a particular type.</li>
|
||||
@ -178,77 +193,70 @@ restrictions include requiring elements to:</p>
|
||||
</ul>
|
||||
<p>Attempting to add an element that violates an implementation's
|
||||
restrictions results in a runtime exception, typically a
|
||||
<tt>ClassCastException</tt>, an <tt>IllegalArgumentException</tt>,
|
||||
or a <tt>NullPointerException</tt>. Attempting to remove or test
|
||||
<code>ClassCastException</code>, an <code>IllegalArgumentException</code>,
|
||||
or a <code>NullPointerException</code>. Attempting to remove or test
|
||||
for the presence of an element that violates an implementation's
|
||||
restrictions can result in an exception. Some restricted
|
||||
collections permit this usage.</p>
|
||||
<hr />
|
||||
<hr>
|
||||
<h2>Collection Implementations</h2>
|
||||
<p>Classes that implement the collection interfaces typically have
|
||||
names in the form of
|
||||
<<em>Implementation-style</em>><<em>Interface</em>>.
|
||||
The general purpose implementations are summarized in the following
|
||||
table:</p>
|
||||
<table border="2" summary=
|
||||
"general purpose implementations and interfaces" align="center">
|
||||
<table id="impls">
|
||||
<caption>General purpose implementations</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th id="interfaces">Interface</th>
|
||||
<th id="hashtable">Hash Table</th>
|
||||
<th id="resizablearray">Resizable Array</th>
|
||||
<th id="balancedtree">Balanced Tree</th>
|
||||
<th id="linkedlist">Linked List</th>
|
||||
<th id="hashtableandlinkedlist">Hash Table + Linked List</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td headers="interfaces"><code>Set</code></td>
|
||||
<td headers="hashtable"><a href=
|
||||
"../HashSet.html"><tt>HashSet</tt></a></td>
|
||||
<td headers="resizablearray"> </td>
|
||||
<td headers="balancedtree"><a href=
|
||||
"../TreeSet.html"><tt>TreeSet</tt></a></td>
|
||||
<td headers="linkedlist"> </td>
|
||||
<td headers="hashtableandlinkedlist"><a href=
|
||||
"../LinkedHashSet.html"><tt>LinkedHashSet</tt></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td headers="interfaces"><code>List</code></td>
|
||||
<td headers="hashtable"> </td>
|
||||
<td headers="resizablearray"><a href=
|
||||
"../ArrayList.html"><tt>ArrayList</tt></a></td>
|
||||
<td headers="balancedtree"> </td>
|
||||
<td headers="linkedlist"><a href=
|
||||
"../LinkedList.html"><tt>LinkedList</tt></a></td>
|
||||
<td headers="hashtableandlinkedlist"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td headers="interfaces"><code>Deque</code></td>
|
||||
<td headers="hashtable"> </td>
|
||||
<td headers="resizablearray"><a href=
|
||||
"../ArrayDeque.html"><tt>ArrayDeque</tt></a></td>
|
||||
<td headers="balancedtree"> </td>
|
||||
<td headers="linkedlist"><a href=
|
||||
"../LinkedList.html"><tt>LinkedList</tt></a></td>
|
||||
<td headers="hashtableandlinkedlist"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td headers="interfaces"><code>Map</code></td>
|
||||
<td headers="hashtable"><a href=
|
||||
"../HashMap.html"><tt>HashMap</tt></a></td>
|
||||
<td headers="resizablearray"> </td>
|
||||
<td headers="balancedtree"><a href=
|
||||
"../TreeMap.html"><tt>TreeMap</tt></a></td>
|
||||
<td headers="linkedlist"> </td>
|
||||
<td headers="hashtableandlinkedlist"><a href=
|
||||
"../LinkedHashMap.html"><tt>LinkedHashMap</tt></a></td>
|
||||
<th scope="col">Interface</th>
|
||||
<th scope="col">Hash Table</th>
|
||||
<th scope="col">Resizable Array</th>
|
||||
<th scope="col">Balanced Tree</th>
|
||||
<th scope="col">Linked List</th>
|
||||
<th scope="col">Hash Table + Linked List</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row"><code>Set</code></th>
|
||||
<td><a href="../HashSet.html"><code>HashSet</code></a></td>
|
||||
<td> </td>
|
||||
<td><a href="../TreeSet.html"><code>TreeSet</code></a></td>
|
||||
<td> </td>
|
||||
<td><a href=
|
||||
"../LinkedHashSet.html"><code>LinkedHashSet</code></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><code>List</code></th>
|
||||
<td> </td>
|
||||
<td><a href="../ArrayList.html"><code>ArrayList</code></a></td>
|
||||
<td> </td>
|
||||
<td><a href="../LinkedList.html"><code>LinkedList</code></a></td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><code>Deque</code></th>
|
||||
<td> </td>
|
||||
<td><a href="../ArrayDeque.html"><code>ArrayDeque</code></a></td>
|
||||
<td> </td>
|
||||
<td><a href="../LinkedList.html"><code>LinkedList</code></a></td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><code>Map</code></th>
|
||||
<td><a href="../HashMap.html"><code>HashMap</code></a></td>
|
||||
<td> </td>
|
||||
<td><a href="../TreeMap.html"><code>TreeMap</code></a></td>
|
||||
<td> </td>
|
||||
<td><a href="../LinkedHashMap.html"><code>LinkedHashMap</code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The general-purpose implementations support all of the
|
||||
<i>optional operations</i> in the collection interfaces and have no
|
||||
restrictions on the elements they may contain. They are
|
||||
unsynchronized, but the <tt>Collections</tt> class contains static
|
||||
unsynchronized, but the <code>Collections</code> class contains static
|
||||
factories called <a href=
|
||||
"../Collections.html#synchronizedCollection-java.util.Collection-">
|
||||
<em>synchronization wrappers</em></a> that can be used to add
|
||||
@ -256,15 +264,15 @@ synchronization to many unsynchronized collections. All of the new
|
||||
implementations have <i>fail-fast iterators</i>, which detect
|
||||
invalid concurrent modification, and fail quickly and cleanly
|
||||
(rather than behaving erratically).</p>
|
||||
<p>The <tt>AbstractCollection</tt>, <tt>AbstractSet</tt>,
|
||||
<tt>AbstractList</tt>, <tt>AbstractSequentialList</tt> and
|
||||
<tt>AbstractMap</tt> classes provide basic implementations of the
|
||||
<p>The <code>AbstractCollection</code>, <code>AbstractSet</code>,
|
||||
<code>AbstractList</code>, <code>AbstractSequentialList</code> and
|
||||
<code>AbstractMap</code> classes provide basic implementations of the
|
||||
core collection interfaces, to minimize the effort required to
|
||||
implement them. The API documentation for these classes describes
|
||||
precisely how each method is implemented so the implementer knows
|
||||
which methods must be overridden, given the performance of the
|
||||
basic operations of a specific implementation.</p>
|
||||
<hr />
|
||||
<hr>
|
||||
<h2>Concurrent Collections</h2>
|
||||
<p>Applications that use collections from more than one thread must
|
||||
be carefully programmed. In general, this is known as <i>concurrent
|
||||
@ -279,47 +287,47 @@ discussed previously to provide features that are frequently needed
|
||||
in concurrent programming.</p>
|
||||
<p>These concurrent-aware interfaces are available:</p>
|
||||
<ul>
|
||||
<li><tt><a href=
|
||||
"../concurrent/BlockingQueue.html">BlockingQueue</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/TransferQueue.html">TransferQueue</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/BlockingDeque.html">BlockingDeque</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/ConcurrentMap.html">ConcurrentMap</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/ConcurrentNavigableMap.html">ConcurrentNavigableMap</a></tt></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/BlockingQueue.html">BlockingQueue</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/TransferQueue.html">TransferQueue</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/BlockingDeque.html">BlockingDeque</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/ConcurrentMap.html">ConcurrentMap</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/ConcurrentNavigableMap.html">ConcurrentNavigableMap</a></code></li>
|
||||
</ul>
|
||||
<p>The following concurrent-aware implementation classes are
|
||||
available. See the API documentation for the correct usage of these
|
||||
implementations.</p>
|
||||
<ul>
|
||||
<li><tt><a href=
|
||||
"../concurrent/LinkedBlockingQueue.html">LinkedBlockingQueue</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/ArrayBlockingQueue.html">ArrayBlockingQueue</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/PriorityBlockingQueue.html">PriorityBlockingQueue</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/DelayQueue.html">DelayQueue</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/SynchronousQueue.html">SynchronousQueue</a></tt></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/LinkedBlockingQueue.html">LinkedBlockingQueue</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/ArrayBlockingQueue.html">ArrayBlockingQueue</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/PriorityBlockingQueue.html">PriorityBlockingQueue</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/DelayQueue.html">DelayQueue</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/SynchronousQueue.html">SynchronousQueue</a></code></li>
|
||||
<li><a href=
|
||||
"../concurrent/LinkedBlockingDeque.html"><tt>LinkedBlockingDeque</tt></a></li>
|
||||
"../concurrent/LinkedBlockingDeque.html"><code>LinkedBlockingDeque</code></a></li>
|
||||
<li><a href=
|
||||
"../concurrent/LinkedTransferQueue.html"><tt>LinkedTransferQueue</tt></a></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/CopyOnWriteArrayList.html">CopyOnWriteArrayList</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/CopyOnWriteArraySet.html">CopyOnWriteArraySet</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/ConcurrentSkipListSet.html">ConcurrentSkipListSet</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/ConcurrentHashMap.html">ConcurrentHashMap</a></tt></li>
|
||||
<li><tt><a href=
|
||||
"../concurrent/ConcurrentSkipListMap.html">ConcurrentSkipListMap</a></tt></li>
|
||||
"../concurrent/LinkedTransferQueue.html"><code>LinkedTransferQueue</code></a></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/CopyOnWriteArrayList.html">CopyOnWriteArrayList</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/CopyOnWriteArraySet.html">CopyOnWriteArraySet</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/ConcurrentSkipListSet.html">ConcurrentSkipListSet</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/ConcurrentHashMap.html">ConcurrentHashMap</a></code></li>
|
||||
<li><code><a href=
|
||||
"../concurrent/ConcurrentSkipListMap.html">ConcurrentSkipListMap</a></code></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<hr>
|
||||
<h2>Design Goals</h2>
|
||||
<p>The main design goal was to produce an API that was small in
|
||||
size and, more importantly, in "conceptual weight." It
|
||||
@ -332,7 +340,7 @@ previously.</p>
|
||||
not attempt to capture such subtle distinctions as mutability,
|
||||
modifiability, and resizability. Instead, certain calls in the core
|
||||
interfaces are <i>optional</i>, enabling implementations to throw
|
||||
an <tt>UnsupportedOperationException</tt> to indicate that they do
|
||||
an <code>UnsupportedOperationException</code> to indicate that they do
|
||||
not support a specified optional operation. Collection implementers
|
||||
must clearly document which optional operations are supported by an
|
||||
implementation.</p>
|
||||
@ -346,13 +354,13 @@ implementation would want to override it.</li>
|
||||
</ul>
|
||||
<p>It was critical that all reasonable representations of
|
||||
collections interoperate well. This included arrays, which cannot
|
||||
be made to implement the <tt>Collection</tt> interface directly
|
||||
be made to implement the <code>Collection</code> interface directly
|
||||
without changing the language. Thus, the framework includes methods
|
||||
to enable collections to be moved into arrays, arrays to be viewed
|
||||
as collections, and maps to be viewed as collections.</p>
|
||||
<hr />
|
||||
<hr>
|
||||
<p style="font-size:smaller">
|
||||
Copyright © 1998, 2017, Oracle and/or its affiliates. 500 Oracle Parkway<br />
|
||||
Copyright © 1998, 2017, Oracle and/or its affiliates. 500 Oracle Parkway<br>
|
||||
Redwood Shores, CA 94065 USA. All rights reserved.</p>
|
||||
<!-- Body text ends here -->
|
||||
</body>
|
||||
|
@ -1,7 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
@ -27,10 +24,10 @@
|
||||
questions.
|
||||
-->
|
||||
|
||||
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang=
|
||||
"en-US">
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<title>Outline of the Collections Framework</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Outline of the Collections Framework</h1>
|
||||
@ -48,21 +45,21 @@ elements.</li>
|
||||
<li><a href=
|
||||
"../Set.html"><strong>Set</strong></a> - The
|
||||
familiar set abstraction. No duplicate elements permitted. May or
|
||||
may not be ordered. Extends the <tt>Collection</tt> interface.</li>
|
||||
may not be ordered. Extends the <code>Collection</code> interface.</li>
|
||||
<li><a href=
|
||||
"../List.html"><strong>List</strong></a> -
|
||||
Ordered collection, also known as a <i>sequence</i>. Duplicates are
|
||||
generally permitted. Allows positional access. Extends the
|
||||
<tt>Collection</tt> interface.</li>
|
||||
<code>Collection</code> interface.</li>
|
||||
<li><a href=
|
||||
"../Queue.html"><strong>Queue</strong></a> - A
|
||||
collection designed for holding elements before processing. Besides
|
||||
basic <tt>Collection</tt> operations, queues provide additional
|
||||
basic <code>Collection</code> operations, queues provide additional
|
||||
insertion, extraction, and inspection operations.</li>
|
||||
<li><a href=
|
||||
"../Deque.html"><strong>Deque</strong></a> - A
|
||||
<em>double ended queue</em>, supporting element insertion and
|
||||
removal at both ends. Extends the <tt>Queue</tt> interface.</li>
|
||||
removal at both ends. Extends the <code>Queue</code> interface.</li>
|
||||
<li><a href=
|
||||
"../Map.html"><strong>Map</strong></a> - A
|
||||
mapping from keys to values. Each key can map to one value.</li>
|
||||
@ -70,62 +67,62 @@ mapping from keys to values. Each key can map to one value.</li>
|
||||
"../SortedSet.html"><strong>SortedSet</strong></a>
|
||||
- A set whose elements are automatically sorted, either in their
|
||||
<i>natural ordering</i> (see the <a href=
|
||||
"../../lang/Comparable.html"><tt>Comparable</tt></a>
|
||||
"../../lang/Comparable.html"><code>Comparable</code></a>
|
||||
interface) or by a <a href=
|
||||
"../Comparator.html"><tt>Comparator</tt></a>
|
||||
object provided when a <tt>SortedSet</tt> instance is created.
|
||||
Extends the <tt>Set</tt> interface.</li>
|
||||
"../Comparator.html"><code>Comparator</code></a>
|
||||
object provided when a <code>SortedSet</code> instance is created.
|
||||
Extends the <code>Set</code> interface.</li>
|
||||
<li><a href=
|
||||
"../SortedMap.html"><strong>SortedMap</strong></a>
|
||||
- A map whose mappings are automatically sorted by key, either
|
||||
using the <i>natural ordering</i> of the keys or by a comparator
|
||||
provided when a <tt>SortedMap</tt> instance is created. Extends the
|
||||
<tt>Map</tt> interface.</li>
|
||||
provided when a <code>SortedMap</code> instance is created. Extends the
|
||||
<code>Map</code> interface.</li>
|
||||
<li><a href=
|
||||
"../NavigableSet.html"><strong>NavigableSet</strong></a>
|
||||
- A <tt>SortedSet</tt> extended with navigation methods reporting
|
||||
closest matches for given search targets. A <tt>NavigableSet</tt>
|
||||
- A <code>SortedSet</code> extended with navigation methods reporting
|
||||
closest matches for given search targets. A <code>NavigableSet</code>
|
||||
may be accessed and traversed in either ascending or descending
|
||||
order.</li>
|
||||
<li><a href=
|
||||
"../NavigableMap.html"><strong>NavigableMap</strong></a>
|
||||
- A <tt>SortedMap</tt> extended with navigation methods returning
|
||||
- A <code>SortedMap</code> extended with navigation methods returning
|
||||
the closest matches for given search targets. A
|
||||
<tt>NavigableMap</tt> can be accessed and traversed in either
|
||||
<code>NavigableMap</code> can be accessed and traversed in either
|
||||
ascending or descending key order.</li>
|
||||
<li><a href=
|
||||
"../concurrent/BlockingQueue.html"><strong>BlockingQueue</strong></a>
|
||||
- A <tt>Queue</tt> with operations that wait for the queue to
|
||||
- A <code>Queue</code> with operations that wait for the queue to
|
||||
become nonempty when retrieving an element and that wait for space
|
||||
to become available in the queue when storing an element. (This
|
||||
interface is part of the <tt><a href=
|
||||
"../concurrent/package-summary.html">java.util.concurrent</a></tt>
|
||||
interface is part of the <code><a href=
|
||||
"../concurrent/package-summary.html">java.util.concurrent</a></code>
|
||||
package.)</li>
|
||||
<li><a href=
|
||||
"../concurrent/TransferQueue.html"><strong>TransferQueue</strong></a>
|
||||
- A <tt>BlockingQueue</tt> in which producers can wait for
|
||||
- A <code>BlockingQueue</code> in which producers can wait for
|
||||
consumers to receive elements. (This interface is part of the
|
||||
<tt><a href=
|
||||
"../concurrent/package-summary.html">java.util.concurrent</a></tt>
|
||||
<code><a href=
|
||||
"../concurrent/package-summary.html">java.util.concurrent</a></code>
|
||||
package.)</li>
|
||||
<li><a href=
|
||||
"../concurrent/BlockingDeque.html"><strong>BlockingDeque</strong></a>
|
||||
- A <tt>Deque</tt> with operations that wait for the deque to
|
||||
- A <code>Deque</code> with operations that wait for the deque to
|
||||
become nonempty when retrieving an element and wait for space to
|
||||
become available in the deque when storing an element. Extends both
|
||||
the <tt>Deque</tt> and <tt>BlockingQueue</tt> interfaces. (This
|
||||
interface is part of the <tt><a href=
|
||||
"../concurrent/package-summary.html">java.util.concurrent</a></tt>
|
||||
the <code>Deque</code> and <code>BlockingQueue</code> interfaces. (This
|
||||
interface is part of the <code><a href=
|
||||
"../concurrent/package-summary.html">java.util.concurrent</a></code>
|
||||
package.)</li>
|
||||
<li><a href=
|
||||
"../concurrent/ConcurrentMap.html"><strong>ConcurrentMap</strong></a>
|
||||
- A <tt>Map</tt> with atomic <tt>putIfAbsent</tt>, <tt>remove</tt>,
|
||||
and <tt>replace</tt> methods. (This interface is part of the
|
||||
<tt>java.util.concurrent</tt> package.)</li>
|
||||
- A <code>Map</code> with atomic <code>putIfAbsent</code>, <code>remove</code>,
|
||||
and <code>replace</code> methods. (This interface is part of the
|
||||
<code>java.util.concurrent</code> package.)</li>
|
||||
<li><a href=
|
||||
"../concurrent/ConcurrentNavigableMap.html"><strong>
|
||||
ConcurrentNavigableMap</strong></a> - A <tt>ConcurrentMap</tt> that
|
||||
is also a <tt>NavigableMap</tt>.</li>
|
||||
ConcurrentNavigableMap</strong></a> - A <code>ConcurrentMap</code> that
|
||||
is also a <code>NavigableMap</code>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>General-purpose implementations</strong> - The primary
|
||||
@ -133,52 +130,52 @@ implementations of the collection interfaces.
|
||||
<ul>
|
||||
<li><strong><a href=
|
||||
"../HashSet.html">HashSet</a></strong> - Hash
|
||||
table implementation of the <tt>Set</tt> interface. The best
|
||||
all-around implementation of the <tt>Set</tt> interface.</li>
|
||||
table implementation of the <code>Set</code> interface. The best
|
||||
all-around implementation of the <code>Set</code> interface.</li>
|
||||
<li><a href=
|
||||
"../TreeSet.html"><strong>TreeSet</strong></a>
|
||||
- Red-black tree implementation of the <tt>NavigableSet</tt>
|
||||
- Red-black tree implementation of the <code>NavigableSet</code>
|
||||
interface.</li>
|
||||
<li><strong><a href=
|
||||
"../LinkedHashSet.html">LinkedHashSet</a></strong>
|
||||
- Hash table and linked list implementation of the <tt>Set</tt>
|
||||
interface. An insertion-ordered <tt>Set</tt> implementation that
|
||||
runs nearly as fast as <tt>HashSet</tt>.</li>
|
||||
- Hash table and linked list implementation of the <code>Set</code>
|
||||
interface. An insertion-ordered <code>Set</code> implementation that
|
||||
runs nearly as fast as <code>HashSet</code>.</li>
|
||||
<li><strong><a href=
|
||||
"../ArrayList.html">ArrayList</a></strong> -
|
||||
Resizable array implementation of the <tt>List</tt> interface (an
|
||||
unsynchronized <tt>Vector</tt>). The best all-around implementation
|
||||
of the <tt>List</tt> interface.</li>
|
||||
Resizable array implementation of the <code>List</code> interface (an
|
||||
unsynchronized <code>Vector</code>). The best all-around implementation
|
||||
of the <code>List</code> interface.</li>
|
||||
<li><strong><a href=
|
||||
"../ArrayDeque.html">ArrayDeque</a></strong> -
|
||||
Efficient, resizable array implementation of the <tt>Deque</tt>
|
||||
Efficient, resizable array implementation of the <code>Deque</code>
|
||||
interface.</li>
|
||||
<li><a href=
|
||||
"../LinkedList.html"><strong>LinkedList</strong></a>
|
||||
- Doubly-linked list implementation of the <tt>List</tt> interface.
|
||||
Provides better performance than the <tt>ArrayList</tt>
|
||||
- Doubly-linked list implementation of the <code>List</code> interface.
|
||||
Provides better performance than the <code>ArrayList</code>
|
||||
implementation if elements are frequently inserted or deleted
|
||||
within the list. Also implements the <tt>Deque</tt> interface. When
|
||||
accessed through the <tt>Queue</tt> interface, <tt>LinkedList</tt>
|
||||
within the list. Also implements the <code>Deque</code> interface. When
|
||||
accessed through the <code>Queue</code> interface, <code>LinkedList</code>
|
||||
acts as a FIFO queue.</li>
|
||||
<li><strong><a href=
|
||||
"../PriorityQueue.html">PriorityQueue</a></strong>
|
||||
- Heap implementation of an unbounded priority queue.</li>
|
||||
<li><strong><a href=
|
||||
"../HashMap.html">HashMap</a></strong> - Hash
|
||||
table implementation of the <tt>Map</tt> interface (an
|
||||
unsynchronized <tt>Hashtable</tt> that supports <tt>null</tt> keys
|
||||
and values). The best all-around implementation of the <tt>Map</tt>
|
||||
table implementation of the <code>Map</code> interface (an
|
||||
unsynchronized <code>Hashtable</code> that supports <code>null</code> keys
|
||||
and values). The best all-around implementation of the <code>Map</code>
|
||||
interface.</li>
|
||||
<li><a href=
|
||||
"../TreeMap.html"><strong>TreeMap</strong></a>
|
||||
Red-black tree implementation of the <tt>NavigableMap</tt>
|
||||
Red-black tree implementation of the <code>NavigableMap</code>
|
||||
interface.</li>
|
||||
<li><strong><a href=
|
||||
"../LinkedHashMap.html">LinkedHashMap</a></strong>
|
||||
- Hash table and linked list implementation of the <tt>Map</tt>
|
||||
interface. An insertion-ordered <tt>Map</tt> implementation that
|
||||
runs nearly as fast as <tt>HashMap</tt>. Also useful for building
|
||||
- Hash table and linked list implementation of the <code>Map</code>
|
||||
interface. An insertion-ordered <code>Map</code> implementation that
|
||||
runs nearly as fast as <code>HashMap</code>. Also useful for building
|
||||
caches (see <a href=
|
||||
"../LinkedHashMap.html#removeEldestEntry-java.util.Map.Entry-">
|
||||
removeEldestEntry(Map.Entry)</a> ).</li>
|
||||
@ -192,9 +189,9 @@ implementations. Accessed solely through static factory methods.
|
||||
"../Collections.html#unmodifiableCollection-java.util.Collection-">
|
||||
<strong>Collections.unmodifiable<i>Interface</i></strong></a> -
|
||||
Returns an unmodifiable view of a specified collection that throws
|
||||
an <tt>UnsupportedOperationException</tt> if the user attempts to
|
||||
an <code>UnsupportedOperationException</code> if the user attempts to
|
||||
modify it.</li>
|
||||
<li><a name="synchWrappers" href=
|
||||
<li><a href=
|
||||
"../Collections.html#synchronizedCollection-java.util.Collection-"
|
||||
id=
|
||||
"synchWrappers"><strong>Collections.synchronized<i>Interface</i></strong></a>
|
||||
@ -206,7 +203,7 @@ safety is guaranteed.</li>
|
||||
"../Collections.html#checkedCollection-java.util.Collection-java.lang.Class-">
|
||||
<strong>Collections.checked<i>Interface</i></strong></a> - Returns
|
||||
a dynamically type-safe view of the specified collection, which
|
||||
throws a <tt>ClassCastException</tt> if a client attempts to add an
|
||||
throws a <code>ClassCastException</code> if a client attempts to add an
|
||||
element of the wrong type. The generics mechanism in the language
|
||||
provides compile-time (static) type checking, but it is possible to
|
||||
bypass this mechanism. Dynamically type-safe views eliminate this
|
||||
@ -219,12 +216,12 @@ adapt one collections interface to another:
|
||||
<li><strong><a href=
|
||||
"../Collections.html#newSetFromMap-java.util.Map-">
|
||||
newSetFromMap(Map)</a></strong> - Creates a general-purpose
|
||||
<tt>Set</tt> implementation from a general-purpose <tt>Map</tt>
|
||||
<code>Set</code> implementation from a general-purpose <code>Map</code>
|
||||
implementation.</li>
|
||||
<li><strong><a href=
|
||||
"../Collections.html#asLifoQueue-java.util.Deque-">
|
||||
asLifoQueue(Deque)</a></strong> - Returns a view of a
|
||||
<tt>Deque</tt> as a Last In First Out (LIFO) <tt>Queue</tt>.</li>
|
||||
<code>Deque</code> as a Last In First Out (LIFO) <code>Queue</code>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Convenience implementations</strong> - High-performance
|
||||
@ -259,12 +256,12 @@ classes were retrofitted to implement the collection interfaces.
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../Vector.html"><strong>Vector</strong></a> -
|
||||
Synchronized resizable array implementation of the <tt>List</tt>
|
||||
Synchronized resizable array implementation of the <code>List</code>
|
||||
interface with additional legacy methods.</li>
|
||||
<li><a href=
|
||||
"../Hashtable.html"><strong>Hashtable</strong></a>
|
||||
- Synchronized hash table implementation of the <tt>Map</tt>
|
||||
interface that does not allow <tt>null</tt> keys or values, plus
|
||||
- Synchronized hash table implementation of the <code>Map</code>
|
||||
interface that does not allow <code>null</code> keys or values, plus
|
||||
additional legacy methods.</li>
|
||||
</ul>
|
||||
</li>
|
||||
@ -272,18 +269,18 @@ additional legacy methods.</li>
|
||||
<ul>
|
||||
<li><strong><a href=
|
||||
"../WeakHashMap.html">WeakHashMap</a></strong>
|
||||
- An implementation of the <tt>Map</tt> interface that stores only
|
||||
- An implementation of the <code>Map</code> interface that stores only
|
||||
<a href="../../lang/ref/WeakReference.html"><i>weak
|
||||
references</i></a> to its keys. Storing only weak references
|
||||
enables key-value pairs to be garbage collected when the key is no
|
||||
longer referenced outside of the <tt>WeakHashMap</tt>. This class
|
||||
longer referenced outside of the <code>WeakHashMap</code>. This class
|
||||
is the easiest way to use the power of weak references. It is
|
||||
useful for implementing registry-like data structures, where the
|
||||
utility of an entry vanishes when its key is no longer reachable by
|
||||
any thread.</li>
|
||||
<li><strong><a href=
|
||||
"../IdentityHashMap.html">IdentityHashMap</a></strong>
|
||||
- Identity-based <tt>Map</tt> implementation based on a hash table.
|
||||
- Identity-based <code>Map</code> implementation based on a hash table.
|
||||
This class is useful for topology-preserving object graph
|
||||
transformations (such as serialization or deep copying). To perform
|
||||
these transformations, you must maintain an identity-based "node
|
||||
@ -292,43 +289,43 @@ Identity-based maps are also used to maintain
|
||||
object-to-meta-information mappings in dynamic debuggers and
|
||||
similar systems. Finally, identity-based maps are useful in
|
||||
preventing "spoof attacks" resulting from intentionally perverse
|
||||
equals methods. (<tt>IdentityHashMap</tt> never invokes the equals
|
||||
equals methods. (<code>IdentityHashMap</code> never invokes the equals
|
||||
method on its keys.) An added benefit of this implementation is
|
||||
that it is fast.</li>
|
||||
<li><strong><a href=
|
||||
"../concurrent/CopyOnWriteArrayList.html">CopyOnWriteArrayList</a></strong>
|
||||
- A <tt>List</tt> implementation backed by an copy-on-write array.
|
||||
All mutative operations (such as <tt>add</tt>, <tt>set</tt>, and
|
||||
<tt>remove</tt>) are implemented by making a new copy of the array.
|
||||
- A <code>List</code> implementation backed by an copy-on-write array.
|
||||
All mutative operations (such as <code>add</code>, <code>set</code>, and
|
||||
<code>remove</code>) are implemented by making a new copy of the array.
|
||||
No synchronization is necessary, even during iteration, and
|
||||
iterators are guaranteed never to throw
|
||||
<tt>ConcurrentModificationException</tt>. This implementation is
|
||||
<code>ConcurrentModificationException</code>. This implementation is
|
||||
well-suited to maintaining event-handler lists (where change is
|
||||
infrequent, and traversal is frequent and potentially
|
||||
time-consuming).</li>
|
||||
<li><strong><a href=
|
||||
"../concurrent/CopyOnWriteArraySet.html">CopyOnWriteArraySet</a></strong>
|
||||
- A <tt>Set</tt> implementation backed by a copy-on-write array.
|
||||
This implementation is similar to <tt>CopyOnWriteArrayList</tt>.
|
||||
Unlike most <tt>Set</tt> implementations, the <tt>add</tt>,
|
||||
<tt>remove</tt>, and <tt>contains</tt> methods require time
|
||||
- A <code>Set</code> implementation backed by a copy-on-write array.
|
||||
This implementation is similar to <code>CopyOnWriteArrayList</code>.
|
||||
Unlike most <code>Set</code> implementations, the <code>add</code>,
|
||||
<code>remove</code>, and <code>contains</code> methods require time
|
||||
proportional to the size of the set. This implementation is well
|
||||
suited to maintaining event-handler lists that must prevent
|
||||
duplicates.</li>
|
||||
<li><strong><a href=
|
||||
"../EnumSet.html">EnumSet</a></strong> - A
|
||||
high-performance <tt>Set</tt> implementation backed by a bit
|
||||
vector. All elements of each <tt>EnumSet</tt> instance must be
|
||||
high-performance <code>Set</code> implementation backed by a bit
|
||||
vector. All elements of each <code>EnumSet</code> instance must be
|
||||
elements of a single enum type.</li>
|
||||
<li><strong><a href=
|
||||
"../EnumMap.html">EnumMap</a></strong> - A
|
||||
high-performance <tt>Map</tt> implementation backed by an array.
|
||||
All keys in each <tt>EnumMap</tt> instance must be elements of a
|
||||
high-performance <code>Map</code> implementation backed by an array.
|
||||
All keys in each <code>EnumMap</code> instance must be elements of a
|
||||
single enum type.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Concurrent implementations</strong> - These
|
||||
implementations are part of <tt>java.util.concurrent</tt>.
|
||||
implementations are part of <code>java.util.concurrent</code>.
|
||||
<ul>
|
||||
<li><strong><a href=
|
||||
"../concurrent/ConcurrentLinkedQueue.html">ConcurrentLinkedQueue</a></strong>
|
||||
@ -352,7 +349,7 @@ queue backed by a priority heap.</li>
|
||||
<li><a href=
|
||||
"../concurrent/SynchronousQueue.html"><strong>SynchronousQueue</strong></a>
|
||||
- A simple rendezvous mechanism that uses the
|
||||
<tt>BlockingQueue</tt> interface.</li>
|
||||
<code>BlockingQueue</code> interface.</li>
|
||||
<li><a href=
|
||||
"../concurrent/LinkedBlockingDeque.html"><strong>
|
||||
LinkedBlockingDeque</strong></a> - An optionally bounded FIFO
|
||||
@ -360,25 +357,25 @@ blocking deque backed by linked nodes.</li>
|
||||
<li><a href=
|
||||
"../concurrent/LinkedTransferQueue.html"><strong>
|
||||
LinkedTransferQueue</strong></a> - An unbounded
|
||||
<tt>TransferQueue</tt> backed by linked nodes.</li>
|
||||
<code>TransferQueue</code> backed by linked nodes.</li>
|
||||
<li><a href=
|
||||
"../concurrent/ConcurrentHashMap.html"><strong>ConcurrentHashMap</strong></a>
|
||||
- A highly concurrent, high-performance <tt>ConcurrentMap</tt>
|
||||
- A highly concurrent, high-performance <code>ConcurrentMap</code>
|
||||
implementation based on a hash table. This implementation never
|
||||
blocks when performing retrievals and enables the client to select
|
||||
the concurrency level for updates. It is intended as a drop-in
|
||||
replacement for <tt><a href=
|
||||
"../Hashtable.html">Hashtable</a></tt>. In
|
||||
addition to implementing <tt>ConcurrentMap</tt>, it supports all of
|
||||
the legacy methods of <tt>Hashtable</tt>.</li>
|
||||
replacement for <code><a href=
|
||||
"../Hashtable.html">Hashtable</a></code>. In
|
||||
addition to implementing <code>ConcurrentMap</code>, it supports all of
|
||||
the legacy methods of <code>Hashtable</code>.</li>
|
||||
<li><a href=
|
||||
"../concurrent/ConcurrentSkipListSet.html"><strong>
|
||||
ConcurrentSkipListSet</strong></a> - Skips list implementation of
|
||||
the <tt>NavigableSet</tt> interface.</li>
|
||||
the <code>NavigableSet</code> interface.</li>
|
||||
<li><a href=
|
||||
"../concurrent/ConcurrentSkipListMap.html"><strong>
|
||||
ConcurrentSkipListMap</strong></a> - Skips list implementation of
|
||||
the <tt>ConcurrentNavigableMap</tt> interface.</li>
|
||||
the <code>ConcurrentNavigableMap</code> interface.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Abstract implementations</strong> - Skeletal
|
||||
@ -387,25 +384,25 @@ implementations.
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../AbstractCollection.html"><strong>AbstractCollection</strong></a>
|
||||
- Skeletal <tt>Collection</tt> implementation that is neither a set
|
||||
- Skeletal <code>Collection</code> implementation that is neither a set
|
||||
nor a list (such as a "bag" or multiset).</li>
|
||||
<li><a href=
|
||||
"../AbstractSet.html"><strong>AbstractSet</strong></a>
|
||||
- Skeletal <tt>Set</tt> implementation.</li>
|
||||
- Skeletal <code>Set</code> implementation.</li>
|
||||
<li><a href=
|
||||
"../AbstractList.html"><strong>AbstractList</strong></a>
|
||||
- Skeletal <tt>List</tt> implementation backed by a random access
|
||||
- Skeletal <code>List</code> implementation backed by a random access
|
||||
data store (such as an array).</li>
|
||||
<li><a href=
|
||||
"../AbstractSequentialList.html"><strong>AbstractSequentialList</strong></a>
|
||||
- Skeletal <tt>List</tt> implementation backed by a sequential
|
||||
- Skeletal <code>List</code> implementation backed by a sequential
|
||||
access data store (such as a linked list).</li>
|
||||
<li><a href=
|
||||
"../AbstractQueue.html"><strong>AbstractQueue</strong></a>
|
||||
- Skeletal <tt>Queue</tt> implementation.</li>
|
||||
- Skeletal <code>Queue</code> implementation.</li>
|
||||
<li><a href=
|
||||
"../AbstractMap.html"><strong>AbstractMap</strong></a>
|
||||
- Skeletal <tt>Map</tt> implementation.</li>
|
||||
- Skeletal <code>Map</code> implementation.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Algorithms</strong> - The <a href=
|
||||
@ -491,13 +488,13 @@ interface, but more powerful, and with improved method names.
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../Iterator.html"><strong>Iterator</strong></a>
|
||||
- In addition to the functionality of the <tt>Enumeration</tt>
|
||||
- In addition to the functionality of the <code>Enumeration</code>
|
||||
interface, enables the user to remove elements from the backing
|
||||
collection with well-defined, useful semantics.</li>
|
||||
<li><a href=
|
||||
"../ListIterator.html"><strong>ListIterator</strong></a>
|
||||
- Iterator for use with lists. In addition to the functionality of
|
||||
the <tt>Iterator</tt> interface, supports bidirectional iteration,
|
||||
the <code>Iterator</code> interface, supports bidirectional iteration,
|
||||
element replacement, element insertion, and index retrieval.</li>
|
||||
</ul>
|
||||
</li>
|
||||
@ -514,7 +511,7 @@ this interface.</li>
|
||||
- Represents an order relation, which can be used to sort a list or
|
||||
maintain order in a sorted set or map. Can override a type's
|
||||
natural ordering or order objects of a type that does not implement
|
||||
the <tt>Comparable</tt> interface.</li>
|
||||
the <code>Comparable</code> interface.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Runtime exceptions</strong>
|
||||
@ -536,7 +533,7 @@ unexpectedly.</li>
|
||||
<ul>
|
||||
<li><strong><a href=
|
||||
"../RandomAccess.html">RandomAccess</a></strong>
|
||||
- Marker interface that lets <tt>List</tt> implementations indicate
|
||||
- Marker interface that lets <code>List</code> implementations indicate
|
||||
that they support fast (generally constant time) random access.
|
||||
This lets generic algorithms change their behavior to provide good
|
||||
performance when applied to either random or sequential access
|
||||
@ -550,14 +547,14 @@ lists.</li>
|
||||
<li><a href=
|
||||
"../Arrays.html"><strong>Arrays</strong></a> -
|
||||
Contains static methods to sort, search, compare, hash, copy,
|
||||
resize, convert to <tt>String</tt>, and fill arrays of primitives
|
||||
resize, convert to <code>String</code>, and fill arrays of primitives
|
||||
and objects.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<hr />
|
||||
<hr>
|
||||
<p style="font-size:smaller">
|
||||
Copyright © 1998, 2017, Oracle and/or its affiliates. 500 Oracle Parkway<br />
|
||||
Copyright © 1998, 2017, Oracle and/or its affiliates. 500 Oracle Parkway<br>
|
||||
Redwood Shores, CA 94065 USA. All rights reserved.</p>
|
||||
<!-- Body text ends here -->
|
||||
</body>
|
||||
|
@ -25,21 +25,36 @@
|
||||
|
||||
package java.util.jar;
|
||||
|
||||
import java.io.*;
|
||||
import java.lang.ref.SoftReference;
|
||||
import java.net.URL;
|
||||
import java.util.*;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.stream.StreamSupport;
|
||||
import java.util.zip.*;
|
||||
import java.security.CodeSigner;
|
||||
import java.security.cert.Certificate;
|
||||
import java.security.CodeSource;
|
||||
import jdk.internal.misc.SharedSecrets;
|
||||
import sun.security.action.GetPropertyAction;
|
||||
import sun.security.util.ManifestEntryVerifier;
|
||||
import sun.security.util.SignatureFileVerifier;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.EOFException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.lang.ref.SoftReference;
|
||||
import java.net.URL;
|
||||
import java.security.CodeSigner;
|
||||
import java.security.CodeSource;
|
||||
import java.security.cert.Certificate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Objects;
|
||||
import java.util.Spliterator;
|
||||
import java.util.Spliterators;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.stream.StreamSupport;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipException;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
/**
|
||||
* The {@code JarFile} class is used to read the contents of a jar file
|
||||
* from any file that can be opened with {@code java.io.RandomAccessFile}.
|
||||
@ -848,7 +863,7 @@ class JarFile extends ZipFile {
|
||||
private static final byte[] MULTIRELEASE_OPTOSFT;
|
||||
|
||||
static {
|
||||
CLASSPATH_LASTOCC = new byte[64];
|
||||
CLASSPATH_LASTOCC = new byte[65];
|
||||
CLASSPATH_OPTOSFT = new byte[12];
|
||||
CLASSPATH_LASTOCC[(int)'C' - 32] = 1;
|
||||
CLASSPATH_LASTOCC[(int)'L' - 32] = 2;
|
||||
@ -865,7 +880,7 @@ class JarFile extends ZipFile {
|
||||
}
|
||||
CLASSPATH_OPTOSFT[11] = 1;
|
||||
|
||||
MULTIRELEASE_LASTOCC = new byte[64];
|
||||
MULTIRELEASE_LASTOCC = new byte[65];
|
||||
MULTIRELEASE_OPTOSFT = new byte[19];
|
||||
MULTIRELEASE_LASTOCC[(int)'M' - 32] = 1;
|
||||
MULTIRELEASE_LASTOCC[(int)'I' - 32] = 5;
|
||||
|
@ -81,309 +81,296 @@ import java.util.stream.StreamSupport;
|
||||
*
|
||||
* <table class="borderless">
|
||||
* <caption style="display:none">Regular expression constructs, and what they match</caption>
|
||||
* <thead>
|
||||
* <tr style="text-align:left">
|
||||
* <th style="text-align:left" id="construct">Construct</th>
|
||||
* <th style="text-align:left" id="matches">Matches</th>
|
||||
* <thead style="text-align:left">
|
||||
* <tr>
|
||||
* <th id="construct">Construct</th>
|
||||
* <th id="matches">Matches</th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tbody style="text-align:left">
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="characters">Characters</th></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="characters">Characters</th></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:top" headers="construct characters"><i>x</i></td>
|
||||
* <td headers="matches">The character <i>x</i></td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \\}</td>
|
||||
* <td headers="matches">The backslash character</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \0}<i>n</i></td>
|
||||
* <td headers="matches">The character with octal value {@code 0}<i>n</i>
|
||||
* <tr><th style="vertical-align:top; font-weight: normal" id="x"><i>x</i></th>
|
||||
* <td headers="matches characters x">The character <i>x</i></td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight: normal" id="backslash">{@code \\}</th>
|
||||
* <td headers="matches characters backslash">The backslash character</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight: normal" id="octal_n">{@code \0}<i>n</i></th>
|
||||
* <td headers="matches characters octal_n">The character with octal value {@code 0}<i>n</i>
|
||||
* (0 {@code <=} <i>n</i> {@code <=} 7)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \0}<i>nn</i></td>
|
||||
* <td headers="matches">The character with octal value {@code 0}<i>nn</i>
|
||||
* <tr><th style="vertical-align:top; font-weight: normal" id="octal_nn">{@code \0}<i>nn</i></th>
|
||||
* <td headers="matches characters octal_nn">The character with octal value {@code 0}<i>nn</i>
|
||||
* (0 {@code <=} <i>n</i> {@code <=} 7)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \0}<i>mnn</i></td>
|
||||
* <td headers="matches">The character with octal value {@code 0}<i>mnn</i>
|
||||
* <tr><th style="vertical-align:top; font-weight: normal" id="octal_nnn">{@code \0}<i>mnn</i></th>
|
||||
* <td headers="matches characters octal_nnn">The character with octal value {@code 0}<i>mnn</i>
|
||||
* (0 {@code <=} <i>m</i> {@code <=} 3,
|
||||
* 0 {@code <=} <i>n</i> {@code <=} 7)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \x}<i>hh</i></td>
|
||||
* <td headers="matches">The character with hexadecimal value {@code 0x}<i>hh</i></td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters"><code>\u</code><i>hhhh</i></td>
|
||||
* <td headers="matches">The character with hexadecimal value {@code 0x}<i>hhhh</i></td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters"><code>\x</code><i>{h...h}</i></td>
|
||||
* <td headers="matches">The character with hexadecimal value {@code 0x}<i>h...h</i>
|
||||
* <tr><th style="vertical-align:top; font-weight: normal" id="hex_hh">{@code \x}<i>hh</i></th>
|
||||
* <td headers="matches characters hex_hh">The character with hexadecimal value {@code 0x}<i>hh</i></td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight: normal" id="hex_hhhh"><code>\u</code><i>hhhh</i></th>
|
||||
* <td headers="matches characters hex_hhhh">The character with hexadecimal value {@code 0x}<i>hhhh</i></td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight: normal" id="hex_h_h"><code>\x</code><i>{h...h}</i></th>
|
||||
* <td headers="matches characters hex_h_h">The character with hexadecimal value {@code 0x}<i>h...h</i>
|
||||
* ({@link java.lang.Character#MIN_CODE_POINT Character.MIN_CODE_POINT}
|
||||
* <= {@code 0x}<i>h...h</i> <=
|
||||
* {@link java.lang.Character#MAX_CODE_POINT Character.MAX_CODE_POINT})</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters"><code>\N{</code><i>name</i><code>}</code></td>
|
||||
* <td headers="matches">The character with Unicode character name <i>'name'</i></td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="matches">{@code \t}</td>
|
||||
* <td headers="matches">The tab character (<code>'\u0009'</code>)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \n}</td>
|
||||
* <td headers="matches">The newline (line feed) character (<code>'\u000A'</code>)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \r}</td>
|
||||
* <td headers="matches">The carriage-return character (<code>'\u000D'</code>)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \f}</td>
|
||||
* <td headers="matches">The form-feed character (<code>'\u000C'</code>)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \a}</td>
|
||||
* <td headers="matches">The alert (bell) character (<code>'\u0007'</code>)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \e}</td>
|
||||
* <td headers="matches">The escape character (<code>'\u001B'</code>)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct characters">{@code \c}<i>x</i></td>
|
||||
* <td headers="matches">The control character corresponding to <i>x</i></td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight: normal" id="unicode_name"><code>\N{</code><i>name</i><code>}</code></th>
|
||||
* <td headers="matches characters unicode_name">The character with Unicode character name <i>'name'</i></td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="tab">{@code \t}</th>
|
||||
* <td headers="matches characters tab">The tab character (<code>'\u0009'</code>)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="newline">{@code \n}</th>
|
||||
* <td headers="matches characters newline">The newline (line feed) character (<code>'\u000A'</code>)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="return">{@code \r}</th>
|
||||
* <td headers="matches characters return">The carriage-return character (<code>'\u000D'</code>)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="form_feed">{@code \f}</th>
|
||||
* <td headers="matches characters form_feed">The form-feed character (<code>'\u000C'</code>)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="bell">{@code \a}</th>
|
||||
* <td headers="matches characters bell">The alert (bell) character (<code>'\u0007'</code>)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="escape">{@code \e}</th>
|
||||
* <td headers="matches characters escape">The escape character (<code>'\u001B'</code>)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="ctrl_x">{@code \c}<i>x</i></th>
|
||||
* <td headers="matches characters ctrl_x">The control character corresponding to <i>x</i></td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="classes">Character classes</th></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="classes">Character classes</th></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [abc]}</td>
|
||||
* <td headers="matches">{@code a}, {@code b}, or {@code c} (simple class)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [^abc]}</td>
|
||||
* <td headers="matches">Any character except {@code a}, {@code b}, or {@code c} (negation)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [a-zA-Z]}</td>
|
||||
* <td headers="matches">{@code a} through {@code z}
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="simple">{@code [abc]}</th>
|
||||
* <td headers="matches classes simple">{@code a}, {@code b}, or {@code c} (simple class)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="negation">{@code [^abc]}</th>
|
||||
* <td headers="matches classes negation">Any character except {@code a}, {@code b}, or {@code c} (negation)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="range">{@code [a-zA-Z]}</th>
|
||||
* <td headers="matches classes range">{@code a} through {@code z}
|
||||
* or {@code A} through {@code Z}, inclusive (range)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [a-d[m-p]]}</td>
|
||||
* <td headers="matches">{@code a} through {@code d},
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="union">{@code [a-d[m-p]]}</th>
|
||||
* <td headers="matches classes union">{@code a} through {@code d},
|
||||
* or {@code m} through {@code p}: {@code [a-dm-p]} (union)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [a-z&&[def]]}</td>
|
||||
* <td headers="matches">{@code d}, {@code e}, or {@code f} (intersection)</tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [a-z&&[^bc]]}</td>
|
||||
* <td headers="matches">{@code a} through {@code z},
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="intersection">{@code [a-z&&[def]]}</th>
|
||||
* <td headers="matches classes intersection">{@code d}, {@code e}, or {@code f} (intersection)</tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="subtraction1">{@code [a-z&&[^bc]]}</th>
|
||||
* <td headers="matches classes subtraction1">{@code a} through {@code z},
|
||||
* except for {@code b} and {@code c}: {@code [ad-z]} (subtraction)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct classes">{@code [a-z&&[^m-p]]}</td>
|
||||
* <td headers="matches">{@code a} through {@code z},
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="subtraction2">{@code [a-z&&[^m-p]]}</th>
|
||||
* <td headers="matches classes subtraction2">{@code a} through {@code z},
|
||||
* and not {@code m} through {@code p}: {@code [a-lq-z]}(subtraction)</td></tr>
|
||||
* <tr><th> </th></tr>
|
||||
*
|
||||
* <tr style="text-align:left"><th colspan="2" id="predef">Predefined character classes</th></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="predef">Predefined character classes</th></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code .}</td>
|
||||
* <td headers="matches">Any character (may or may not match <a href="#lt">line terminators</a>)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \d}</td>
|
||||
* <td headers="matches">A digit: {@code [0-9]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \D}</td>
|
||||
* <td headers="matches">A non-digit: {@code [^0-9]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \h}</td>
|
||||
* <td headers="matches">A horizontal whitespace character:
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="any">{@code .}</th>
|
||||
* <td headers="matches predef any">Any character (may or may not match <a href="#lt">line terminators</a>)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="digit">{@code \d}</th>
|
||||
* <td headers="matches predef digit">A digit: {@code [0-9]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="non_digit">{@code \D}</th>
|
||||
* <td headers="matches predef non_digit">A non-digit: {@code [^0-9]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="horiz_white">{@code \h}</th>
|
||||
* <td headers="matches predef horiz_white">A horizontal whitespace character:
|
||||
* <code>[ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]</code></td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \H}</td>
|
||||
* <td headers="matches">A non-horizontal whitespace character: {@code [^\h]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \s}</td>
|
||||
* <td headers="matches">A whitespace character: {@code [ \t\n\x0B\f\r]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \S}</td>
|
||||
* <td headers="matches">A non-whitespace character: {@code [^\s]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \v}</td>
|
||||
* <td headers="matches">A vertical whitespace character: <code>[\n\x0B\f\r\x85\u2028\u2029]</code>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="non_horiz_white">{@code \H}</th>
|
||||
* <td headers="matches predef non_horiz_white">A non-horizontal whitespace character: {@code [^\h]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="white">{@code \s}</th>
|
||||
* <td headers="matches predef white">A whitespace character: {@code [ \t\n\x0B\f\r]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="non_white">{@code \S}</th>
|
||||
* <td headers="matches predef non_white">A non-whitespace character: {@code [^\s]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="vert_white">{@code \v}</th>
|
||||
* <td headers="matches predef vert_white">A vertical whitespace character: <code>[\n\x0B\f\r\x85\u2028\u2029]</code>
|
||||
* </td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \V}</td>
|
||||
* <td headers="matches">A non-vertical whitespace character: {@code [^\v]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \w}</td>
|
||||
* <td headers="matches">A word character: {@code [a-zA-Z_0-9]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct predef">{@code \W}</td>
|
||||
* <td headers="matches">A non-word character: {@code [^\w]}</td></tr>
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="posix"><b>POSIX character classes (US-ASCII only)</b></th></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="non_vert_white">{@code \V}</th>
|
||||
* <td headers="matches predef non_vert_white">A non-vertical whitespace character: {@code [^\v]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="word">{@code \w}</th>
|
||||
* <td headers="matches predef word">A word character: {@code [a-zA-Z_0-9]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="non_word">{@code \W}</th>
|
||||
* <td headers="matches predef non_word">A non-word character: {@code [^\w]}</td></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Lower}}</td>
|
||||
* <td headers="matches">A lower-case alphabetic character: {@code [a-z]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Upper}}</td>
|
||||
* <td headers="matches">An upper-case alphabetic character:{@code [A-Z]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{ASCII}}</td>
|
||||
* <td headers="matches">All ASCII:{@code [\x00-\x7F]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Alpha}}</td>
|
||||
* <td headers="matches">An alphabetic character:{@code [\p{Lower}\p{Upper}]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Digit}}</td>
|
||||
* <td headers="matches">A decimal digit: {@code [0-9]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Alnum}}</td>
|
||||
* <td headers="matches">An alphanumeric character:{@code [\p{Alpha}\p{Digit}]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Punct}}</td>
|
||||
* <td headers="matches">Punctuation: One of {@code !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~}</td></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="posix"><b>POSIX character classes (US-ASCII only)</b></th></tr>
|
||||
*
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Lower">{@code \p{Lower}}</th>
|
||||
* <td headers="matches posix Lower">A lower-case alphabetic character: {@code [a-z]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Upper">{@code \p{Upper}}</th>
|
||||
* <td headers="matches posix Upper">An upper-case alphabetic character:{@code [A-Z]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="ASCII">{@code \p{ASCII}}</th>
|
||||
* <td headers="matches posix ASCII">All ASCII:{@code [\x00-\x7F]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Alpha">{@code \p{Alpha}}</th>
|
||||
* <td headers="matches posix Alpha">An alphabetic character:{@code [\p{Lower}\p{Upper}]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Digit">{@code \p{Digit}}</th>
|
||||
* <td headers="matches posix Digit">A decimal digit: {@code [0-9]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Alnum">{@code \p{Alnum}}</th>
|
||||
* <td headers="matches posix Alnum">An alphanumeric character:{@code [\p{Alpha}\p{Digit}]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Punct">{@code \p{Punct}}</th>
|
||||
* <td headers="matches posix Punct">Punctuation: One of {@code !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~}</td></tr>
|
||||
* <!-- {@code [\!"#\$%&'\(\)\*\+,\-\./:;\<=\>\?@\[\\\]\^_`\{\|\}~]}
|
||||
* {@code [\X21-\X2F\X31-\X40\X5B-\X60\X7B-\X7E]} -->
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Graph}}</td>
|
||||
* <td headers="matches">A visible character: {@code [\p{Alnum}\p{Punct}]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Print}}</td>
|
||||
* <td headers="matches">A printable character: {@code [\p{Graph}\x20]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Blank}}</td>
|
||||
* <td headers="matches">A space or a tab: {@code [ \t]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Cntrl}}</td>
|
||||
* <td headers="matches">A control character: {@code [\x00-\x1F\x7F]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{XDigit}}</td>
|
||||
* <td headers="matches">A hexadecimal digit: {@code [0-9a-fA-F]}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Space}}</td>
|
||||
* <td headers="matches">A whitespace character: {@code [ \t\n\x0B\f\r]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Graph">{@code \p{Graph}}</th>
|
||||
* <td headers="matches posix Graph">A visible character: {@code [\p{Alnum}\p{Punct}]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Print">{@code \p{Print}}</th>
|
||||
* <td headers="matches posix Print">A printable character: {@code [\p{Graph}\x20]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Blank">{@code \p{Blank}}</th>
|
||||
* <td headers="matches posix Blank">A space or a tab: {@code [ \t]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Cntrl">{@code \p{Cntrl}}</th>
|
||||
* <td headers="matches posix Cntrl">A control character: {@code [\x00-\x1F\x7F]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="XDigit">{@code \p{XDigit}}</th>
|
||||
* <td headers="matches posix XDigit">A hexadecimal digit: {@code [0-9a-fA-F]}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Space">{@code \p{Space}}</th>
|
||||
* <td headers="matches posix Space">A whitespace character: {@code [ \t\n\x0B\f\r]}</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2">java.lang.Character classes (simple <a href="#jcc">java character type</a>)</th></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="java">java.lang.Character classes (simple <a href="#jcc">java character type</a>)</th></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:top">{@code \p{javaLowerCase}}</td>
|
||||
* <td>Equivalent to java.lang.Character.isLowerCase()</td></tr>
|
||||
* <tr><td style="vertical-align:top">{@code \p{javaUpperCase}}</td>
|
||||
* <td>Equivalent to java.lang.Character.isUpperCase()</td></tr>
|
||||
* <tr><td style="vertical-align:top">{@code \p{javaWhitespace}}</td>
|
||||
* <td>Equivalent to java.lang.Character.isWhitespace()</td></tr>
|
||||
* <tr><td style="vertical-align:top">{@code \p{javaMirrored}}</td>
|
||||
* <td>Equivalent to java.lang.Character.isMirrored()</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="javaLowerCase">{@code \p{javaLowerCase}}</th>
|
||||
* <td headers="matches java javaLowerCase">Equivalent to java.lang.Character.isLowerCase()</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="javaUpperCase">{@code \p{javaUpperCase}}</th>
|
||||
* <td headers="matches java javaUpperCase">Equivalent to java.lang.Character.isUpperCase()</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="javaWhitespace">{@code \p{javaWhitespace}}</th>
|
||||
* <td headers="matches java javaWhitespace">Equivalent to java.lang.Character.isWhitespace()</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="javaMirrored">{@code \p{javaMirrored}}</th>
|
||||
* <td headers="matches java javaMirrored">Equivalent to java.lang.Character.isMirrored()</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="unicode">Classes for Unicode scripts, blocks, categories and binary properties</th></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{IsLatin}}</td>
|
||||
* <td headers="matches">A Latin script character (<a href="#usc">script</a>)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{InGreek}}</td>
|
||||
* <td headers="matches">A character in the Greek block (<a href="#ubc">block</a>)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{Lu}}</td>
|
||||
* <td headers="matches">An uppercase letter (<a href="#ucc">category</a>)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{IsAlphabetic}}</td>
|
||||
* <td headers="matches">An alphabetic character (<a href="#ubpc">binary property</a>)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{Sc}}</td>
|
||||
* <td headers="matches">A currency symbol</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code \P{InGreek}}</td>
|
||||
* <td headers="matches">Any character except one in the Greek block (negation)</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct unicode">{@code [\p{L}&&[^\p{Lu}]]}</td>
|
||||
* <td headers="matches">Any letter except an uppercase letter (subtraction)</td></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="unicode">Classes for Unicode scripts, blocks, categories and binary properties</th></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="bounds">Boundary matchers</th></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="IsLatin">{@code \p{IsLatin}}</th>
|
||||
* <td headers="matches unicode IsLatin">A Latin script character (<a href="#usc">script</a>)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="InGreek">{@code \p{InGreek}}</th>
|
||||
* <td headers="matches unicode InGreek">A character in the Greek block (<a href="#ubc">block</a>)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Lu">{@code \p{Lu}}</th>
|
||||
* <td headers="matches unicode Lu">An uppercase letter (<a href="#ucc">category</a>)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="IsAlphabetic">{@code \p{IsAlphabetic}}</th>
|
||||
* <td headers="matches unicode IsAlphabetic">An alphabetic character (<a href="#ubpc">binary property</a>)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="Sc">{@code \p{Sc}}</th>
|
||||
* <td headers="matches unicode Sc">A currency symbol</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="not_InGreek">{@code \P{InGreek}}</th>
|
||||
* <td headers="matches unicode not_InGreek">Any character except one in the Greek block (negation)</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="not_uppercase">{@code [\p{L}&&[^\p{Lu}]]}</th>
|
||||
* <td headers="matches unicode not_uppercase">Any letter except an uppercase letter (subtraction)</td></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code ^}</td>
|
||||
* <td headers="matches">The beginning of a line</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code $}</td>
|
||||
* <td headers="matches">The end of a line</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \b}</td>
|
||||
* <td headers="matches">A word boundary</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \b{g}}</td>
|
||||
* <td headers="matches">A Unicode extended grapheme cluster boundary</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \B}</td>
|
||||
* <td headers="matches">A non-word boundary</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \A}</td>
|
||||
* <td headers="matches">The beginning of the input</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \G}</td>
|
||||
* <td headers="matches">The end of the previous match</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \Z}</td>
|
||||
* <td headers="matches">The end of the input but for the final
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="bounds">Boundary matchers</th></tr>
|
||||
*
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="begin_line">{@code ^}</th>
|
||||
* <td headers="matches bounds begin_line">The beginning of a line</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="end_line">{@code $}</th>
|
||||
* <td headers="matches bounds end_line">The end of a line</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="word_boundary">{@code \b}</th>
|
||||
* <td headers="matches bounds word_boundary">A word boundary</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="grapheme_cluster_boundary">{@code \b{g}}</th>
|
||||
* <td headers="matches bounds grapheme_cluster_boundary">A Unicode extended grapheme cluster boundary</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="non_word_boundary">{@code \B}</th>
|
||||
* <td headers="matches bounds non_word_boundary">A non-word boundary</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="begin_input">{@code \A}</th>
|
||||
* <td headers="matches bounds begin_input">The beginning of the input</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="end_prev_match">{@code \G}</th>
|
||||
* <td headers="matches bounds end_prev_match">The end of the previous match</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="end_input_except_term">{@code \Z}</th>
|
||||
* <td headers="matches bounds end_input_except_term">The end of the input but for the final
|
||||
* <a href="#lt">terminator</a>, if any</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct bounds">{@code \z}</td>
|
||||
* <td headers="matches">The end of the input</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="end_input">{@code \z}</th>
|
||||
* <td headers="matches bounds end_input">The end of the input</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="lineending">Linebreak matcher</th></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct lineending">{@code \R}</td>
|
||||
* <td headers="matches">Any Unicode linebreak sequence, is equivalent to
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="linebreak">Linebreak matcher</th></tr>
|
||||
*
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="any_unicode_linebreak">{@code \R}</th>
|
||||
* <td headers="matches linebreak any_unicode_linebreak">Any Unicode linebreak sequence, is equivalent to
|
||||
* <code>\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
|
||||
* </code></td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="grapheme">Unicode Extended Grapheme matcher</th></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct grapheme">{@code \X}</td>
|
||||
* <td headers="matches">Any Unicode extended grapheme cluster</td></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="grapheme">Unicode Extended Grapheme matcher</th></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="greedy">Greedy quantifiers</th></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="grapheme_any">{@code \X}</th>
|
||||
* <td headers="matches grapheme grapheme_any">Any Unicode extended grapheme cluster</td></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i>{@code ?}</td>
|
||||
* <td headers="matches"><i>X</i>, once or not at all</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i>{@code *}</td>
|
||||
* <td headers="matches"><i>X</i>, zero or more times</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i>{@code +}</td>
|
||||
* <td headers="matches"><i>X</i>, one or more times</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i><code>{</code><i>n</i><code>}</code></td>
|
||||
* <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}}</td>
|
||||
* <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}</code></td>
|
||||
* <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="greedy">Greedy quantifiers</th></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="reluc">Reluctant quantifiers</th></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="greedy_once_or_not"><i>X</i>{@code ?}</th>
|
||||
* <td headers="matches greedy greedy_once_or_not"><i>X</i>, once or not at all</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="greedy_zero_or_more"><i>X</i>{@code *}</th>
|
||||
* <td headers="matches greedy greedy_zero_or_more"><i>X</i>, zero or more times</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="greedy_one_or_more"><i>X</i>{@code +}</th>
|
||||
* <td headers="matches greedy greedy_one_or_more"><i>X</i>, one or more times</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="greedy_exactly"><i>X</i><code>{</code><i>n</i><code>}</code></th>
|
||||
* <td headers="matches greedy greedy_exactly"><i>X</i>, exactly <i>n</i> times</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="greedy_at_least"><i>X</i><code>{</code><i>n</i>{@code ,}}</th>
|
||||
* <td headers="matches greedy greedy_at_least"><i>X</i>, at least <i>n</i> times</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="greedy_at_least_up_to"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}</code></th>
|
||||
* <td headers="matches greedy greedy_at_least_up_to"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i>{@code ??}</td>
|
||||
* <td headers="matches"><i>X</i>, once or not at all</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i>{@code *?}</td>
|
||||
* <td headers="matches"><i>X</i>, zero or more times</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i>{@code +?}</td>
|
||||
* <td headers="matches"><i>X</i>, one or more times</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>}?</code></td>
|
||||
* <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>,}?</code></td>
|
||||
* <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}?</code></td>
|
||||
* <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="reluc">Reluctant quantifiers</th></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="poss">Possessive quantifiers</th></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="reluc_once_or_not"><i>X</i>{@code ??}</th>
|
||||
* <td headers="matches reluc reluc_once_or_not"><i>X</i>, once or not at all</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="reluc_zero_or_more"><i>X</i>{@code *?}</th>
|
||||
* <td headers="matches reluc reluc_zero_or_more"><i>X</i>, zero or more times</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="reluc_one_or_more"><i>X</i>{@code +?}</th>
|
||||
* <td headers="matches reluc reluc_one_or_more"><i>X</i>, one or more times</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="reluc_exactly"><i>X</i><code>{</code><i>n</i><code>}?</code></th>
|
||||
* <td headers="matches reluc reluc_exactly"><i>X</i>, exactly <i>n</i> times</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="reluc_at_least"><i>X</i><code>{</code><i>n</i><code>,}?</code></th>
|
||||
* <td headers="matches reluc reluc_at_least"><i>X</i>, at least <i>n</i> times</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="reluc_at_least_up_to"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}?</code></th>
|
||||
* <td headers="matches reluc reluc_at_least_up_to"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:top" headers="construct poss"><i>X</i>{@code ?+}</td>
|
||||
* <td headers="matches"><i>X</i>, once or not at all</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct poss"><i>X</i>{@code *+}</td>
|
||||
* <td headers="matches"><i>X</i>, zero or more times</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct poss"><i>X</i>{@code ++}</td>
|
||||
* <td headers="matches"><i>X</i>, one or more times</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>}+</code></td>
|
||||
* <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>,}+</code></td>
|
||||
* <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct poss"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}+</code></td>
|
||||
* <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="poss">Possessive quantifiers</th></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="logical">Logical operators</th></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="poss_once_or_not"><i>X</i>{@code ?+}</th>
|
||||
* <td headers="matches poss poss_once_or_not"><i>X</i>, once or not at all</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="poss_zero_or_more"><i>X</i>{@code *+}</th>
|
||||
* <td headers="matches poss poss_zero_or_more"><i>X</i>, zero or more times</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="poss_one_or_more"><i>X</i>{@code ++}</th>
|
||||
* <td headers="matches poss poss_one_or_more"><i>X</i>, one or more times</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="poss_exactly"><i>X</i><code>{</code><i>n</i><code>}+</code></th>
|
||||
* <td headers="matches poss poss_exactly"><i>X</i>, exactly <i>n</i> times</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="poss_at_least"><i>X</i><code>{</code><i>n</i><code>,}+</code></th>
|
||||
* <td headers="matches poss poss_at_least"><i>X</i>, at least <i>n</i> times</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="poss_at_least_up_to"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}+</code></th>
|
||||
* <td headers="matches poss poss_at_least_up_to"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:top" headers="construct logical"><i>XY</i></td>
|
||||
* <td headers="matches"><i>X</i> followed by <i>Y</i></td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct logical"><i>X</i>{@code |}<i>Y</i></td>
|
||||
* <td headers="matches">Either <i>X</i> or <i>Y</i></td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct logical">{@code (}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches">X, as a <a href="#cg">capturing group</a></td></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="logical">Logical operators</th></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="backref">Back references</th></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="concat"><i>XY</i></th>
|
||||
* <td headers="matches logical concat"><i>X</i> followed by <i>Y</i></td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="alternate"><i>X</i>{@code |}<i>Y</i></th>
|
||||
* <td headers="matches logical alternate">Either <i>X</i> or <i>Y</i></td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="group">{@code (}<i>X</i>{@code )}</th>
|
||||
* <td headers="matches logical group">X, as a <a href="#cg">capturing group</a></td></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:bottom" headers="construct backref">{@code \}<i>n</i></td>
|
||||
* <td style="vertical-align:bottom" headers="matches">Whatever the <i>n</i><sup>th</sup>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="backref">Back references</th></tr>
|
||||
*
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="back_nth">{@code \}<i>n</i></th>
|
||||
* <td headers="matches backref back_nth">Whatever the <i>n</i><sup>th</sup>
|
||||
* <a href="#cg">capturing group</a> matched</td></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:bottom" headers="construct backref">{@code \}<i>k</i><<i>name</i>></td>
|
||||
* <td style="vertical-align:bottom" headers="matches">Whatever the
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="back_named">{@code \}<i>k</i><<i>name</i>></th>
|
||||
* <td headers="matches backref back_named">Whatever the
|
||||
* <a href="#groupname">named-capturing group</a> "name" matched</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="quot">Quotation</th></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="quote">Quotation</th></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:top" headers="construct quot">{@code \}</td>
|
||||
* <td headers="matches">Nothing, but quotes the following character</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct quot">{@code \Q}</td>
|
||||
* <td headers="matches">Nothing, but quotes all characters until {@code \E}</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct quot">{@code \E}</td>
|
||||
* <td headers="matches">Nothing, but ends quoting started by {@code \Q}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="quote_follow">{@code \}</th>
|
||||
* <td headers="matches quote quote_follow">Nothing, but quotes the following character</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="quote_begin">{@code \Q}</th>
|
||||
* <td headers="matches quote quote_begin">Nothing, but quotes all characters until {@code \E}</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="quote_end">{@code \E}</th>
|
||||
* <td headers="matches quote quote_end">Nothing, but ends quoting started by {@code \Q}</td></tr>
|
||||
* <!-- Metachars: !$()*+.<>?[\]^{|} -->
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr style="text-align:left"><th colspan="2" id="special">Special constructs (named-capturing and non-capturing)</th></tr>
|
||||
* <tr><th colspan="2" style="padding-top:20px" id="special">Special constructs (named-capturing and non-capturing)</th></tr>
|
||||
*
|
||||
* <tr><td style="vertical-align:top" headers="construct special"><code>(?<<a href="#groupname">name</a>></code><i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, as a named-capturing group</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct special">{@code (?:}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, as a non-capturing group</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct special"><code>(?idmsuxU-idmsuxU) </code></td>
|
||||
* <td headers="matches">Nothing, but turns match flags <a href="#CASE_INSENSITIVE">i</a>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="named_group"><code>(?<<a href="#groupname">name</a>></code><i>X</i>{@code )}</th>
|
||||
* <td headers="matches special named_group"><i>X</i>, as a named-capturing group</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="non_capture_group">{@code (?:}<i>X</i>{@code )}</th>
|
||||
* <td headers="matches special non_capture_group"><i>X</i>, as a non-capturing group</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="flags"><code>(?idmsuxU-idmsuxU) </code></th>
|
||||
* <td headers="matches special flags">Nothing, but turns match flags <a href="#CASE_INSENSITIVE">i</a>
|
||||
* <a href="#UNIX_LINES">d</a> <a href="#MULTILINE">m</a> <a href="#DOTALL">s</a>
|
||||
* <a href="#UNICODE_CASE">u</a> <a href="#COMMENTS">x</a> <a href="#UNICODE_CHARACTER_CLASS">U</a>
|
||||
* on - off</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct special"><code>(?idmsux-idmsux:</code><i>X</i>{@code )} </td>
|
||||
* <td headers="matches"><i>X</i>, as a <a href="#cg">non-capturing group</a> with the
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="non_capture_group_flags"><code>(?idmsux-idmsux:</code><i>X</i>{@code )} </th>
|
||||
* <td headers="matches special non_capture_group_flags"><i>X</i>, as a <a href="#cg">non-capturing group</a> with the
|
||||
* given flags <a href="#CASE_INSENSITIVE">i</a> <a href="#UNIX_LINES">d</a>
|
||||
* <a href="#MULTILINE">m</a> <a href="#DOTALL">s</a> <a href="#UNICODE_CASE">u</a >
|
||||
* <a href="#COMMENTS">x</a> on - off</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct special">{@code (?=}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, via zero-width positive lookahead</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct special">{@code (?!}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, via zero-width negative lookahead</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct special">{@code (?<=}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, via zero-width positive lookbehind</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct special">{@code (?<!}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, via zero-width negative lookbehind</td></tr>
|
||||
* <tr><td style="vertical-align:top" headers="construct special">{@code (?>}<i>X</i>{@code )}</td>
|
||||
* <td headers="matches"><i>X</i>, as an independent, non-capturing group</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="pos_lookahead">{@code (?=}<i>X</i>{@code )}</th>
|
||||
* <td headers="matches special pos_lookahead"><i>X</i>, via zero-width positive lookahead</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="neg_lookahead">{@code (?!}<i>X</i>{@code )}</th>
|
||||
* <td headers="matches special neg_lookahead"><i>X</i>, via zero-width negative lookahead</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="pos_lookbehind">{@code (?<=}<i>X</i>{@code )}</th>
|
||||
* <td headers="matches special pos_lookbehind"><i>X</i>, via zero-width positive lookbehind</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="neg_lookbehind">{@code (?<!}<i>X</i>{@code )}</th>
|
||||
* <td headers="matches special neg_lookbehind"><i>X</i>, via zero-width negative lookbehind</td></tr>
|
||||
* <tr><th style="vertical-align:top; font-weight:normal" id="indep_non_capture_group">{@code (?>}<i>X</i>{@code )}</th>
|
||||
* <td headers="matches special indep_non_capture_group"><i>X</i>, as an independent, non-capturing group</td></tr>
|
||||
*
|
||||
* </tbody>
|
||||
* </table>
|
||||
@ -432,26 +419,29 @@ import java.util.stream.StreamSupport;
|
||||
* <p> The precedence of character-class operators is as follows, from
|
||||
* highest to lowest:
|
||||
*
|
||||
* <blockquote><table>
|
||||
* <table class="striped" style="margin-left: 2em;">
|
||||
* <caption style="display:none">Precedence of character class operators.</caption>
|
||||
* <thead>
|
||||
* <tr><th scope="col">Precedence<th scope="col">Name<th scope="col">Example
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr><th>1 </th>
|
||||
* <tr><th scope="row">1</th>
|
||||
* <td>Literal escape </td>
|
||||
* <td>{@code \x}</td></tr>
|
||||
* <tr><th>2 </th>
|
||||
* <tr><th scope="row">2</th>
|
||||
* <td>Grouping</td>
|
||||
* <td>{@code [...]}</td></tr>
|
||||
* <tr><th>3 </th>
|
||||
* <tr><th scope="row">3</th>
|
||||
* <td>Range</td>
|
||||
* <td>{@code a-z}</td></tr>
|
||||
* <tr><th>4 </th>
|
||||
* <tr><th scope="row">4</th>
|
||||
* <td>Union</td>
|
||||
* <td>{@code [a-e][i-u]}</td></tr>
|
||||
* <tr><th>5 </th>
|
||||
* <tr><th scope="row">5</th>
|
||||
* <td>Intersection</td>
|
||||
* <td>{@code [a-z&&[aeiou]]}</td></tr>
|
||||
* </tbody>
|
||||
* </table></blockquote>
|
||||
* </table>
|
||||
*
|
||||
* <p> Note that a different set of metacharacters are in effect inside
|
||||
* a character class than outside a character class. For instance, the
|
||||
@ -467,18 +457,18 @@ import java.util.stream.StreamSupport;
|
||||
*
|
||||
* <ul>
|
||||
*
|
||||
* <li> A newline (line feed) character ({@code '\n'}),
|
||||
* <li> A newline (line feed) character ({@code '\n'}),
|
||||
*
|
||||
* <li> A carriage-return character followed immediately by a newline
|
||||
* character ({@code "\r\n"}),
|
||||
* character ({@code "\r\n"}),
|
||||
*
|
||||
* <li> A standalone carriage-return character ({@code '\r'}),
|
||||
* <li> A standalone carriage-return character ({@code '\r'}),
|
||||
*
|
||||
* <li> A next-line character (<code>'\u0085'</code>),
|
||||
* <li> A next-line character (<code>'\u0085'</code>),
|
||||
*
|
||||
* <li> A line-separator character (<code>'\u2028'</code>), or
|
||||
* <li> A line-separator character (<code>'\u2028'</code>), or
|
||||
*
|
||||
* <li> A paragraph-separator character (<code>'\u2029'</code>).
|
||||
* <li> A paragraph-separator character (<code>'\u2029'</code>).
|
||||
*
|
||||
* </ul>
|
||||
* <p>If {@link #UNIX_LINES} mode is activated, then the only line terminators
|
||||
@ -501,19 +491,12 @@ import java.util.stream.StreamSupport;
|
||||
* left to right. In the expression {@code ((A)(B(C)))}, for example, there
|
||||
* are four such groups: </p>
|
||||
*
|
||||
* <blockquote><table>
|
||||
* <caption style="display:none">Capturing group numberings</caption>
|
||||
* <tbody>
|
||||
* <tr><th>1 </th>
|
||||
* <td>{@code ((A)(B(C)))}</td></tr>
|
||||
* <tr><th>2 </th>
|
||||
* <td>{@code (A)}</td></tr>
|
||||
* <tr><th>3 </th>
|
||||
* <td>{@code (B(C))}</td></tr>
|
||||
* <tr><th>4 </th>
|
||||
* <td>{@code (C)}</td></tr>
|
||||
* </tbody>
|
||||
* </table></blockquote>
|
||||
* <ol style="margin-left:2em;">
|
||||
* <li> {@code ((A)(B(C)))}
|
||||
* <li> {@code (A)}
|
||||
* <li> {@code (B(C))}
|
||||
* <li> {@code (C)}
|
||||
* </ol>
|
||||
*
|
||||
* <p> Group zero always stands for the entire expression.
|
||||
*
|
||||
@ -649,52 +632,52 @@ import java.util.stream.StreamSupport;
|
||||
* of <a href="http://www.unicode.org/reports/tr18/"><i>Unicode Regular Expression
|
||||
* </i></a>, when {@link #UNICODE_CHARACTER_CLASS} flag is specified.
|
||||
*
|
||||
* <table>
|
||||
* <table class="striped">
|
||||
* <caption style="display:none">predefined and posix character classes in Unicode mode</caption>
|
||||
* <thead>
|
||||
* <tr style="text-align:left">
|
||||
* <th style="text-align:left" id="predef_classes">Classes</th>
|
||||
* <th style="text-align:left" id="predef_matches">Matches</th>
|
||||
* <tr>
|
||||
* <th scope="col" id="predef_classes">Classes</th>
|
||||
* <th scope="col" id="predef_matches">Matches</th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr><td>{@code \p{Lower}}</td>
|
||||
* <tr><th scope="row">{@code \p{Lower}}</th>
|
||||
* <td>A lowercase character:{@code \p{IsLowercase}}</td></tr>
|
||||
* <tr><td>{@code \p{Upper}}</td>
|
||||
* <tr><th scope="row">{@code \p{Upper}}</th>
|
||||
* <td>An uppercase character:{@code \p{IsUppercase}}</td></tr>
|
||||
* <tr><td>{@code \p{ASCII}}</td>
|
||||
* <tr><th scope="row">{@code \p{ASCII}}</th>
|
||||
* <td>All ASCII:{@code [\x00-\x7F]}</td></tr>
|
||||
* <tr><td>{@code \p{Alpha}}</td>
|
||||
* <tr><th scope="row">{@code \p{Alpha}}</th>
|
||||
* <td>An alphabetic character:{@code \p{IsAlphabetic}}</td></tr>
|
||||
* <tr><td>{@code \p{Digit}}</td>
|
||||
* <tr><th scope="row">{@code \p{Digit}}</th>
|
||||
* <td>A decimal digit character:{@code \p{IsDigit}}</td></tr>
|
||||
* <tr><td>{@code \p{Alnum}}</td>
|
||||
* <tr><th scope="row">{@code \p{Alnum}}</th>
|
||||
* <td>An alphanumeric character:{@code [\p{IsAlphabetic}\p{IsDigit}]}</td></tr>
|
||||
* <tr><td>{@code \p{Punct}}</td>
|
||||
* <tr><th scope="row">{@code \p{Punct}}</th>
|
||||
* <td>A punctuation character:{@code \p{IsPunctuation}}</td></tr>
|
||||
* <tr><td>{@code \p{Graph}}</td>
|
||||
* <tr><th scope="row">{@code \p{Graph}}</th>
|
||||
* <td>A visible character: {@code [^\p{IsWhite_Space}\p{gc=Cc}\p{gc=Cs}\p{gc=Cn}]}</td></tr>
|
||||
* <tr><td>{@code \p{Print}}</td>
|
||||
* <tr><th scope="row">{@code \p{Print}}</th>
|
||||
* <td>A printable character: {@code [\p{Graph}\p{Blank}&&[^\p{Cntrl}]]}</td></tr>
|
||||
* <tr><td>{@code \p{Blank}}</td>
|
||||
* <tr><th scope="row">{@code \p{Blank}}</th>
|
||||
* <td>A space or a tab: {@code [\p{IsWhite_Space}&&[^\p{gc=Zl}\p{gc=Zp}\x0a\x0b\x0c\x0d\x85]]}</td></tr>
|
||||
* <tr><td>{@code \p{Cntrl}}</td>
|
||||
* <tr><th scope="row">{@code \p{Cntrl}}</th>
|
||||
* <td>A control character: {@code \p{gc=Cc}}</td></tr>
|
||||
* <tr><td>{@code \p{XDigit}}</td>
|
||||
* <tr><th scope="row">{@code \p{XDigit}}</th>
|
||||
* <td>A hexadecimal digit: {@code [\p{gc=Nd}\p{IsHex_Digit}]}</td></tr>
|
||||
* <tr><td>{@code \p{Space}}</td>
|
||||
* <tr><th scope="row">{@code \p{Space}}</th>
|
||||
* <td>A whitespace character:{@code \p{IsWhite_Space}}</td></tr>
|
||||
* <tr><td>{@code \d}</td>
|
||||
* <tr><th scope="row">{@code \d}</th>
|
||||
* <td>A digit: {@code \p{IsDigit}}</td></tr>
|
||||
* <tr><td>{@code \D}</td>
|
||||
* <tr><th scope="row">{@code \D}</th>
|
||||
* <td>A non-digit: {@code [^\d]}</td></tr>
|
||||
* <tr><td>{@code \s}</td>
|
||||
* <tr><th scope="row">{@code \s}</th>
|
||||
* <td>A whitespace character: {@code \p{IsWhite_Space}}</td></tr>
|
||||
* <tr><td>{@code \S}</td>
|
||||
* <tr><th scope="row">{@code \S}</th>
|
||||
* <td>A non-whitespace character: {@code [^\s]}</td></tr>
|
||||
* <tr><td>{@code \w}</td>
|
||||
* <tr><th scope="row">{@code \w}</th>
|
||||
* <td>A word character: {@code [\p{Alpha}\p{gc=Mn}\p{gc=Me}\p{gc=Mc}\p{Digit}\p{gc=Pc}\p{IsJoin_Control}]}</td></tr>
|
||||
* <tr><td>{@code \W}</td>
|
||||
* <tr><th scope="row">{@code \W}</th>
|
||||
* <td>A non-word character: {@code [^\w]}</td></tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
@ -1219,34 +1202,36 @@ public final class Pattern
|
||||
* <p> The input {@code "boo:and:foo"}, for example, yields the following
|
||||
* results with these parameters:
|
||||
*
|
||||
* <blockquote><table>
|
||||
* <caption>Split examples showing regex, limit, and result</caption>
|
||||
* <table class="plain" style="margin-left:2em;">
|
||||
* <caption style="display:none">Split example showing regex, limit, and result</caption>
|
||||
* <thead>
|
||||
* <tr><th style="text-align:left"><i>Regex </i></th>
|
||||
* <th style="text-align:left"><i>Limit </i></th>
|
||||
* <th style="text-align:left"><i>Result </i></th></tr>
|
||||
* <tr>
|
||||
* <th scope="col">Regex</th>
|
||||
* <th scope="col">Limit</th>
|
||||
* <th scope="col">Result</th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr><td style="text-align:center">:</td>
|
||||
* <td style="text-align:center">2</td>
|
||||
* <tr><th scope="row" rowspan="3" style="font-weight:normal">:</th>
|
||||
* <th scope="row" style="font-weight:normal; text-align:right; padding-right:1em">2</th>
|
||||
* <td>{@code { "boo", "and:foo" }}</td></tr>
|
||||
* <tr><td style="text-align:center">:</td>
|
||||
* <td style="text-align:center">5</td>
|
||||
* <tr><!-- : -->
|
||||
* <th scope="row" style="font-weight:normal; text-align:right; padding-right:1em">5</th>
|
||||
* <td>{@code { "boo", "and", "foo" }}</td></tr>
|
||||
* <tr><td style="text-align:center">:</td>
|
||||
* <td style="text-align:center">-2</td>
|
||||
* <tr><!-- : -->
|
||||
* <th scope="row" style="font-weight:normal; text-align:right; padding-right:1em">-2</th>
|
||||
* <td>{@code { "boo", "and", "foo" }}</td></tr>
|
||||
* <tr><td style="text-align:center">o</td>
|
||||
* <td style="text-align:center">5</td>
|
||||
* <tr><th scope="row" rowspan="3" style="font-weight:normal">o</th>
|
||||
* <th scope="row" style="font-weight:normal; text-align:right; padding-right:1em">5</th>
|
||||
* <td>{@code { "b", "", ":and:f", "", "" }}</td></tr>
|
||||
* <tr><td style="text-align:center">o</td>
|
||||
* <td style="text-align:center">-2</td>
|
||||
* <tr><!-- o -->
|
||||
* <th scope="row" style="font-weight:normal; text-align:right; padding-right:1em">-2</th>
|
||||
* <td>{@code { "b", "", ":and:f", "", "" }}</td></tr>
|
||||
* <tr><td style="text-align:center">o</td>
|
||||
* <td style="text-align:center">0</td>
|
||||
* <tr><!-- o -->
|
||||
* <th scope="row" style="font-weight:normal; text-align:right; padding-right:1em">0</th>
|
||||
* <td>{@code { "b", "", ":and:f" }}</td></tr>
|
||||
* </tbody>
|
||||
* </table></blockquote>
|
||||
* </table>
|
||||
*
|
||||
* @param input
|
||||
* The character sequence to be split
|
||||
@ -1310,19 +1295,21 @@ public final class Pattern
|
||||
* <p> The input {@code "boo:and:foo"}, for example, yields the following
|
||||
* results with these expressions:
|
||||
*
|
||||
* <blockquote><table>
|
||||
* <table class="plain" style="margin-left:2em">
|
||||
* <caption style="display:none">Split examples showing regex and result</caption>
|
||||
* <thead>
|
||||
* <tr><th style="text-align:left"><i>Regex </i></th>
|
||||
* <th style="text-align:left"><i>Result</i></th></tr>
|
||||
* <tr>
|
||||
* <th scope="col">Regex</th>
|
||||
* <th scope="col">Result</th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr><td style="text-align:center">:</td>
|
||||
* <tr><th scope="row" style="text-weight:normal">:</th>
|
||||
* <td>{@code { "boo", "and", "foo" }}</td></tr>
|
||||
* <tr><td style="text-align:center">o</td>
|
||||
* <tr><th scope="row" style="text-weight:normal">o</th>
|
||||
* <td>{@code { "b", "", ":and:f" }}</td></tr>
|
||||
* </tbody>
|
||||
* </table></blockquote>
|
||||
* </table>
|
||||
*
|
||||
*
|
||||
* @param input
|
||||
|
@ -46,18 +46,18 @@ import java.util.Map;
|
||||
* Calendar}. The following are calendar-common fields and their values to be
|
||||
* supported for each calendar system.
|
||||
*
|
||||
* <table class="plain">
|
||||
* <table class="striped">
|
||||
* <caption style="display:none">Field values</caption>
|
||||
* <thead>
|
||||
* <tr>
|
||||
* <th>Field</th>
|
||||
* <th>Value</th>
|
||||
* <th>Description</th>
|
||||
* <th scope="col">Field</th>
|
||||
* <th scope="col">Value</th>
|
||||
* <th scope="col">Description</th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr>
|
||||
* <td style="vertical-align:top">{@link Calendar#MONTH}</td>
|
||||
* <th scope="row" style="vertical-align:top">{@link Calendar#MONTH}</th>
|
||||
* <td style="vertical-align:top">{@link Calendar#JANUARY} to {@link Calendar#UNDECIMBER}</td>
|
||||
* <td>Month numbering is 0-based (e.g., 0 - January, ..., 11 -
|
||||
* December). Some calendar systems have 13 months. Month
|
||||
@ -67,13 +67,13 @@ import java.util.Map;
|
||||
* in both of the forms.</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td style="vertical-align:top">{@link Calendar#DAY_OF_WEEK}</td>
|
||||
* <th scope="row" style="vertical-align:top">{@link Calendar#DAY_OF_WEEK}</th>
|
||||
* <td style="vertical-align:top">{@link Calendar#SUNDAY} to {@link Calendar#SATURDAY}</td>
|
||||
* <td>Day-of-week numbering is 1-based starting from Sunday (i.e., 1 - Sunday,
|
||||
* ..., 7 - Saturday).</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td style="vertical-align:top">{@link Calendar#AM_PM}</td>
|
||||
* <th scope="row" style="vertical-align:top">{@link Calendar#AM_PM}</th>
|
||||
* <td style="vertical-align:top">{@link Calendar#AM} to {@link Calendar#PM}</td>
|
||||
* <td>0 - AM, 1 - PM</td>
|
||||
* </tr>
|
||||
@ -86,81 +86,81 @@ import java.util.Map;
|
||||
* <caption style="display:none">Calendar type and field values</caption>
|
||||
* <thead>
|
||||
* <tr>
|
||||
* <th>Calendar Type</th>
|
||||
* <th>Field</th>
|
||||
* <th>Value</th>
|
||||
* <th>Description</th>
|
||||
* <th scope="col">Calendar Type</th>
|
||||
* <th scope="col">Field</th>
|
||||
* <th scope="col">Value</th>
|
||||
* <th scope="col">Description</th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr>
|
||||
* <td rowspan="2" style="vertical-align:top">{@code "gregory"}</td>
|
||||
* <td rowspan="2" style="vertical-align:top">{@link Calendar#ERA}</td>
|
||||
* <td>0</td>
|
||||
* <th scope="row"rowspan="2" style="font-weight:normal; text-align:left; vertical-align:top">{@code "gregory"}</th>
|
||||
* <th scope="row" rowspan="2" style="font-weight:normal; text-align:left; vertical-align:top">{@link Calendar#ERA}</th>
|
||||
* <th scope="row" style="font-weight:normal">0</th>
|
||||
* <td>{@link java.util.GregorianCalendar#BC} (BCE)</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>1</td>
|
||||
* <th scope="row" style="font-weight:normal">1</th>
|
||||
* <td>{@link java.util.GregorianCalendar#AD} (CE)</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td rowspan="2" style="vertical-align:top">{@code "buddhist"}</td>
|
||||
* <td rowspan="2" style="vertical-align:top">{@link Calendar#ERA}</td>
|
||||
* <td>0</td>
|
||||
* <th scope="row" rowspan="2" style="font-weight:normal; text-align:left; vertical-align:top">{@code "buddhist"}</th>
|
||||
* <th scope="row" rowspan="2" style="font-weight:normal; text-align:left; vertical-align:top">{@link Calendar#ERA}</th>
|
||||
* <th scope="row" style="font-weight:normal">0</th>
|
||||
* <td>BC (BCE)</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>1</td>
|
||||
* <th scope="row" style="font-weight:normal">1</th>
|
||||
* <td>B.E. (Buddhist Era)</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td rowspan="6" style="vertical-align:top">{@code "japanese"}</td>
|
||||
* <td rowspan="5" style="vertical-align:top">{@link Calendar#ERA}</td>
|
||||
* <td>0</td>
|
||||
* <th scope="row" rowspan="6" style="font-weight:normal; text-align:left; vertical-align:top">{@code "japanese"}</th>
|
||||
* <th scope="row" rowspan="5" style="font-weight:normal; text-align:left; vertical-align:top">{@link Calendar#ERA}</th>
|
||||
* <th scope="row" style="font-weight:normal">0</th>
|
||||
* <td>Seireki (Before Meiji)</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>1</td>
|
||||
* <th scope="row" style="font-weight:normal">1</th>
|
||||
* <td>Meiji</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>2</td>
|
||||
* <th scope="row" style="font-weight:normal">2</th>
|
||||
* <td>Taisho</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>3</td>
|
||||
* <th scope="row" style="font-weight:normal">3</th>
|
||||
* <td>Showa</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>4</td>
|
||||
* <th scope="row" style="font-weight:normal">4</th>
|
||||
* <td >Heisei</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link Calendar#YEAR}</td>
|
||||
* <td>1</td>
|
||||
* <th scope="row" style="font-weight:normal; text-align:left; vertical-align:top">{@link Calendar#YEAR}</th>
|
||||
* <th scope="row" style="font-weight:normal">1</th>
|
||||
* <td>the first year in each era. It should be returned when a long
|
||||
* style ({@link Calendar#LONG_FORMAT} or {@link Calendar#LONG_STANDALONE}) is
|
||||
* specified. See also the <a href="../../text/SimpleDateFormat.html#year">
|
||||
* Year representation in {@code SimpleDateFormat}</a>.</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td rowspan="2" style="vertical-align:top">{@code "roc"}</td>
|
||||
* <td rowspan="2" style="vertical-align:top">{@link Calendar#ERA}</td>
|
||||
* <td>0</td>
|
||||
* <th scope="row" rowspan="2" style="font-weight:normal; text-align:left; vertical-align:top">{@code "roc"}</th>
|
||||
* <th scope="row" rowspan="2" style="font-weight:normal; text-align:left; vertical-align:top">{@link Calendar#ERA}</th>
|
||||
* <th scope="row" style="font-weight:normal">0</th>
|
||||
* <td>Before R.O.C.</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>1</td>
|
||||
* <th scope="row" style="font-weight:normal">1</th>
|
||||
* <td>R.O.C.</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td rowspan="2" style="vertical-align:top">{@code "islamic"}</td>
|
||||
* <td rowspan="2" style="vertical-align:top">{@link Calendar#ERA}</td>
|
||||
* <td>0</td>
|
||||
* <th scope="row" rowspan="2" style="font-weight:normal; text-align:left; vertical-align:top">{@code "islamic"}</th>
|
||||
* <th scope="row" rowspan="2" style="font-weight:normal; text-align:left; vertical-align:top">{@link Calendar#ERA}</th>
|
||||
* <th scope="row" style="font-weight:normal">0</th>
|
||||
* <td>Before AH</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td>1</td>
|
||||
* <th scope="row" style="font-weight:normal">1</th>
|
||||
* <td>Anno Hijrah (AH)</td>
|
||||
* </tr>
|
||||
* </tbody>
|
||||
|
@ -82,13 +82,13 @@ import sun.security.util.Debug;
|
||||
*
|
||||
* <pre>
|
||||
* grant CodeBase "foo.com", Signedby "foo",
|
||||
* Principal com.sun.security.auth.SolarisPrincipal "duke" {
|
||||
* Principal com.sun.security.auth.UnixPrincipal "duke" {
|
||||
* permission java.io.FilePermission "/home/duke", "read, write";
|
||||
* };
|
||||
* </pre>
|
||||
*
|
||||
* This <b><i>grant</i></b> entry specifies that code from "foo.com",
|
||||
* signed by "foo', and running as a {@code SolarisPrincipal} with the
|
||||
* signed by "foo', and running as a {@code UnixPrincipal} with the
|
||||
* name, duke, has one {@code Permission}. This {@code Permission}
|
||||
* permits the executing code to read and write files in the directory,
|
||||
* "/home/duke".
|
||||
@ -107,8 +107,8 @@ import sun.security.util.Debug;
|
||||
* for that {@code Subject} to be granted the specified Permissions.
|
||||
*
|
||||
* <pre>
|
||||
* grant Principal com.sun.security.auth.SolarisPrincipal "duke",
|
||||
* Principal com.sun.security.auth.SolarisNumericUserPrincipal "0" {
|
||||
* grant Principal com.sun.security.auth.UnixPrincipal "duke",
|
||||
* Principal com.sun.security.auth.UnixNumericUserPrincipal "0" {
|
||||
* permission java.io.FilePermission "/home/duke", "read, write";
|
||||
* permission java.net.SocketPermission "duke.com", "connect";
|
||||
* };
|
||||
|
@ -135,17 +135,16 @@ public final class InnocuousThread extends Thread {
|
||||
Class<?> tk = Thread.class;
|
||||
Class<?> gk = ThreadGroup.class;
|
||||
|
||||
THREAD_LOCALS = UNSAFE.objectFieldOffset
|
||||
(tk.getDeclaredField("threadLocals"));
|
||||
THREAD_LOCALS = UNSAFE.objectFieldOffset(tk, "threadLocals");
|
||||
INHERITABLE_THREAD_LOCALS = UNSAFE.objectFieldOffset
|
||||
(tk.getDeclaredField("inheritableThreadLocals"));
|
||||
(tk, "inheritableThreadLocals");
|
||||
INHERITEDACCESSCONTROLCONTEXT = UNSAFE.objectFieldOffset
|
||||
(tk.getDeclaredField("inheritedAccessControlContext"));
|
||||
(tk, "inheritedAccessControlContext");
|
||||
CONTEXTCLASSLOADER = UNSAFE.objectFieldOffset
|
||||
(tk.getDeclaredField("contextClassLoader"));
|
||||
(tk, "contextClassLoader");
|
||||
|
||||
long tg = UNSAFE.objectFieldOffset(tk.getDeclaredField("group"));
|
||||
long gp = UNSAFE.objectFieldOffset(gk.getDeclaredField("parent"));
|
||||
long tg = UNSAFE.objectFieldOffset(tk, "group");
|
||||
long gp = UNSAFE.objectFieldOffset(gk, "parent");
|
||||
ThreadGroup group = (ThreadGroup)
|
||||
UNSAFE.getObject(Thread.currentThread(), tg);
|
||||
|
||||
|
@ -953,6 +953,25 @@ public final class Unsafe {
|
||||
return objectFieldOffset0(f);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reports the location of the field with a given name in the storage
|
||||
* allocation of its class.
|
||||
*
|
||||
* @throws NullPointerException if any parameter is {@code null}.
|
||||
* @throws InternalError if there is no field named {@code name} declared
|
||||
* in class {@code c}, i.e., if {@code c.getDeclaredField(name)}
|
||||
* would throw {@code java.lang.NoSuchFieldException}.
|
||||
*
|
||||
* @see #objectFieldOffset(Field)
|
||||
*/
|
||||
public long objectFieldOffset(Class<?> c, String name) {
|
||||
if (c == null || name == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
|
||||
return objectFieldOffset1(c, name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reports the location of a given static field, in conjunction with {@link
|
||||
* #staticFieldBase}.
|
||||
@ -3685,6 +3704,7 @@ public final class Unsafe {
|
||||
private native void copyMemory0(Object srcBase, long srcOffset, Object destBase, long destOffset, long bytes);
|
||||
private native void copySwapMemory0(Object srcBase, long srcOffset, Object destBase, long destOffset, long bytes, long elemSize);
|
||||
private native long objectFieldOffset0(Field f);
|
||||
private native long objectFieldOffset1(Class<?> c, String name);
|
||||
private native long staticFieldOffset0(Field f);
|
||||
private native Object staticFieldBase0(Field f);
|
||||
private native boolean shouldBeInitialized0(Class<?> c);
|
||||
|
@ -614,20 +614,13 @@ class AnnotationInvocationHandler implements InvocationHandler, Serializable {
|
||||
}
|
||||
|
||||
private static class UnsafeAccessor {
|
||||
private static final jdk.internal.misc.Unsafe unsafe;
|
||||
private static final long typeOffset;
|
||||
private static final long memberValuesOffset;
|
||||
static {
|
||||
try {
|
||||
unsafe = jdk.internal.misc.Unsafe.getUnsafe();
|
||||
typeOffset = unsafe.objectFieldOffset
|
||||
(AnnotationInvocationHandler.class.getDeclaredField("type"));
|
||||
memberValuesOffset = unsafe.objectFieldOffset
|
||||
(AnnotationInvocationHandler.class.getDeclaredField("memberValues"));
|
||||
} catch (Exception ex) {
|
||||
throw new ExceptionInInitializerError(ex);
|
||||
}
|
||||
}
|
||||
private static final jdk.internal.misc.Unsafe unsafe
|
||||
= jdk.internal.misc.Unsafe.getUnsafe();
|
||||
private static final long typeOffset = unsafe.objectFieldOffset
|
||||
(AnnotationInvocationHandler.class, "type");
|
||||
private static final long memberValuesOffset = unsafe.objectFieldOffset
|
||||
(AnnotationInvocationHandler.class, "memberValues");
|
||||
|
||||
static void setType(AnnotationInvocationHandler o,
|
||||
Class<? extends Annotation> type) {
|
||||
unsafe.putObject(o, typeOffset, type);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -95,51 +95,6 @@ public class AuthResources extends java.util.ListResourceBundle {
|
||||
"Kerberos username [{0}]: "},
|
||||
{"Kerberos.password.for.username.",
|
||||
"Kerberos password for {0}: "},
|
||||
|
||||
/*** EVERYTHING BELOW IS DEPRECATED ***/
|
||||
|
||||
// com.sun.security.auth.PolicyFile
|
||||
{".error.parsing.", ": error parsing "},
|
||||
{"COLON", ": "},
|
||||
{".error.adding.Permission.", ": error adding Permission "},
|
||||
{"SPACE", " "},
|
||||
{"NEWLINE", "\n"},
|
||||
{".error.adding.Entry.", ": error adding Entry "},
|
||||
{"LPARAM", "("},
|
||||
{"RPARAM", ")"},
|
||||
{"attempt.to.add.a.Permission.to.a.readonly.PermissionCollection",
|
||||
"attempt to add a Permission to a readonly PermissionCollection"},
|
||||
|
||||
// com.sun.security.auth.PolicyParser
|
||||
{"expected.keystore.type", "expected keystore type"},
|
||||
{"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
|
||||
"can not specify Principal with a wildcard class without a wildcard name"},
|
||||
{"expected.codeBase.or.SignedBy", "expected codeBase or SignedBy"},
|
||||
{"only.Principal.based.grant.entries.permitted",
|
||||
"only Principal-based grant entries permitted"},
|
||||
{"expected.permission.entry", "expected permission entry"},
|
||||
{"number.", "number "},
|
||||
{"expected.expect.read.end.of.file.",
|
||||
"expected {0}, read end of file"},
|
||||
{"expected.read.end.of.file", "expected ';', read end of file"},
|
||||
{"line.", "line "},
|
||||
{".expected.", ": expected '"},
|
||||
{".found.", "', found '"},
|
||||
{"QUOTE", "'"},
|
||||
|
||||
// SolarisPrincipals
|
||||
{"SolarisNumericGroupPrincipal.Primary.Group.",
|
||||
"SolarisNumericGroupPrincipal [Primary Group]: "},
|
||||
{"SolarisNumericGroupPrincipal.Supplementary.Group.",
|
||||
"SolarisNumericGroupPrincipal [Supplementary Group]: "},
|
||||
{"SolarisNumericUserPrincipal.",
|
||||
"SolarisNumericUserPrincipal: "},
|
||||
{"SolarisPrincipal.", "SolarisPrincipal: "},
|
||||
// provided.null.name is the NullPointerException message when a
|
||||
// developer incorrectly passes a null name to the constructor of
|
||||
// subclasses of java.security.Principal
|
||||
{"provided.null.name", "provided null name"}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -95,50 +95,6 @@ public class AuthResources_de extends java.util.ListResourceBundle {
|
||||
"Kerberos-Benutzername [{0}]: "},
|
||||
{"Kerberos.password.for.username.",
|
||||
"Kerberos-Kennwort f\u00FCr {0}: "},
|
||||
|
||||
/*** EVERYTHING BELOW IS DEPRECATED ***/
|
||||
|
||||
// com.sun.security.auth.PolicyFile
|
||||
{".error.parsing.", ": Parsefehler "},
|
||||
{"COLON", ": "},
|
||||
{".error.adding.Permission.", ": Fehler beim Hinzuf\u00FCgen der Berechtigung "},
|
||||
{"SPACE", " "},
|
||||
{".error.adding.Entry.", ": Fehler beim Hinzuf\u00FCgen des Eintrags "},
|
||||
{"LPARAM", "("},
|
||||
{"RPARAM", ")"},
|
||||
{"attempt.to.add.a.Permission.to.a.readonly.PermissionCollection",
|
||||
"Es wurde versucht, eine Berechtigung zu einer schreibgesch\u00FCtzten PermissionCollection hinzuzuf\u00FCgen"},
|
||||
|
||||
// com.sun.security.auth.PolicyParser
|
||||
{"expected.keystore.type", "Keystore-Typ erwartet"},
|
||||
{"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
|
||||
"Principal kann nicht mit einer Platzhalterklasse ohne Platzhalternamen angegeben werden"},
|
||||
{"expected.codeBase.or.SignedBy", "codeBase oder SignedBy erwartet"},
|
||||
{"only.Principal.based.grant.entries.permitted",
|
||||
"Nur Principal-basierte Berechtigungseintr\u00E4ge zul\u00E4ssig"},
|
||||
{"expected.permission.entry", "Berechtigungseintrag erwartet"},
|
||||
{"number.", "Nummer "},
|
||||
{"expected.expect.read.end.of.file.",
|
||||
"{0} erwartet, Dateiende gelesen"},
|
||||
{"expected.read.end.of.file", "\";\" erwartet, Dateiende gelesen"},
|
||||
{"line.", "Zeile "},
|
||||
{".expected.", ": erwartet: \""},
|
||||
{".found.", "\", gefunden: \""},
|
||||
{"QUOTE", "'"},
|
||||
|
||||
// SolarisPrincipals
|
||||
{"SolarisNumericGroupPrincipal.Primary.Group.",
|
||||
"SolarisNumericGroupPrincipal [Prim\u00E4rgruppe]: "},
|
||||
{"SolarisNumericGroupPrincipal.Supplementary.Group.",
|
||||
"SolarisNumericGroupPrincipal [Zusatzgruppe]: "},
|
||||
{"SolarisNumericUserPrincipal.",
|
||||
"SolarisNumericUserPrincipal: "},
|
||||
{"SolarisPrincipal.", "SolarisPrincipal: "},
|
||||
// provided.null.name is the NullPointerException message when a
|
||||
// developer incorrectly passes a null name to the constructor of
|
||||
// subclasses of java.security.Principal
|
||||
{"provided.null.name", "Nullname angegeben"}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -95,50 +95,6 @@ public class AuthResources_es extends java.util.ListResourceBundle {
|
||||
"Nombre de usuario de Kerberos [{0}]: "},
|
||||
{"Kerberos.password.for.username.",
|
||||
"Contrase\u00F1a de Kerberos de {0}: "},
|
||||
|
||||
/*** EVERYTHING BELOW IS DEPRECATED ***/
|
||||
|
||||
// com.sun.security.auth.PolicyFile
|
||||
{".error.parsing.", ": error de an\u00E1lisis "},
|
||||
{"COLON", ": "},
|
||||
{".error.adding.Permission.", ": error al agregar el permiso "},
|
||||
{"SPACE", " "},
|
||||
{".error.adding.Entry.", ": error al agregar la entrada "},
|
||||
{"LPARAM", "("},
|
||||
{"RPARAM", ")"},
|
||||
{"attempt.to.add.a.Permission.to.a.readonly.PermissionCollection",
|
||||
"se ha intentado agregar un permiso a una recopilaci\u00F3n de permisos de s\u00F3lo lectura"},
|
||||
|
||||
// com.sun.security.auth.PolicyParser
|
||||
{"expected.keystore.type", "se esperaba un tipo de almac\u00E9n de claves"},
|
||||
{"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
|
||||
"no se puede especificar Principal con una clase de comod\u00EDn sin un nombre de comod\u00EDn"},
|
||||
{"expected.codeBase.or.SignedBy", "se esperaba codeBase o SignedBy"},
|
||||
{"only.Principal.based.grant.entries.permitted",
|
||||
"s\u00F3lo se permite otorgar entradas basadas en Principal"},
|
||||
{"expected.permission.entry", "se esperaba un permiso de entrada"},
|
||||
{"number.", "n\u00FAmero "},
|
||||
{"expected.expect.read.end.of.file.",
|
||||
"se esperaba [{0}], se ha le\u00EDdo final de archivo"},
|
||||
{"expected.read.end.of.file", "se esperaba ';', se ha le\u00EDdo el final de archivo"},
|
||||
{"line.", "l\u00EDnea "},
|
||||
{".expected.", ": se esperaba '"},
|
||||
{".found.", "', se ha encontrado '"},
|
||||
{"QUOTE", "'"},
|
||||
|
||||
// SolarisPrincipals
|
||||
{"SolarisNumericGroupPrincipal.Primary.Group.",
|
||||
"SolarisNumericGroupPrincipal [Grupo Principal]: "},
|
||||
{"SolarisNumericGroupPrincipal.Supplementary.Group.",
|
||||
"SolarisNumericGroupPrincipal [Grupo Adicional]: "},
|
||||
{"SolarisNumericUserPrincipal.",
|
||||
"SolarisNumericUserPrincipal: "},
|
||||
{"SolarisPrincipal.", "SolarisPrincipal: "},
|
||||
// provided.null.name is the NullPointerException message when a
|
||||
// developer incorrectly passes a null name to the constructor of
|
||||
// subclasses of java.security.Principal
|
||||
{"provided.null.name", "se ha proporcionado un nombre nulo"}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -95,50 +95,6 @@ public class AuthResources_fr extends java.util.ListResourceBundle {
|
||||
"Nom utilisateur Kerberos [{0}] : "},
|
||||
{"Kerberos.password.for.username.",
|
||||
"Mot de passe Kerberos pour {0} : "},
|
||||
|
||||
/*** EVERYTHING BELOW IS DEPRECATED ***/
|
||||
|
||||
// com.sun.security.auth.PolicyFile
|
||||
{".error.parsing.", ": erreur d'analyse "},
|
||||
{"COLON", ": "},
|
||||
{".error.adding.Permission.", ": erreur d'ajout de droit "},
|
||||
{"SPACE", " "},
|
||||
{".error.adding.Entry.", ": erreur d'ajout d'entr\u00E9e "},
|
||||
{"LPARAM", "("},
|
||||
{"RPARAM", ")"},
|
||||
{"attempt.to.add.a.Permission.to.a.readonly.PermissionCollection",
|
||||
"tentative d'ajout de droit \u00E0 un ensemble de droits en lecture seule"},
|
||||
|
||||
// com.sun.security.auth.PolicyParser
|
||||
{"expected.keystore.type", "type de fichier de cl\u00E9s attendu"},
|
||||
{"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
|
||||
"impossible de sp\u00E9cifier le principal avec une classe g\u00E9n\u00E9rique sans nom g\u00E9n\u00E9rique"},
|
||||
{"expected.codeBase.or.SignedBy", "codeBase ou SignedBy attendu"},
|
||||
{"only.Principal.based.grant.entries.permitted",
|
||||
"seules les entr\u00E9es bas\u00E9es sur Principal sont autoris\u00E9es"},
|
||||
{"expected.permission.entry", "entr\u00E9e de droit attendue"},
|
||||
{"number.", "nombre "},
|
||||
{"expected.expect.read.end.of.file.",
|
||||
"attendu {0}, lecture de fin de fichier"},
|
||||
{"expected.read.end.of.file", "attendu ';', lecture de fin de fichier"},
|
||||
{"line.", "ligne "},
|
||||
{".expected.", ": attendu '"},
|
||||
{".found.", "', trouv\u00E9 '"},
|
||||
{"QUOTE", "'"},
|
||||
|
||||
// SolarisPrincipals
|
||||
{"SolarisNumericGroupPrincipal.Primary.Group.",
|
||||
"SolarisNumericGroupPrincipal [groupe principal] : "},
|
||||
{"SolarisNumericGroupPrincipal.Supplementary.Group.",
|
||||
"SolarisNumericGroupPrincipal [groupe suppl\u00E9mentaire] : "},
|
||||
{"SolarisNumericUserPrincipal.",
|
||||
"SolarisNumericUserPrincipal : "},
|
||||
{"SolarisPrincipal.", "SolarisPrincipal : "},
|
||||
// provided.null.name is the NullPointerException message when a
|
||||
// developer incorrectly passes a null name to the constructor of
|
||||
// subclasses of java.security.Principal
|
||||
{"provided.null.name", "nom NULL fourni"}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -95,50 +95,6 @@ public class AuthResources_it extends java.util.ListResourceBundle {
|
||||
"Nome utente Kerberos [{0}]: "},
|
||||
{"Kerberos.password.for.username.",
|
||||
"Password Kerberos per {0}: "},
|
||||
|
||||
/*** EVERYTHING BELOW IS DEPRECATED ***/
|
||||
|
||||
// com.sun.security.auth.PolicyFile
|
||||
{".error.parsing.", ": errore durante l'analisi "},
|
||||
{"COLON", ": "},
|
||||
{".error.adding.Permission.", ": errore durante l'aggiunta dell'autorizzazione "},
|
||||
{"SPACE", " "},
|
||||
{".error.adding.Entry.", ": errore durante l'aggiunta della voce "},
|
||||
{"LPARAM", "("},
|
||||
{"RPARAM", ")"},
|
||||
{"attempt.to.add.a.Permission.to.a.readonly.PermissionCollection",
|
||||
"tentativo di aggiungere un'autorizzazione a una PermissionCollection di sola lettura"},
|
||||
|
||||
// com.sun.security.auth.PolicyParser
|
||||
{"expected.keystore.type", "tipo keystore previsto"},
|
||||
{"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
|
||||
"impossibile specificare un principal con una classe carattere jolly senza un nome carattere jolly"},
|
||||
{"expected.codeBase.or.SignedBy", "previsto codeBase o SignedBy"},
|
||||
{"only.Principal.based.grant.entries.permitted",
|
||||
"sono consentiti solo valori garantiti basati sul principal"},
|
||||
{"expected.permission.entry", "prevista voce di autorizzazione"},
|
||||
{"number.", "numero "},
|
||||
{"expected.expect.read.end.of.file.",
|
||||
"previsto {0}, letto end of file"},
|
||||
{"expected.read.end.of.file", "previsto ';', letto end of file"},
|
||||
{"line.", "riga "},
|
||||
{".expected.", ": previsto '"},
|
||||
{".found.", "', trovato '"},
|
||||
{"QUOTE", "'"},
|
||||
|
||||
// SolarisPrincipals
|
||||
{"SolarisNumericGroupPrincipal.Primary.Group.",
|
||||
"SolarisNumericGroupPrincipal [gruppo primario]: "},
|
||||
{"SolarisNumericGroupPrincipal.Supplementary.Group.",
|
||||
"SolarisNumericGroupPrincipal [gruppo supplementare]: "},
|
||||
{"SolarisNumericUserPrincipal.",
|
||||
"SolarisNumericUserPrincipal: "},
|
||||
{"SolarisPrincipal.", "SolarisPrincipal: "},
|
||||
// provided.null.name is the NullPointerException message when a
|
||||
// developer incorrectly passes a null name to the constructor of
|
||||
// subclasses of java.security.Principal
|
||||
{"provided.null.name", "il nome fornito \u00E8 nullo"}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -95,50 +95,6 @@ public class AuthResources_ja extends java.util.ListResourceBundle {
|
||||
"Kerberos\u30E6\u30FC\u30B6\u30FC\u540D[{0}]: "},
|
||||
{"Kerberos.password.for.username.",
|
||||
"{0}\u306EKerberos\u30D1\u30B9\u30EF\u30FC\u30C9: "},
|
||||
|
||||
/*** EVERYTHING BELOW IS DEPRECATED ***/
|
||||
|
||||
// com.sun.security.auth.PolicyFile
|
||||
{".error.parsing.", ": \u89E3\u6790\u30A8\u30E9\u30FC "},
|
||||
{"COLON", ": "},
|
||||
{".error.adding.Permission.", ": \u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u8FFD\u52A0\u30A8\u30E9\u30FC "},
|
||||
{"SPACE", " "},
|
||||
{".error.adding.Entry.", ": \u30A8\u30F3\u30C8\u30EA\u306E\u8FFD\u52A0\u30A8\u30E9\u30FC "},
|
||||
{"LPARAM", "("},
|
||||
{"RPARAM", ")"},
|
||||
{"attempt.to.add.a.Permission.to.a.readonly.PermissionCollection",
|
||||
"\u8AAD\u53D6\u308A\u5C02\u7528\u306EPermissionCollection\u306B\u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u8FFD\u52A0\u304C\u8A66\u884C\u3055\u308C\u307E\u3057\u305F"},
|
||||
|
||||
// com.sun.security.auth.PolicyParser
|
||||
{"expected.keystore.type", "\u4E88\u60F3\u3055\u308C\u305F\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30BF\u30A4\u30D7"},
|
||||
{"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
|
||||
"\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u540D\u306E\u306A\u3044\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u30FB\u30AF\u30E9\u30B9\u3092\u4F7F\u7528\u3057\u3066\u3001\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u3092\u6307\u5B9A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"},
|
||||
{"expected.codeBase.or.SignedBy", "\u4E88\u60F3\u3055\u308C\u305FcodeBase\u307E\u305F\u306FSignedBy"},
|
||||
{"only.Principal.based.grant.entries.permitted",
|
||||
"\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u30FB\u30D9\u30FC\u30B9\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u307F\u304C\u8A31\u53EF\u3055\u308C\u307E\u3059\u3002"},
|
||||
{"expected.permission.entry", "\u4E88\u60F3\u3055\u308C\u305F\u30A2\u30AF\u30BB\u30B9\u6A29\u30A8\u30F3\u30C8\u30EA"},
|
||||
{"number.", "\u6570 "},
|
||||
{"expected.expect.read.end.of.file.",
|
||||
"{0}\u3067\u306F\u306A\u304F\u30D5\u30A1\u30A4\u30EB\u306E\u7D42\u308F\u308A\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u307E\u3057\u305F"},
|
||||
{"expected.read.end.of.file", "\u4E88\u60F3\u5024\u306F';'\u3067\u3059\u304C\u3001\u30D5\u30A1\u30A4\u30EB\u306E\u7D42\u308F\u308A\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u307E\u3057\u305F"},
|
||||
{"line.", "\u884C\u756A\u53F7 "},
|
||||
{".expected.", ": \u4E88\u60F3\u5024'"},
|
||||
{".found.", "',\u691C\u51FA\u5024'"},
|
||||
{"QUOTE", "'"},
|
||||
|
||||
// SolarisPrincipals
|
||||
{"SolarisNumericGroupPrincipal.Primary.Group.",
|
||||
"SolarisNumericGroupPrincipal [\u4E3B\u30B0\u30EB\u30FC\u30D7]: "},
|
||||
{"SolarisNumericGroupPrincipal.Supplementary.Group.",
|
||||
"SolarisNumericGroupPrincipal [\u88DC\u52A9\u30B0\u30EB\u30FC\u30D7]: "},
|
||||
{"SolarisNumericUserPrincipal.",
|
||||
"SolarisNumericUserPrincipal: "},
|
||||
{"SolarisPrincipal.", "SolarisPrincipal: "},
|
||||
// provided.null.name is the NullPointerException message when a
|
||||
// developer incorrectly passes a null name to the constructor of
|
||||
// subclasses of java.security.Principal
|
||||
{"provided.null.name", "null\u306E\u540D\u524D\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -95,50 +95,6 @@ public class AuthResources_ko extends java.util.ListResourceBundle {
|
||||
"Kerberos \uC0AC\uC6A9\uC790 \uC774\uB984 [{0}]: "},
|
||||
{"Kerberos.password.for.username.",
|
||||
"{0}\uC758 Kerberos \uBE44\uBC00\uBC88\uD638: "},
|
||||
|
||||
/*** EVERYTHING BELOW IS DEPRECATED ***/
|
||||
|
||||
// com.sun.security.auth.PolicyFile
|
||||
{".error.parsing.", ": \uAD6C\uBB38\uBD84\uC11D \uC624\uB958 "},
|
||||
{"COLON", ": "},
|
||||
{".error.adding.Permission.", ": \uAD8C\uD55C \uCD94\uAC00 \uC624\uB958 "},
|
||||
{"SPACE", " "},
|
||||
{".error.adding.Entry.", ": \uD56D\uBAA9 \uCD94\uAC00 \uC624\uB958 "},
|
||||
{"LPARAM", "("},
|
||||
{"RPARAM", ")"},
|
||||
{"attempt.to.add.a.Permission.to.a.readonly.PermissionCollection",
|
||||
"\uC77D\uAE30 \uC804\uC6A9 PermissionCollection\uC5D0 \uAD8C\uD55C\uC744 \uCD94\uAC00\uD558\uB824\uACE0 \uC2DC\uB3C4\uD588\uC2B5\uB2C8\uB2E4."},
|
||||
|
||||
// com.sun.security.auth.PolicyParser
|
||||
{"expected.keystore.type", "\uD0A4 \uC800\uC7A5\uC18C \uC720\uD615\uC774 \uD544\uC694\uD569\uB2C8\uB2E4."},
|
||||
{"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
|
||||
"\uC640\uC77C\uB4DC \uCE74\uB4DC \uBB38\uC790 \uC774\uB984 \uC5C6\uC774 \uC640\uC77C\uB4DC \uCE74\uB4DC \uBB38\uC790 \uD074\uB798\uC2A4\uB97C \uC0AC\uC6A9\uD558\uB294 \uC8FC\uCCB4\uB97C \uC9C0\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
|
||||
{"expected.codeBase.or.SignedBy", "codeBase \uB610\uB294 SignedBy\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4."},
|
||||
{"only.Principal.based.grant.entries.permitted",
|
||||
"\uC8FC\uCCB4 \uAE30\uBC18 \uAD8C\uD55C \uBD80\uC5EC \uD56D\uBAA9\uB9CC \uD5C8\uC6A9\uB429\uB2C8\uB2E4."},
|
||||
{"expected.permission.entry", "\uAD8C\uD55C \uD56D\uBAA9\uC774 \uD544\uC694\uD569\uB2C8\uB2E4."},
|
||||
{"number.", "\uC22B\uC790 "},
|
||||
{"expected.expect.read.end.of.file.",
|
||||
"{0}\uC774(\uAC00) \uD544\uC694\uD558\uC9C0\uB9CC \uD30C\uC77C\uC758 \uB05D\uC5D0 \uB3C4\uB2EC\uD588\uC2B5\uB2C8\uB2E4."},
|
||||
{"expected.read.end.of.file", "';'\uC774 \uD544\uC694\uD558\uC9C0\uB9CC \uD30C\uC77C\uC758 \uB05D\uC5D0 \uB3C4\uB2EC\uD588\uC2B5\uB2C8\uB2E4."},
|
||||
{"line.", "\uD589 "},
|
||||
{".expected.", ": \uD544\uC694\uD55C \uD56D\uBAA9: '"},
|
||||
{".found.", "', \uBC1C\uACAC\uB41C \uD56D\uBAA9: '"},
|
||||
{"QUOTE", "'"},
|
||||
|
||||
// SolarisPrincipals
|
||||
{"SolarisNumericGroupPrincipal.Primary.Group.",
|
||||
"SolarisNumericGroupPrincipal [\uAE30\uBCF8 \uADF8\uB8F9]: "},
|
||||
{"SolarisNumericGroupPrincipal.Supplementary.Group.",
|
||||
"SolarisNumericGroupPrincipal [\uBCF4\uC870 \uADF8\uB8F9]: "},
|
||||
{"SolarisNumericUserPrincipal.",
|
||||
"SolarisNumericUserPrincipal: "},
|
||||
{"SolarisPrincipal.", "SolarisPrincipal: "},
|
||||
// provided.null.name is the NullPointerException message when a
|
||||
// developer incorrectly passes a null name to the constructor of
|
||||
// subclasses of java.security.Principal
|
||||
{"provided.null.name", "\uB110 \uC774\uB984\uC744 \uC81C\uACF5\uD588\uC2B5\uB2C8\uB2E4."}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -95,50 +95,6 @@ public class AuthResources_pt_BR extends java.util.ListResourceBundle {
|
||||
"Nome do usu\u00E1rio de Kerberos [{0}]: "},
|
||||
{"Kerberos.password.for.username.",
|
||||
"Senha de Kerberos de {0}: "},
|
||||
|
||||
/*** EVERYTHING BELOW IS DEPRECATED ***/
|
||||
|
||||
// com.sun.security.auth.PolicyFile
|
||||
{".error.parsing.", ": erro de parsing "},
|
||||
{"COLON", ": "},
|
||||
{".error.adding.Permission.", ": erro ao adicionar a Permiss\u00E3o "},
|
||||
{"SPACE", " "},
|
||||
{".error.adding.Entry.", ": erro ao adicionar a Entrada "},
|
||||
{"LPARAM", "("},
|
||||
{"RPARAM", ")"},
|
||||
{"attempt.to.add.a.Permission.to.a.readonly.PermissionCollection",
|
||||
"tentativa de adicionar uma Permiss\u00E3o a um PermissionCollection somente para leitura"},
|
||||
|
||||
// com.sun.security.auth.PolicyParser
|
||||
{"expected.keystore.type", "tipo de armazenamento de chaves esperado"},
|
||||
{"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
|
||||
"n\u00E3o \u00E9 poss\u00EDvel especificar um principal com uma classe curinga sem um nome curinga"},
|
||||
{"expected.codeBase.or.SignedBy", "CodeBase ou SignedBy esperado"},
|
||||
{"only.Principal.based.grant.entries.permitted",
|
||||
"somente \u00E9 permitido conceder entradas com base no Principal"},
|
||||
{"expected.permission.entry", "entrada de permiss\u00E3o esperada"},
|
||||
{"number.", "n\u00FAmero "},
|
||||
{"expected.expect.read.end.of.file.",
|
||||
"esperado {0}, ler fim do arquivo"},
|
||||
{"expected.read.end.of.file", "esperado ';', fim de arquivo lido"},
|
||||
{"line.", "linha "},
|
||||
{".expected.", ": esperado '"},
|
||||
{".found.", "', encontrado '"},
|
||||
{"QUOTE", "'"},
|
||||
|
||||
// SolarisPrincipals
|
||||
{"SolarisNumericGroupPrincipal.Primary.Group.",
|
||||
"SolarisNumericGroupPrincipal [Grupo Principal]: "},
|
||||
{"SolarisNumericGroupPrincipal.Supplementary.Group.",
|
||||
"SolarisNumericGroupPrincipal [Grupo Complementar]: "},
|
||||
{"SolarisNumericUserPrincipal.",
|
||||
"SolarisNumericUserPrincipal: "},
|
||||
{"SolarisPrincipal.", "SolarisPrincipal: "},
|
||||
// provided.null.name is the NullPointerException message when a
|
||||
// developer incorrectly passes a null name to the constructor of
|
||||
// subclasses of java.security.Principal
|
||||
{"provided.null.name", "nome nulo fornecido"}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|